ServletContext 注册web应用的三大组件 servlet、filter、listener
1、ServletContext 注册三大组件的时间
必须是在项目启动的时候,项目运行起来后就不行了,出于安全的考虑
2、ServletContext注册三大组件的位置
2.1 实现了ServletContainerInitializer接口的onStartup方法里
public class MyServletInit implements ServletContainerInitializer { public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException { //注册servlet ServletRegistration.Dynamic servlet =servletContext.addServlet("userServlet",new UserServlet()); //配置servlet的映射信息 servlet.addMapping("/user"); //注册filter FilterRegistration.Dynamic filter = servletContext.addFilter("userFilter",UserFilter.class); //配置filter 的映射信息 filter.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST),true,"userServlet"); //注册listener servletContext.addListener(UserListener.class); } }
//自定义一个Servlet
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getParameter("method");
if(method.equals("add")){
req.getSession().setAttribute("msg","执行了add 方法");
}
if(method.equals("delete")){
req.getSession().setAttribute("msg","执行了delete方法");
}
//转发
req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);
//重定向
// resp.sendRedirect();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
/**
*
* 自定义一个监听器 监听项目的启动和停止的
*
*/
public class UserListener implements ServletContextListener {
/**
*servletContext 启动和初始化
* @param servletContextEvent
*/
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("UserListener。。。。 contextInitialized");
}
/**
*servletContext的销毁
*
* @param servletContextEvent
*/
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("UserListener。。。。contextDestroyed");
}
}
/**
*
* 自定义一个filter
*
*
*/
public class UserFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
*
* 过滤请求的
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行了 userfilter ....");
//对请求进行了放行
filterChain.doFilter(servletRequest,servletResponse);
}
public void destroy() {
}
}
3、测试结果