Servlet3.0新特性之动态注册
来源:互联网 发布:mac玩英雄联盟鼠标卡顿 编辑:程序博客网 时间:2024/05/23 02:05
动态注册时Servlet3的一项新特性,他不需要重新加载应用程序就可以安装新的Web对象(如Servlet,过滤器,监听器等)
一、动态注册:
ServletContext接口以下的方法,用来动态地创建Web对象
<T extends Filter>createFilter(java.lang.Class<T> clazz)
<T extends java.util.EventListener> createListener(java.lang.Class<T> clazz)
<T extends Servlet>createServlet(java.lang.Class<T> clazz)
例如:Servlet myServlet=createServlet(MyServlet.class);
创建好Web对象后,可以利用以下方法将它添加到ServletContext中
FilterRegistration.Dynamic addFilter(java.lang.String filterName,Filter filter)
<T extends java.util.EventListener> addListener(T t)
ServletRegistration.Dynamic addServlet (String servletName,Servlet servlet)
在创建或者添加监听器时,传给addListener覆盖方法的类必须实现XXXListener接口
addFilter 或addServlet 方法返回值是一个FilterRegistration.Dynamic或ServletRegistration.Dynamic
他们都是Registration.Dynamic 的子接口,
FilterRegistration.Dynamic可以配置一个FIliter
ServletRegistration.Dynamic可以配置一个Servlet
二、举个例子
动态注册一个Servlet:FirstServlet
该Servlet并没有用@WebServlet进行标注,也没有在部署符中部署
监听器对它动态注册,并投入使用
FirstServlet类
import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class FirstServlet extends HttpServlet {private static final long serialVersionUIDD=-6045338L;private String name;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubresp.setContentType("text/html");PrintWriter write=resp.getWriter();write.println("<html><head><title>Fist servlet"+"</title></head><body>"+name);write.println("</body></html>");}public void setName(String name){this.name=name;}}
DynRegListener类
import javax.servlet.Servlet;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.ServletRegistration;import javax.servlet.annotation.WebListener;@WebListenerpublic class DynRegListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void contextInitialized(ServletContextEvent arg0) {// TODO Auto-generated method stubServletContext servletContext=arg0.getServletContext();Servlet firstServlet=null;try{firstServlet=servletContext.createServlet(FirstServlet.class);}catch(Exception e){e.printStackTrace();}if(firstServlet!=null&&firstServlet instanceof FirstServlet){((FirstServlet)firstServlet).setName("Dynamically registered servlet");}ServletRegistration.Dynamic dynamic=servletContext.addServlet("firstServlet", firstServlet);dynamic.addMapping("/dynamic");}}
利用这个URL来调用FirstServlet
http://localhost:8080/app/dynamic
结果:
- Servlet3.0新特性之动态注册
- Servlet3.0新特性&动态代理
- servlet3.0 新特性之Annotation
- Servlet3.0 新特性之模块化实践
- Servlet3.0新特性之文件上传
- Servlet3.0新特性之批量上传
- servlet3.0 新特性
- servlet3.0新特性
- Servlet3.0新特性
- servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- Servlet3.0新特性
- servlet3.0新特性
- Servlet3.0新特性
- 【Servlet3.0新特性】第02节_Servlet的动态注册以及使用注解编写监听器和过滤器
- (简单贪心)Bin Packing
- List接口
- 机房重构之E-R图转换数据库
- 用python创建桌面应用(四)
- 消灭textarea中的神秘空格
- Servlet3.0新特性之动态注册
- HDOJ 2045不容易系列之(3)—— LELE的RPG难题 找规律
- 最新Python异步编程详解
- struts2中的validate框架使用方法
- Windows安装CPU版的TensorFlow 0.12
- 希尔排序(JAVA实现)
- Nodejs 骨架
- 微信开发四 接受用户普通消息与回复消息
- 手推logistic