完整版见 https://jadyer.github.io/2013/06/24/servlet30-new-feature/
下面是一个普通的Java类(它即将在Servlet监听器中被动态注册为Servlet)
下面是采用注解编写的Servlet监听器
最后是采用注解编写的Servlet过滤器
这是一个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提供的动态注册机制把它动态注册为一个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");
}
}下面是采用注解编写的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>
*/
@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");
}
}最后是采用注解编写的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 {
@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);
}
}版权声明:本文为jadyer原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。