Web开发使用 Controller 基本上能够完成大部分需求,可是咱们还可能会用到Servlet、Filter、Listener、Interceptor 等等。html
当使用Spring-Boot时,嵌入式Servlet容器经过扫描注解的方式注册Servlet、Filter和Servlet规范的全部监听器(如HttpSessionListener监听器)。
Spring boot 的主 Servlet 为 DispatcherServlet,其默认的url-pattern为“/”。也许咱们在应用中还须要定义更多的Servlet。java
在spring boot中添加本身的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)。
1、代码注册经过ServletRegistrationBean、 FilterRegistrationBean 和 ServletListenerRegistrationBean 得到控制。
也能够经过实现 ServletContextInitializer 接口直接注册。spring
2、在 SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener 能够直接经过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其余代码。session
注解Servletide
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(urlPatterns="/myServlet2/*", description="Servlet的说明") public class MyServlet2 extends HttpServlet{ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<"); doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, 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>这是:myServlet2</h1>"); out.println("</body>"); out.println("</html>"); } }
注解式过滤器 url
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * * 使用注解标注过滤器 * @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器 * 属性filterName声明过滤器的名称,可选 * 属性urlPatterns指定要过滤的URL模式,也可以使用属性value来声明.(指定要过滤的URL模式是必选属性) */ @WebFilter(filterName="myFilter",urlPatterns="/*") publicclass MyFilter implements Filter{ @Override publicvoid init(FilterConfig config) throws ServletException { System.out.println("过滤器初始化"); } @Override publicvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("执行过滤操做"); chain.doFilter(request, response); } @Override publicvoid destroy() { System.out.println("过滤器销毁"); } }
注解式监听器spa
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; /** * 使用@WebListener注解,实现ServletContextListener接口 * * @author Angel(QQ:412887952) * @version v.0.1 */ @WebListener public class MyServletContextListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("ServletContex销毁"); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("ServletContex初始化"); } }
监听Session的建立与销毁code
import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * 监听Session的建立与销毁 * */ @WebListener public class MyHttpSessionListener implements HttpSessionListener { @Override publicvoid sessionCreated(HttpSessionEvent se) { System.out.println("Session 被建立"); } @Override publicvoid sessionDestroyed(HttpSessionEvent se) { System.out.println("ServletContex初始化"); } }
注意不要忘记在 SpringBootSampleApplication.java 上添加 @ServletComponentScan 注解。htm
启动的过程当中咱们会看到输出:接口
ServletContex初始化
过滤器初始化
服务启动后,随便访问一个页面,会看到输出:
执行过滤操做
Session 被建立