版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42969074/article/details/85215055
SpringBoot中没有了web.xml文件,但是有时候需要使用Servlet,Listener,Filter,则SpringBoot中有2种方式:
1、Servlet3中的注解@WebServlet 、@WebListener、@WebFilter来配置
2、SpringBoot配置bean的方式进行配置
第一种方式:
使用Servlet3中的注解@WebServlet 、@WebListener、@WebFilter来配置,下面进行配置:
TestServlet
/**
* @author Tang Haorong
* @create 2018-12-22 21:36
* @name
*/
@WebServlet(name = "TestServlet",urlPatterns = "/hello")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("hello word");
resp.getWriter().flush();
resp.getWriter().close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
TestListener
/**
* @author Tang Haorong
* @create 2018-12-22 21:41
* @name
*/
@WebListener
public class TestListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("TestListener contextInitialized");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
TestFilter
/**
* @author Tang Haorong
* @create 2018-12-22 21:41
* @name
*/
@WebFilter(urlPatterns = "/*",filterName = "TestFilter")
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init TestFilter");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter TestFilter");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
然后还要在SpringBoot的启动类上面添加一个重要的注解@ServletComponentScan,这样才能扫描到对应的servlet。
@SpringBootApplication
@ServletComponentScan
public class SpringBootServletApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootServletApplication.class, args);
}
}
第二种方式:
SpringBoot配置bean的方式进行配置,SpringBoot提供了三种ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean,分别对应配置原生的Filter、Servlet、Listener,下面配置和能够达到一样的效果。
/**
* @author Tang Haorong
* @create 2018-12-22 21:57
* @name
*/
/**
* @configuration:指明当前类是一个配置类,可以表示为一个spring的xml配置文件
*/
@Configuration
public class ServletConfig {
/**
* @Bena可以表示如下
* 将发放的返回值添加到容器中;容器中的这个组件默认id就是方法名
* <bean id="testServletRegistration" class="org.springframework.boot.web.servlet.testServletRegistration">
* </bean>
* @return
*/
@Bean
public ServletRegistrationBean testServletRegistration() {
ServletRegistrationBean registration = new ServletRegistrationBean(new TestServlet());
registration.addUrlMappings("/hello");
return registration;
}
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean(new TestFilter());
registration.addUrlPatterns("/*");
return registration;
}
@Bean
public ServletListenerRegistrationBean testServletListenerRegistrationBean(){
ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean();
servletListenerRegistrationBean.setListener(new TestListener());
return servletListenerRegistrationBean;
}
}