Servlet3.0

≯℡__Kan透↙ 提交于 2020-07-28 04:28:52

Shared Libraries(共享库) / runtime pluggability(运行时插件能力)

  1. Servlet容器启动会扫描,当前jar包里每一个实现了ServletContainerInitializer的实现
  2. 提供ServletContainerInitializer的实现类,必须绑定在META-INF/services/javax.servlet.ServletContainerInitializer

总结

  1. 容器在启动应用时,会扫描当前应用每一个jar包里面META-INF/services/javax.servlet.ServletContainerInitializer 指定的实现类启动并运行这个实现类,并且可以传入指定的类型

MyServletContainerInitializer.class


/**
 * 容器启动时会将@HandlesTypes指定的这个类型下面的子类(实现类、子接口)传递过来
 */
@HandlesTypes(value = {HelloService.class})
public class MyServletContainerInitializer implements ServletContainerInitializer {

    /**
     * @param set @HandlesTypes传入的指定的类型的子类型
     * @param servletContext 代表当前web应用的servletContext,一个web应用一个servletContext
     *
     * 1. 使用servletContext注册Servlet,Filter,Listener
     * 2. 使用编码的方式,在项目启动时给ServletContext里增加组件,必须在项目启动时添加
     * 1. ServletContainerInitializer得到的servletContext
     * 2. ServletContextListener得到的servletContext
     */
    public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
        for (Class clazz : set) {
            System.out.println(clazz);
        }

        //注册组件ServletRegistration
        ServletRegistration.Dynamic userServlet = servletContext.addServlet("userServlet", new UserServlet());
        userServlet.addMapping("/user");

        //注册监听
        servletContext.addListener(UserListener.class);

        //注册FilterRegistration组件
        FilterRegistration.Dynamic userFilter = servletContext.addFilter("userFilter", UserFilter.class);
        userFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/user");

    }
}

UserFilter.class



public class UserFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        filterChain.doFilter(servletRequest, servletResponse);

    }

    public void destroy() {

    }
}

UserListener.class


/**
 * 监听项目的启动和停止
 */
public class UserListener implements ServletContextListener {

    /**
     * 监听servletContextEvent的初始化
     */
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("UserListener.......contextInitialized.......");
    }

    /**
     * 监听servletContextEvent的销毁
     */
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("UserListener.......contextDestroyed.......");
    }
}

UserServlet.class

public class UserServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!