SpringBoot中使用Servlet与更改DispatcherServlet默认Url
周sir |
2017年6月17日 |
springboot |
0 条评论 | 7111
Spring Boot 做 Web 时,主 Servlet 是 DispatcherServlet,默认 url-pattern 为 /。项目里还经常要自己的 Filter、Listener,以及额外的 Servlet。注册方式只有两条:代码注册 和 注解自动注册。
代码侧用 ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean;也可以实现 ServletContextInitializer 直接注册。注解侧则是 @ServletComponentScan 配 @WebServlet / @WebFilter / @WebListener。
一、代码注册 Servlet,并改 DispatcherServlet 的 URL
1. MyServlet.java
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");
}
}
2. 启动类里注入两个 RegistrationBean
第一个 Bean 清空 DispatcherServlet 默认映射,改成只吃 *.do 和 *.json;第二个把 MyServlet 挂到 /xs/*。ServletName 默认是类名首字母小写,即 myServlet。这种方式不需要 @ServletComponentScan。
@SpringBootApplication
public class SpringBootSampleApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootSampleApplication.class, args);
}
/**
* 修改 DispatcherServlet 默认配置
*/
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(dispatcherServlet);
registration.getUrlMappings().clear();
registration.addUrlMappings("*.do");
registration.addUrlMappings("*.json");
return registration;
}
/**
* 使用代码注册 Servlet(不需要 @ServletComponentScan 注解)
*/
@Bean
public ServletRegistrationBean servletRegistrationBean() {
return new ServletRegistrationBean(new MyServlet(), "/xs/*");
}
}
| 注册方式 |
典型 API |
要不要 @ServletComponentScan |
| 代码注册 |
ServletRegistrationBean 等 |
不要 |
| 注解注册 |
@WebServlet / @WebFilter |
要,打在启动类上 |
二、@ServletComponentScan + @WebFilter
在 @SpringBootApplication 上加 @ServletComponentScan 后,Servlet、Filter、Listener 可以直接用 @WebServlet、@WebFilter、@WebListener 自动注册,不必再写 RegistrationBean。
1. LoginFilter.java
@WebFilter(value = "/*")
public class LoginFilter implements Filter {
public LoginFilter() {
System.out.println("过滤器初始化");
}
public void destroy() {
System.out.println("过滤器销毁");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("执行过滤操作>>>>>");
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
2. 启动类打开组件扫描
@SpringBootApplication
@ServletComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
一句话总结:额外 Servlet / Filter 要么 RegistrationBean 代码挂载,要么 @ServletComponentScan 配 @WebXxx;要改 SpringMVC 入口路径,对 DispatcherServlet 清掉默认 / 再 addUrlMappings。
转载请注明来源:SpringBoot中使用Servlet与更改DispatcherServlet默认Url
我是周sir,这是我的博客。致力于分享我学会的技术和优秀的文章。微信公众号 “周sir专栏” 欢迎大家关注。