SpringBoot---web 应用开发-Servlets, Filters, listeners

绝地灬酷狼 2022-05-11 15:10 330阅读 0赞

一.Web 开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet、 Filter、Listener 等等。

二.在 spring boot 中的三种实现方式

  1. (1) 1.通过注册 ServletRegistrationBean FilterRegistrationBean ServletListenerRegistrationBean 获得控制,
  2. CustomServlet,java 如下:
  3. package com.nyist.demo.utils.servlet;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. public class CustomServlet extends HttpServlet {
  10. private static final long serialVersionUID = 1L;
  11. @Override
  12. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. System.out.println("servlet get method");
  15. doPost(request, response);
  16. }
  17. @Override
  18. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  19. throws ServletException, IOException {
  20. System.out.println("servlet post method");
  21. response.getWriter().write("hello world");
  22. }
  23. }
  24. 在启动类中注册ServletRegistrationBean 获得访问路径
  25. package com.nyist.demo;
  26. import com.nyist.demo.utils.filter.CustomFilter;
  27. import com.nyist.demo.utils.listener.CustomListener;
  28. import com.nyist.demo.utils.servlet.CustomServlet;
  29. import org.springframework.boot.SpringApplication;
  30. import org.springframework.boot.autoconfigure.SpringBootApplication;
  31. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  32. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  33. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  34. import org.springframework.context.annotation.Bean;
  35. import javax.swing.*;
  36. @SpringBootApplication
  37. public class DemoApplication {
  38. @Bean
  39. public ServletRegistrationBean servletRegistrationBean() {
  40. return new ServletRegistrationBean(new CustomServlet(), "/nyist");
  41. }
  42. }
  43. 2. 定义一个CustomFileterlei 实现Filter接口
  44. CustomFilter.java 如下:
  45. package com.nyist.demo.utils.filter; /**
  46. * 自定义 filter
  47. *
  48. * @author wujing
  49. */
  50. import javax.servlet.*;
  51. import java.io.IOException;
  52. public class CustomFilter implements Filter {
  53. @Override
  54. public void init(FilterConfig filterConfig) throws ServletException {
  55. System.out.println("init filter");
  56. }
  57. @Override
  58. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  59. throws IOException, ServletException {
  60. System.out.println("do filter");
  61. chain.doFilter(request, response);
  62. }
  63. @Override
  64. public void destroy() {
  65. System.out.println("destroy filter");
  66. }
  67. }
  68. 在启动类中注册,FilterRegistrationBean 来设置需要拦截的servlet
  69. package com.nyist.demo;
  70. import com.nyist.demo.utils.filter.CustomFilter;
  71. import com.nyist.demo.utils.listener.CustomListener;
  72. import com.nyist.demo.utils.servlet.CustomServlet;
  73. import org.springframework.boot.SpringApplication;
  74. import org.springframework.boot.autoconfigure.SpringBootApplication;
  75. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  76. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  77. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  78. import org.springframework.context.annotation.Bean;
  79. import javax.swing.*;
  80. @SpringBootApplication
  81. public class DemoApplication {
  82. @Bean
  83. public FilterRegistrationBean filterRegistrationBean() {
  84. return new FilterRegistrationBean(new CustomFilter());
  85. }
  86. }
  87. 3.CustomListener 实现 Listener 接口,用来监听servlet
  88. package com.nyist.demo.utils.listener;
  89. import javax.servlet.ServletContextEvent;
  90. import javax.servlet.ServletContextListener;
  91. /**
  92. * 自定义 listener
  93. *
  94. * @author wujing
  95. */
  96. public class CustomListener implements ServletContextListener {
  97. @Override
  98. public void contextInitialized(ServletContextEvent sce) {
  99. System.out.println("contextInitialized");
  100. }
  101. @Override
  102. public void contextDestroyed(ServletContextEvent sce) {
  103. System.out.println("contextDestroyed");
  104. }
  105. }
  106. 在启动类注册,ListenerRegistrationBean
  107. package com.nyist.demo;
  108. import com.nyist.demo.utils.filter.CustomFilter;
  109. import com.nyist.demo.utils.listener.CustomListener;
  110. import com.nyist.demo.utils.servlet.CustomServlet;
  111. import org.springframework.boot.SpringApplication;
  112. import org.springframework.boot.autoconfigure.SpringBootApplication;
  113. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  114. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  115. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  116. import org.springframework.context.annotation.Bean;
  117. import javax.swing.*;
  118. @SpringBootApplication
  119. public class DemoApplication {
  120. @Bean
  121. public ServletListenerRegistrationBean<CustomListener> servletListenerRegistrationBean() {
  122. return new ServletListenerRegistrationBean<CustomListener>(new CustomListener());
  123. }
  124. public static void main(String[] args) {
  125. SpringApplication.run(DemoApplication.class, args);
  126. }
  127. }

访问结果:do filter
servlet get method
servlet post method

(2)第二种方法: ServletContextInitializer 接口直接注册 需要的Servlet和Fileter和Listener

  1. package com.nyist.demo;
  2. import com.nyist.demo.utils.filter.CustomFilter;
  3. import com.nyist.demo.utils.listener.CustomListener;
  4. import com.nyist.demo.utils.servlet.CustomServlet;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.boot.web.servlet.ServletContextInitializer;
  8. import javax.servlet.DispatcherType;
  9. import javax.servlet.ServletContext;
  10. import javax.servlet.ServletException;
  11. import java.util.EnumSet;
  12. @SpringBootApplication
  13. public class DemoApplication implements ServletContextInitializer {
  14. @Override public void onStartup(ServletContext servletContext) throws ServletException {
  15. servletContext.addServlet("customServlet", new CustomServlet()).addMapping("/nyist");
  16. servletContext.addFilter("customFilter", new CustomFilter()).addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true,"customServlet");
  17. servletContext.addListener(new CustomListener());
  18. }
  19. public static void main(String[] args) {
  20. SpringApplication.run(DemoApplication.class, args);
  21. }
  22. }
  23. (3)第三种方法:在 SpringBootApplication 上使用@ServletComponentScan 注解后,直接通过@WebServlet@WebFilter@WebListener 注解自动注册
  24. ![70][]
  25. ![70 1][]
  26. ![70 2][]
  27. ![70 3][]

运行结果:

contextInitialized
init filter

do filter
servlet get method
servlet post method

发表评论

表情:
评论列表 (有 0 条评论,330人围观)

还没有评论,来说两句吧...

相关阅读