SpringBoot中注册Servlet、Filter、Listener的方式
以Servlet为例(Filter、Listener类似,可以参考demo代码):
一、方式一 @ServletComponentScan
1. 使用@WebServlet注解
该注解是Servlet3.0新增的,用于注册Servlet;Servlet还是平常的Servlet
import javax.servlet.annotation.WebServlet;
@WebServlet(name = "MoMoServlet", urlPatterns = "/momo/*")
public class MoMoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("MoMoServlet...");
PrintWriter writer = response.getWriter();
writer.append("MoMoServlet Response...");
writer.flush();
writer.close();
}
}
2. 使用@ServletComponentScan注解
为了使Servlet正确注册,在Application配置类上添加@ServletComponentScan(basePackages = "xxx"),扫描Servlet类所在包
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan(basePackages = "xxx.servlet")
public class SpringbootServletApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootServletApplication.class, args);
}
}
启动项目测试
二、方式二 ServletRegistrationBean
SpringBoot提供的注册方式:
- ServletRegistrationBean:注册Servlet
- FilterRegistrationBean:注册过滤器
- ServletListenerRegistrationBean:注册Servlet监听器
示例:
1. 正常定义一个Servlet,不需要添加@WebServlet注解
public class LuLuServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("LuLuServlet...");
PrintWriter writer = response.getWriter();
writer.append("LuLuServlet Response...");
writer.flush();
writer.close();
}
}
2. 定义配置类
定义ServletRegistrationBean,同时实例化LuLuServlet,添加映射规则,最后注册为Bean。这是SpringBoot提供一个快捷方式。
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean luLuServletBean() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
servletRegistrationBean.setServlet(new LuLuServlet());
servletRegistrationBean.setUrlMappings(Arrays.asList("/lulu/*"));
return servletRegistrationBean;
}
}
启动测试