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

使用注册的方法开发servlet,filter,listener

MyServlet.java

package com.dennis.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet{

      /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
          doPost(request, response);
      }

          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
              response.getWriter().write("hello MyServlet");
          }
}

MyFilter.java

package com.dennis.web;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("hello,MyFilter");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

MyListener.java

package com.dennis.web;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
         System.out.println("MyListener.contextDestroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
         System.out.println("MyListener.contextInitialized");
    }

}

SpringBootMybatisApplication.java

package com.dennis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.FilterRegistrationBean;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;

import com.dennis.web.MyFilter;
import com.dennis.web.MyListener;
import com.dennis.web.MyServlet;
@SpringBootApplication
public class SpringBootMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisApplication.class, args);
    }

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
      return new ServletRegistrationBean(new MyServlet(), "/my_servlet");
    }
    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter(), servletRegistrationBean());
        filterRegistrationBean.addUrlPatterns("/my_servlet","/auth_uri/list");
      return filterRegistrationBean;
    }

    @Bean
    public ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean() {
      return new ServletListenerRegistrationBean<MyListener>(new MyListener());
    }
}

验证

启动spring-boot项目的时候,控制台打印下面的日志

MyListener.contextInitialized

浏览器打开http://localhost:8080/my_servlet和http://localhost:8080/auth_uri/list显示

hello MyServlet

并且控制台上打印

hello,MyFilter

浏览器访问http://localhost:8080/auth_uri/envname,控制台没有打印任何hello,MyFilter的日志

使用servlet容器初始化器来添加servlet,filter,listener

MyServlet2.java

package com.dennis.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet2 extends HttpServlet{

      /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
          doPost(request, response);
      }

          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
              response.getWriter().write("hello MyServlet2");
          }
}

MyFilter2.java

package com.dennis.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter2 implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("hello,MyFilter2");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

MyListener2.java

package com.dennis.web;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener2 implements ServletContextListener{

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
         System.out.println("MyListener.contextDestroyed2");
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
         System.out.println("MyListener.contextInitialized2");
    }

}

MyServletContextInitializer.java

package com.dennis.web;
import java.util.EnumSet;
import javax.servlet.DispatcherType;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import org.springframework.boot.web.servlet.ServletContextInitializer;
public class MyServletContextInitializer implements ServletContextInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        // TODO Auto-generated method stub
         servletContext.addServlet("myServlet2", new MyServlet2()).addMapping("/my_servlet2");
          servletContext.addFilter("myFilter2", new MyFilter2())
          //添加过滤页面
                .addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "myServlet2");
          servletContext.addListener(new MyListener2());
    }

}

在SpringBootMybatisApplication.java中添加下面的代码,把MyServletContextInitializer添加到spring容器的管理范围

@Bean
public ServletContextInitializer servletContextInitializer(){
    return new MyServletContextInitializer();
}

使用注解的方式实现servlet,filter,listener

MyServletContextInitializer.java

添加@ServletComponentScan注解

package com.dennis;
@SpringBootApplication
@ServletComponentScan
public class SpringBootMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatisApplication.class, args);
    }
}

MyFilter3.java

添加@WebFilter(urlPatterns={})注解

package com.dennis.web;

@WebFilter(urlPatterns={})//添加需要拦截的url模式匹配
public class MyFilter3 implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("hello,MyFilter3");
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }

}

MyListener3.java

在该类中添加@WebListener注解

MyServlet3.java

在该类中添加@WebServlet注解