web原生组件注入:Servlet、Filter、Listener
方法一:使用Servlet API
在servlet包下新建MyServlet继承HttpServlet,用到的注释
//指定原生servlet组件都放在了哪里
@ServletComponentScan(basePackages = "com.gis507.admin")
//直接响应,未经过spring的拦截器
@WebServlet(urlPatterns = "/my")
//servlet的拦截规则,servlet是/* ,srping是/**
@WebFilter(urlPatterns = {"/css/*","/images/*"})
//监听器
@WebListener
MyServlet要继承HttpServlet,可以重写doGet方法,同时在主程序类中添加包扫描
@WebServlet(urlPatterns = "/my")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("66666");
}
}
MyFilter实现Filter接口,添加注释可以设置过滤规则
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("MyFilter初始化完成");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
log.info("MyFilter工作");
}
@Override
public void destroy() {
log.info("MyFilter销毁");
}
}
ContextListener实现ServletContextListener,可以重写contextInitialized和contextDestory方法
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
log.info("MyServletContextListener开始工作");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
log.info("MyServletContextListener销毁");
}
}
方式二:使用RegistrationBean
MyFilter、MyServlet、MyServletContextListener三个类正常些,只是使用spring中的RegistrationBean方法,在MyRegistConfig类中编写
主要是三个方法:
public ServletRegistrationBean myservlet(){}
public FilterRegistrationBean myFilter(){}
public ServletListenerRegistrationBean myListener(){}
//(proxyBeanMethods = true):保证我们以来的组件始终是单实例的
@Configuration
public class MyRegistConfig {
@Bean
public ServletRegistrationBean myservlet(){
MyServlet myServlet = new MyServlet();
return new ServletRegistrationBean(myServlet,"/my","/my02");
}
@Bean
public FilterRegistrationBean myFilter(){
MyFilter myFilter = new MyFilter();
// return new FilterRegistrationBean(myFilter,myservlet());//拦截myServlt()规定的路径,就是/my,/my02
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);
filterRegistrationBean.setUrlPatterns(Arrays.asList("/my","/css/*"));
return filterRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean myListener(){
MyServletContextListener myServletContextListener = new MyServletContextListener();
return new ServletListenerRegistrationBean(myServletContextListener);
}
}
在编写三个方法的时候主要是设计三个类的方法的使用。