• 【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, "/*");
    
  • 相关阅读:
    【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)
    手势(Gesture)的增加和识别
    [转]C#自定义开关按钮控件--附带第一个私活项目截图
    当年的试用期周工作心得
    FREESWITCH SEESION
    基于三星ARM9(S3C2410)的交通违章抓拍系统的开发
    Apache Kafka: Next Generation Distributed Messaging System---reference
    How and Why Unsafe is Used in Java---reference
    基于keepalived对redis做高可用配置---转载
    Java获取真实的IP地址--转载
  • 原文地址:https://www.cnblogs.com/haoworld/p/javawebservlet30zhong-zhu-jie-qu-dong-kai-fa.html
Copyright © 2020-2023  润新知