生产中我们有时候需要自定义servlet比如,对一些特定的资源路径进来的请求,做一些特殊处理,本文,介绍两种自定义的方法。
目录
@WebServlet 注解方式
注册ServletRegistrationBean
1.@WebServlet 注解方式
使用该方式注意一点,就是要与 @ServletComponentScan
配合使用
@WebServlet(urlPatterns = "/api", description = "api进来的通过该servlet")
public class ApiGateWayServlet extends HttpServlet {
private ApplicationContext applicationContext;
private ApiGateWayHandler apiGateWayHandler;
@Override
public void init() throws ServletException {
super.init();
applicationContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
apiGateWayHandler = applicationContext.getBean(ApiGateWayHandler.class);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
apiGateWayHandler.handle(req,resp);
}
}
在启动类,添加ServeltComponentScan
@ServletComponentScan
@SpringBootApplication
public class SpringBootSampleApplication {
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootSampleApplication.class, args);
SpringContextUtils.setApplicationContext(configurableApplicationContext);
}
}
2. 注册ServletRegistrationBean
@SpringBootApplication
public class SpringBootSampleApplication {
@Bean
public ServletRegistrationBean servletRegistrationBean() {
return new ServletRegistrationBean(new ApiGateWayServlet(), "/*");
}
public static void main(String[] args) {
ConfigurableApplicationContext configurableApplicationContext = SpringApplication.run(SpringBootSampleApplication.class, args);
SpringContextUtils.setApplicationContext(configurableApplicationContext);
}
}
3.check是否配置成功
2017-09-19 10:44:28.313 INFO 6761 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'apiGateWayServlet' to [/*]
2017-09-19 10:44:28.315 INFO 6761 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]