【Servlet3.0新特性】第02节_Servlet的动态注册以及使用注解编写监听器和过滤器

来源:互联网 发布:我知你好未再 妈妈网 编辑:程序博客网 时间:2024/05/29 12:14

这是一个Web Project


首先是web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><!-- Servlet3.0需要Tomcat7和JavaEE6,配置方法详见 --><!-- http://blog.csdn.net/jadyer/article/details/9164655 --><!-- http://blog.csdn.net/jadyer/article/details/9164737 --></web-app>

下面是一个普通的Java类(它即将在Servlet监听器中被动态注册为Servlet)

package com.jadyer.servlet;import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//这里并没有使用@WebServlet注解,但为了让这个类成为一个Servlet//我们可以采用Servlet3.0提供的动态注册机制把它动态注册为一个Servletpublic class HelloServlet extends HttpServlet {private static final long serialVersionUID = 759371432019399353L;@Overridepublic void init(ServletConfig config) throws ServletException {System.out.println(config.getInitParameter("logPath"));System.out.println(config.getInitParameter("savePath"));}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("http://blog.csdn.net/jadyer");}}

下面是采用注解编写的Servlet监听器

package com.jadyer.listener;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.ServletRegistration;import javax.servlet.annotation.WebListener;import com.jadyer.servlet.HelloServlet;/** * Servlet3.0新特性之Servlet监听器和Servlet动态注册 * @create Jun 24, 2013 10:39:47 AM * @author 玄玉<http://blog.csdn.net/jadyer> */@WebListenerpublic class HelloListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent arg0) {System.out.println("服务器关闭时会调用该方法");}@Overridepublic void contextInitialized(ServletContextEvent contextEvent) {System.out.println("服务器启动时会调用该方法");ServletContext context = contextEvent.getServletContext();//注册一个没有使用@WebServlet注解的类为Servlet(第一个参数是Servlet的名字)ServletRegistration register = context.addServlet("helloServlet", HelloServlet.class);//为动态注册的Servlet设定访问URL(可设定多个)register.addMapping("/hello", "/servlet/hello");//为动态注册的Servlet设定初始参数(可选的,相当于以前的<init-param>)register.setInitParameter("logPath", "/app/log");register.setInitParameter("savePath", "/app/upload");}}

最后是采用注解编写的Servlet过滤器

package com.jadyer.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.annotation.WebInitParam;@WebFilter(urlPatterns="/*", initParams=@WebInitParam(name="encoding", value="UTF-8"))public class HelloFilter implements Filter {@Overridepublic void destroy() {System.out.println("destroy invoked");}@Overridepublic void init(FilterConfig config) throws ServletException {System.out.println("init invoked");System.out.println(config.getInitParameter("encoding"));}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("doFilter invoked");chain.doFilter(request, response);}}
原创粉丝点击