JS技术

初识ServletContext - 楚兴 - 博客频道 - CSDN.NET 楚兴 达则兼济天下 穷则独善其身 htt

字号+ 作者:H5之家 来源:H5之家 2015-12-13 12:07 我要评论( )

OpenSessionInView编辑词条编辑摘要Hibernate的lazy机制可以延迟对数据库的访问操作,但同时也带来一个问题。lazy机制里,只有当首次存取Set等集合数据时,hiber

ServletContext是整个Web应用程序运行后的代表对象,可以通过ServletConfig的getServletContext()方法来取得,之后就可以利用ServletContext来取得Web应用程序的相关资源或信息。

ServletContext简介

可以用ServletContext来与Web应用程序进行沟通,甚至是取得同一服务器上其他Web应用程序的ServletContext。

getRequestDispatcher()

该方法可以取得RequestDispatcher实例,使用时路径的指定必须以“/”作为开头,这个斜杠代表应用程序环境根目录(Context Root)。取得RequestDispatcher实例之后,就可以进行请求的转发(Forward)或包含(Include)。

this.getRequestDispatcher("/pages/some.jsp").forward(request, response);

以”/”作为开头时成为环境相对(context-relative)路径,没有以”/”作为开头则成为请求相对(request-relative)路径。

getResourcePaths()

如果想要知道Web应用程序的某个目录中都有哪些文件,则可以使用getResourcePaths()方法。使用时,指定路径必须以”/”作为开头,表示相对于应用程序环境根目录。例如:

{ (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<head>"); out.println("<title>Resource Paths</title"); out.println("</head>"); out.println("<body>"); out.println("<ul>"); Iterator<String> paths = getServletContext().getResourcePaths("http://blog.csdn.net/").iterator(); while (paths.hasNext()) { String path = paths.next(); out.println("<li>" + path + "</li>"); } out.println("</ul>"); out.println("</body>"); out.println("</html>"); out.close(); } } getResourceAsStream()

如果想在Web应用程序中读取某个文件的内容,则可以使用getResourceAsStream()方法,执行路径时必须以“/”作为开头,表示相对于应用程序环境根目录,运行结果会返回InputStream实例,接着就可以运用它来读取文件内容。

使用java.io下的File、FileReader、FileInputStream等与文件读取相关的类时,可以指定绝对路径或相对路径。绝对路径是指文件在服务器上的真实路径。必须注意的是,指定相对路径时,此时路径不是相对于Web应用程序根目录,而是相对于启动Web容器时的命令执行目录。以Tomcat为例,若在Servlet中执行以下语句:

out.println(new File("filename").getAbsolutePath());

则显示的是filename位于Tomcat目录下的bin目录中。

ServletContext初始参数

每个Servlet都会有一个相对应的ServletConfig对象,我们可以在web.xml中定义Servlet时设置初始参数,之后通过ServletConfig的getInitParameter()方法来读取初始参数。通常最适合读取初始参数的位置在Servlet的无参数init()方法之中,因为Web容器初始Servlet后,会调用有参数的init()方法,而该方法又会调用无参数的init()方法。

每个Web应用程序都会有一个相对应的ServletContext,针对应用程序初始化时所需用到的一些参数数据,可以在web.xml中设置应用程序初始化参数,设置时使用<context-param>标签来定义。例如:

> > </web-app> ServletContextListener

如果想要知道Web应用程序何时初始化或何时结束销毁,可以实现ServletContextListener,并在web.xml中设置告知web容器,在web应用程序初始化后果结束销毁前,调用ServletContextListener实现类中相对应的contextInitialized()或contextDestroyed()。

ServletContextListener接口定义如下:

/** * Implementations of this interface receive notifications about changes to the * servlet context of the web application they are part of. To receive * notification events, the implementation class must be configured in the * deployment descriptor for the web application. * * @see ServletContextEvent * @since v 2.3 */ { /** ** Notification that the web application initialization process is starting. * All ServletContextListeners are notified of context initialization before * any filter or servlet in the web application is initialized. * @param sce Information about the ServletContext that was initialized */ (ServletContextEvent sce); /** ** Notification that the servlet context is about to be shut down. All * servlets and filters have been destroy()ed before any * ServletContextListeners are notified of context destruction. * @param sce Information about the ServletContext that was destroyed */ (ServletContextEvent sce); }

当web容器调用contextInitialized()或contextDestroyed()时,会传入ServletContextEvent,其封装了ServletContext,可以通过ServletContextEvent的getServletContext()方法取得ServletConfig,之后就可以进行ServletContext初始参数的读取了。

对于多个Servlet都会使用到的信息,可以把它设置为ServletContext初始参数,可以在web.xml中做如下定义:

... >/WEB-INF/bookmarks.txt> <listener-class>club.cuxing.web.BookmarkInitializer</listener-class> </listener> ...

<listener>与<listener-class>标签用来定义实现了ServletContextListener接口的类名称。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
o