Servlet 3.0 动态注册组件

动态注册

容器启动时,将组件注册在web.xml。所有我们也应当容器启动时将组件动态注册。
1.创建一个监听容器启动监听器。并将组件注册到其中。

package com.javaweb.servlet3.listeners;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.WebListener;

@WebListener
public class MyServletContextListener implements ServletContextListener {

    public MyServletContextListener() {
        // TODO Auto-generated constructor stub
    }

    public void contextDestroyed(ServletContextEvent arg0)  { 
         // TODO Auto-generated method stub
    }

    public void contextInitialized(ServletContextEvent sce)  { 
    	//获取servlet上下文
    	ServletContext servletContext = sce.getServletContext();
    	//servlet名字和class名,可以放到xml文件。
    	String servletname="some-Servlet";
    	String classname="com.javaweb.servlet3.serlvets.SomeServlet";
    	//注册servlet
    	ServletRegistration.Dynamic servlet = servletContext.addServlet(servletname, classname);
    	//设置servlet<url-parttern/>
    	servlet.addMapping("/some");
    	//filter 的名字和class名
    	String filtername = "Some-filter";
    	String filterClassname="com.javaweb.servlet3.filters.SomeFilter";
    	//注册filter
    	FilterRegistration.Dynamic Filter = servletContext.addFilter(filtername, filterClassname);
    	//参数1设置filterDispathcerType值,参数3监听的对象,可以是servletname
    	Filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
    	
    	String ListenerClassname="com.javaweb.servlet3.listeners.MyRequestListener";
    	servletContext.addListener(ListenerClassname);
    }
	
}

2.需要动态注册的组件

(1)Servlet

public class SomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().write("执行Somservlet");
	}

}

(2)filter

public class SomeFilter implements Filter {

	public SomeFilter() {
		// TODO Auto-generated constructor stub
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		System.out.println("filter注册成功");
		chain.doFilter(request, response);
	}

	public void init(FilterConfig fConfig) throws ServletException {
	}

}

(3)Listener


public class MyRequestListener implements ServletRequestListener{

	@Override
	public void requestDestroyed(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void requestInitialized(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		System.out.println("listener被注册了");
		
	}

}
发布了127 篇原创文章 · 获赞 8 · 访问量 6273

猜你喜欢

转载自blog.csdn.net/OVO_LQ_Start/article/details/105102407