这是一个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>
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提供的动态注册机制把它动态注册为一个Servlet public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 759371432019399353L; @Override public void init(ServletConfig config) throws ServletException { System.out.println(config.getInitParameter("logPath")); System.out.println(config.getInitParameter("savePath")); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("http://blog.csdn.net/jadyer"); } }
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> */ @WebListener public class HelloListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("服务器关闭时会调用该方法"); } @Override public 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"); } }
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 { @Override public void destroy() { System.out.println("destroy invoked"); } @Override public void init(FilterConfig config) throws ServletException { System.out.println("init invoked"); System.out.println(config.getInitParameter("encoding")); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("doFilter invoked"); chain.doFilter(request, response); } }