您的位置:首页 > 编程语言 > Java开发

Spring Boot - Web 应用开发 - Servlet, Filter, Listener

2018-03-17 00:07 916 查看
Web 开发使用 Controller 基本上可以完成大部分需求,但是我们还可能会用到 Servlet, Filter, Listener 等

1. 在 Spring Boot 中的三种实现方式

(1) 方法一:通过注册
ServletRegistrationBean
FilterRegistrationBean
ServletListenerRegistrationBean
获得控制

public class CustomerServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet get method");
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Servlet post method");
resp.getWriter().write("hello world");
}
}


public class CustomFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init filter");
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("do filter");
chain.doFilter(request, response);
}

@Override
public void destroy() {
System.out.println("destroy filter");
}

}


public class CustomListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}

}


注册 Bean

@Bean
public ServletRegistrationBean servletRegistrationBean() {
return new ServletRegistrationBean(new CustomerServlet(), "/oktfolio");
}

@Bean
public FilterRegistrationBean filterRegistrationBean() {
return new FilterRegistrationBean(new CustomFilter()/*, servletRegistrationBean()*/);
}

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


(2) 方法二:通过实现
ServletContextInitializer
接口直接注册

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addServlet("customServlet", new CustomerServlet()).addMapping("/oktfolio");
servletContext.addFilter("customFilter", new CustomFilter()).addMappingForServletNames(EnumSet.of
(DispatcherType.REQUEST), true, "customServlet");
servletContext.addListener(new CustomListener());
}


(3) 方法三:在
SpringBootApplication
上使用
@ServletComponentScan
注解后,直接通过
WebServlet``@WebFilter``@WebListener
注解自动注册

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: