http://www.ibm.com/developerworks/cn/java/j-lo-servlet/
http://www.importnew.com/14621.html
Listener
常用在开启应用时初始化应用或者关闭应用时清理应用。可以在应用里注册一个监听器(listener)来显示应用什么时候开启或者关闭。因此,通过监听这些事件,Servlet可以在一些事件发生时执行相应的动作。
为了创建一个基于容器事件执行动作的监听器,你必须创建一个实现 ServletContextListener 接口的类。这个类必须实现的方法有 contextInitialized() 和 contextDestroyed()。这两个方法都需要 ServletContextEvent 作为参数,并且在每次初始化或者关闭Servlet容器时都会被自动调用。
为了在容器注册监听器,你可以使用下面其中一个方法:
1) 利用 @WebListener 注解。
2) 在web.xml应用部署文件里注册监听器。
3) 使用 ServletContext 里定义的 addListener() 方法
请注意,ServletContextListener 不是Servlet API里唯一的监听器。这里还有一些其他的监听器,比如
javax.servlet.ServletRequestListener
javax.servlet.ServletRequestAttrbiteListener
javax.servlet.ServletContextListener
javax.servlet.ServletContextAttributeListener
javax.servlet.HttpSessionListener
javax.servlet.HttpSessionAttributeListener
根据你要监听的事件选择他们来实现你的监听器类。比如,每当创建或销毁一个用户session时,HttpSessionListener 就会发出通知。
Servlet初始化参数
现在的大多数应用都需要设置一些在应用/控制器(controller)启动时可以传递的配置参数(configuration parameters)。Servlet同样可以接受初始化参数,并在处理第一个请求前来使用它们来构建配置参数。
显然,你也可以在Servlet里硬编码配置值。但是这样做的话,在Servlet发生改动时你需要再次重新编译整个应用。没有人喜欢这样做。
<servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>MyServlet</servlet-class> <init-param> <param-name>szc</param-name> <param-value>hello SZC</param-value> </init-param> </servlet>
设置后,你就可以在代码里调用 getServletConfig.getInitializationParameter() 并传递参数名给该方法来使用参数。就像下面展示的代码一样:
String value = getServletConfig().getInitParameter("szc");
使用RequestDispatcher.forward()转发请求到另一个Servlet
有时候,你的应用需要把一个Servlet要处理的请求转让给另外的Servlet来处理并完成任务。而且,转让请求时不能重定向客户端的URL。即浏览器地址栏上的URL不会改变。
RequestDispatcher rd = getServletContext().getRequestDispatcher("/MyServlet");
rd.forward(req, resp);
使用HttpServletResponse.sendRedirect()重定向请求到另一个Servlet
尽管有时候,你不想在Servlet发送重定向时通知用户,就像我们在上面那段看到的一样。但是在某些情况下,我们确实想要通知用户。当应用内的特定URL被访问时,你想把浏览器的URL重定向到另外一个
httpServletResponse.sendRedirect("/TestServlet/MyServlet");
但是,注意这两种方式的url不同,后者得加上tomcat 的path