在Spring Boot中,当需要以注解的方式添加session监听器、过滤器时,为了让其生效,还需要在配置类上添加
@ServletComponentScan
注解,该注解的作用是告诉spring boot,让其自动管理servlet,否则注解方式注册的servlet不起作用
/**
* 注册Servlet. 不需要添加注解:@ServletComponentScan
* @return
*/
@Bean
public ServletRegistrationBean demoServlet(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean();
registrationBean.setServlet(new DemoServlet());
registrationBean.addUrlMappings("/demoServlet");
return registrationBean;
}
package cn.wuweixiang.springbootdemo.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* DemoServlet
*
* @author weixiang.wu
* @date 2018-08-22 20:34
**/
public class DemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello World</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>这是:DemoServlet</h1>");
out.println("</body>");
out.println("</html>");
}
}
/**
* 1.使用ServletListenerRegistrationBean注册Listener,只需要在@Configuration类中加入即可
* 2.直接使用@WebFilter
* @return
*/
// @Bean
// public ServletListenerRegistrationBean<DemoListener> myServletListener() {
// ServletListenerRegistrationBean<DemoListener> demoListener = new ServletListenerRegistrationBean<DemoListener>();
// demoListener.setListener(new DemoListener());
// return demoListener;
// }
package cn.wuweixiang.springbootdemo.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* DemoListener
*
* @author weixiang.wu
* @date 2018-08-22 20:49
**/
@WebListener
public class DemoListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.err.println("DemoListener.contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.err.println("DemoListener.contextDestroyed");
}
}
/**
* 1.使用FilterRegistrationBean注册Filter,只需要在@Configuration类中加入即可
* 2.直接使用@WebFilter
* @see DemoFilter
* @return
*/
// @Bean
// public FilterRegistrationBean demoFilter() {
// FilterRegistrationBean demoFilter = new FilterRegistrationBean();
// demoFilter.addUrlPatterns("/*");
// demoFilter.setFilter(new DemoFilter());
// return demoFilter;
// }
package cn.wuweixiang.springbootdemo.filter;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* DemoFilter
*
* @author weixiang.wu
* @date 2018-08-22 20:43
**/
@WebFilter(urlPatterns = "/*")
/** Lower values have higher priority.*/
@Order(value = 1)
public class DemoFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.err.println("DemoFilter.init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.err.println("DemoFilter.doFilter");
}
@Override
public void destroy() {
System.err.println("DemoFilter.destroy");
}
}