SpringBoot中注入web组件
1.官方文档:
当容器中只有一个Servlet时映射的请求地址为/
,当有多个srevlet时映射的地址会使用servlet名称作为前缀并+/,而对于过滤器,映射地址是/*
因为容器中默认会存在一个DispatcherServlet,并且已经配置了/
,所以自己定义了一个servlet时输入/
是不起作用的,写名称加/
也不起作用,定义的servlet必须要两个及以上
2.注入方法
2.1开发一个组件,标记@Component
注解
@Component("demo3")
public class Demo3Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Demo3Servlet");
}
}
2.2 在Application类中定义Bean
@Bean
ServletRegistrationBean registrationBean(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new Demo3Servlet(),"/demo3");
return registrationBean;
}
三大web组件对应需要定义的Bean类型分别是:
ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean
2.3 也支持@webxxx扫描配置
3.对于Filter的优先级
标注@Order注解指定优先级,默认2147483647
@Bean
@Order()
FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
return filterRegistrationBean;
}
或者实现Ordered接口
@Component
public class DemoFilter implements Filter,Ordered {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
//定义优先级
@Override
public int getOrder() {
return 0;
}
}