zoukankan      html  css  js  c++  java
  • 【JavaWeb】Servlet3.0中注解驱动开发

    一、概述

    Servlet3.0中引入了注解开发

    二、@WebServlet注解

    3.0之前要写一个Servlet 需要在web.xml中配置
    3.0我们可以用注解来替代xml中的配置,可以不需要web.xml,示例代码如下:

    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
        
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            
            resp.getWriter().write("hello...");
    }
        
    }
    

    三、共享库/运行时插件

      3.0提供了ServletContainerInitializer,我们可以通过它,在容器启动的时候加载一些组件步骤如下:

    1. Servlet容器启动会扫描,当前应用里面每一个jar包的ServletContainerInitializer的实现
    2. 提供ServletContainerInitializer的实现类;必须绑定在,META-INF/services/javax.servlet.ServletContainerInitializer 文件中,文件的内容就是ServletContainerInitializer实现类的全类名;
    3. 容器在启动应用的时候,会扫描当前应用每一个jar包里面
      META-INF/services/javax.servlet.ServletContainerInitializer
      指定的实现类,启动并运行这个实现类的方法;传入感兴趣的类型;

    这个文件的内容,自定义一个类实现ServletContainerInitializer接口,示例:

    com.atguigu.servlet.MyServletContainerInitializer
    
    import java.util.EnumSet;
    import java.util.Set;
    
    import javax.servlet.DispatcherType;
    import javax.servlet.FilterRegistration;
    import javax.servlet.ServletContainerInitializer;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRegistration;
    import javax.servlet.annotation.HandlesTypes;
    
    import com.atguigu.service.HelloService;
    
    //容器启动的时候会将@HandlesTypes指定的这个类型下面的子类(实现类,子接口等,注意不包括该类HelloService.class)传递过来,;
    //传入感兴趣的类型;
    @HandlesTypes(value={HelloService.class})
    public class MyServletContainerInitializer implements ServletContainerInitializer {
    
        /**
         * 应用启动的时候,会运行onStartup方法;
         * 
         * Set<Class<?>> arg0:感兴趣的类型的所有子类型;
         * ServletContext arg1:代表当前Web应用的ServletContext;一个Web应用一个ServletContext;
         * 
         * 1)、使用ServletContext注册Web组件(Servlet、Filter、Listener)
         * 2)、使用编码的方式,在项目启动的时候给ServletContext里面添加组件;
         *      必须在项目启动的时候来添加;
         *      1)、ServletContainerInitializer得到的ServletContext;
         *      2)、ServletContextListener得到的ServletContext;
         */
        @Override
        public void onStartup(Set<Class<?>> arg0, ServletContext sc) throws ServletException {
            // TODO Auto-generated method stub
            System.out.println("感兴趣的类型:");
            for (Class<?> claz : arg0) {
                System.out.println(claz);
            }
            
            //注册组件  ServletRegistration  
            ServletRegistration.Dynamic servlet = sc.addServlet("userServlet", new UserServlet());
            //配置servlet的映射信息
            servlet.addMapping("/user");
            
            
            //注册Listener
            sc.addListener(UserListener.class);
            
            //注册Filter  FilterRegistration
            FilterRegistration.Dynamic filter = sc.addFilter("userFilter", UserFilter.class);
            //配置Filter的映射信息
            filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
        }
    }
    

    2.1 注册Servlet

    在上面的实现类中可以注册三大组件如下:

    //注册组件  ServletRegistration  
            ServletRegistration.Dynamic servlet = sc.addServlet("userServlet", new UserServlet());
            //配置servlet的映射信息
            servlet.addMapping("/user");
    

    2.2 注册监听器

    //注册Listener
            sc.addListener(UserListener.class);
    

    2.3 注册过滤器

    //注册Filter  FilterRegistration
            FilterRegistration.Dynamic filter = sc.addFilter("userFilter", UserFilter.class);
            //配置Filter的映射信息
            filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
    
  • 相关阅读:
    android listview去掉分割线
    svn 上传 过滤
    PPPOE 模拟环境搭建
    Android笔记之网络-基本了解
    ios多线程操作(五)—— GCD串行队列与并发队列
    UVa 679
    android中更改spinner、AutoCompleteTextView切割线的颜色
    Cocos2d-x中触摸事件
    全然符合package.json在CommonJS中的规范
    Hibernate实体对象继承策略
  • 原文地址:https://www.cnblogs.com/haoworld/p/javawebservlet30zhong-zhu-jie-qu-dong-kai-fa.html
Copyright © 2011-2022 走看看