Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2535680
  • 博文数量: 245
  • 博客积分: 4125
  • 博客等级: 上校
  • 技术积分: 3113
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-25 23:56
文章分类

全部博文(245)

文章存档

2015年(2)

2014年(26)

2013年(41)

2012年(40)

2011年(134)

2010年(2)

分类: Java

2012-12-27 13:04:25

java官方文档中这样描述ServletContext:

点击(此处)折叠或打开

  1. There is one context per "web application" per Java Virtual Machine.


这意味着:每一个web应用在每一个JVM中只有一个 ServletContext  (上下文)。

Several Web Apps on one Server (one JVM):

 

点击(此处)折叠或打开

  1. Web App A - Server/JVM 1 - Context 1
  2. Web App B - Server/JVM 1 - Context 2
  3. Web App C - Server/JVM 1 - Context 3


Same Web App on several Servers (several JVMs):


点击(此处)折叠或打开

  1. Web App A - Server/JVM 1 - Context 1
  2. Web App B - Server/JVM 1 - Context 2
  3. Web App C - Server/JVM 1 - Context 3
  4. Web App C - Server/JVM 2 - Context 4


当一个应用被部署(deploying)时,ServletContext将会被创建。一旦ServletContext 被创建,它可以被同一个应用下的所有其他servlets和jsp文件共享。在web应用中,ServletContext 也被当做应用级别的变量( called as the application scope variables)。

ServletContextListener 有以下两个方法:

点击(此处)折叠或打开

  1. public void contextInitialized(ServletContextEvent event)
  2. public void contextDestroyed(ServletContextEvent event)

以下例子创建一个继承ServletContextListener 的类MyAppContextListener ,它实现了ServletContextListener 中的两个方法。
 

点击(此处)折叠或打开

  1. package com.javaer.tools.config;
  2. import java.io.File;
  3. import javax.servlet.ServletContext;
  4. import javax.servlet.ServletContextEvent;
  5. import javax.servlet.ServletContextListener;

  6. public class MyAppContextListener implements ServletContextListener {

  7.     // NOTE: static references are not a great idea, shown here for simplicity
  8.     public static File xsltFolder;
  9.     public static File xmlIndentXsltFile;
  10.     ServletContext context;

  11.     public void contextInitialized(ServletContextEvent e) {
  12.         xsltFolder = new File(e.getServletContext().getInitParameter("xsltFolder"));
  13.         xmlIndentXsltFile = new File(xsltFolder, "xml-indent.xslt");
  14.         
  15.         context = e.getServletContext();
  16.         // set variable to servlet context
  17.         context.setAttribute("TEST", "TEST_VALUE");
  18.         
  19.         System.out.println("xsltFolder:"+xsltFolder);//xsltFolder:\WEB-INF\xslt
  20.         System.out.println("TEST:"+context.getAttribute("TEST"));//TEST:TEST_VALUE
  21.     }

  22.     @Override
  23.     public void contextDestroyed(ServletContextEvent arg0) {
  24.         //当web服务器shut down或者crash时执行
  25.     }
  26. }


上面的程序读取了web.xml文档中的以下内容:
 

点击(此处)折叠或打开

  1. <context-param>
  2.         <param-name>xsltFolder</param-name>
  3.                <param-value>/WEB-INF/xslt</param-value>
  4. </context-param>

为了让应用部署时加载这个类,我们需要在web.xml中添加以下内容:
 

点击(此处)折叠或打开

  1. <listener>
  2.         <listener-class>com.javaer.tools.config.MyAppContextListener</listener-class>
  3. </listener>


完整的web.xml如下(与本例无关内容已经注释):

点击(此处)折叠或打开

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="" xmlns="" xmlns:web="/web-app_2_5.xsd" xsi:schemaLocation=" /web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3.   <display-name>javer</display-name>
  4.   <welcome-file-list>
  5.     <welcome-file>index.html</welcome-file>
  6.     <welcome-file>index.htm</welcome-file>
  7.     <welcome-file>index.jsp</welcome-file>
  8.     <welcome-file>default.html</welcome-file>
  9.     <welcome-file>default.htm</welcome-file>
  10.   </welcome-file-list>
  11.       <!--
  12.       <servlet>
  13.         <servlet-name>mvc-dispatcher</servlet-name>
  14.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  15.         <load-on-startup>1</load-on-startup>
  16.     </servlet>

  17.     <servlet-mapping>
  18.         <servlet-name>mvc-dispatcher</servlet-name>
  19.         <url-pattern>/</url-pattern>
  20.     </servlet-mapping>

  21.     <context-param>
  22.         <param-name>contextConfigLocation</param-name>
  23.         <param-value>/WEB-INF/servlet-context.xml</param-value>
  24.     </context-param>
  25.       -->
  26.     <context-param>
  27.         <param-name>xsltFolder</param-name>
  28.                <param-value>/WEB-INF/xslt</param-value>
  29.     </context-param>
  30.     <!--
  31.         <listener>
  32.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  33.     </listener>
  34.         -->
  35.     <listener>
  36.         <listener-class>com.javaer.tools.config.MyAppContextListener</listener-class>
  37.     </listener>
  38. </web-app>



当应用deploy时就会输出:
 

点击(此处)折叠或打开

  1. xsltFolder:\WEB-INF\xslt
  2. TEST:TEST_VALUE


阅读(2817) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~