三大组件包括 Servlet,Filter,Listener
由于 SpringBoot 默认是以 jar 包的方式启动嵌入式的 Servlet 容器来启动 SpringBoot 的 web 应用, 没有 Web.xml 文件.
三大组件的注册
这个注册都是在自定义的配置类里面注册 (即有 @Configraution 的类里)
ServletRegistrationBean
P.s. 这里自定义的 Servlet 继承 HttpServlet
- // 注册三大组件
- @Bean
- public ServletRegistrationBean myServlet(){
- ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
- return registrationBean;
- }
自定义 Servlet 代码
- public class MyServlet extends HttpServlet {
- // 处理 get 请求
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- doPost(req,resp);
- }
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- resp.getWriter().write("Hello MyServlet");
- }
- }
- FilterRegistrationBean
P.s. 自定义的过滤器实现 Filter
- @Bean
- public FilterRegistrationBean myFilter(){
- FilterRegistrationBean registrationBean = new FilterRegistrationBean();
- registrationBean.setFilter(new MyFilter());
- registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
- return registrationBean;
- }
自定义过滤器代码
- public class MyFilter implements Filter {
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
- System.out.println("MyFilter process...");
- chain.doFilter(request,response);
- }
- @Override
- public void destroy() {
- }
- }
- ServletListenerRegistrationBean
P.s. 自定义监听器 实现 ServletContextListener
- @Bean
- public ServletListenerRegistrationBean myListener(){
- ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
- return registrationBean;
- }
自定义监听器代码
- public class MyListener implements ServletContextListener {
- @Override
- public void contextInitialized(ServletContextEvent sce) {
- System.out.println("contextInitialized...web 应用启动");
- }
- @Override
- public void contextDestroyed(ServletContextEvent sce) {
- System.out.println("contextDestroyed... 当前 web 项目销毁");
- }
- }
来源: http://www.bubuko.com/infodetail-3489214.html