1.使用@Bean方式注入
在启动类中加入如下代码。可分别使用自定义的Servlet、Filter、Listener,具体实现如下:
@Bean
public ServletRegistrationBean servletRegistrationBean() {
return new ServletRegistrationBean(new ServletDemo1(),"/servlet");
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
// return new FilterRegistrationBean(new FilterDemo1(),servletRegistrationBean()) ;
return new FilterRegistrationBean(new FilterDemo1()); //拦截全部
}
@Bean
public ServletListenerRegistrationBean servletListenerRegistrationBean() {
return new ServletListenerRegistrationBean(new ListenerDemo1());
}
2.继承ServletContextInitializer并重写onStartup方法
具体方法实现如下:
@Override
public void onStartup(ServletContext ctx) throws ServletException {
ctx.addServlet("servletDemo1", new ServletDemo1()).addMapping("/servlet");
ctx.addFilter("filterDemo1", new FilterDemo1()).addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
ctx.addListener(new ListenerDemo1());
}
3.使用注解的方法
使用注解之前,需要在启动类加上@ServletComponentScan注解,否则加入的注解将无法扫描到。
servlet注解使用如下:
WebServlet(urlPatterns="/servlet")
public class ServletDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
filter注解使用如下:
@WebFilter(urlPatterns="/*")
public class FilterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter is init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("bei lan jie le");
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("filter is destroy");
}
}
Listener注解使用如下:
@WebListener
public class ListenerDemo1 implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("init");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("destory");
}
}
启动类如下:
@SpringBootApplication
@ServletComponentScan
public class Application //implements ServletContextInitializer
{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
经测试:三种方式的实现效果一致。