1、注册Servlet组件
1)创建自定义的Servlet类,并继承HttpServlet
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("myServlet被调用了。。。。");
}
}
2)创建一个配置类,在类上添加注解@Configuration
@Configuration
public class MyConfig {}
3)在此类中定义一个方法,返回ServletRegistrationBean 类
/**
* 注册自定义的Servlet,使用ServletRegistrationBean类,并将其注入到spring的核心容器中
* @return
*/
@Bean
public ServletRegistrationBean servletBean(){
// 创建ServletRegistrationBean的实例化对象,将自定义的MyServlet类植入,定义URL为/myServlet
ServletRegistrationBean servletRegistrationBean =
new ServletRegistrationBean(new MyServlet(),"/myServlet");
return servletRegistrationBean;
}
2、注册Filter组件
1)创建自定义的Filter类,并实现javax.servlet.Filter接口
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器启动了");
// 放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
2)在java配置类中,使用FilterRegistrationBean 类,定义一个方法
/**
* 注册自定义的Filter,使用FilterRegistrationBean,并将其注入到spring的核心容器中
* @return
*/
@Bean
public FilterRegistrationBean filterBean(){
List<String> stringList = new ArrayList<>();
stringList.add("/users/getAllUser");
stringList.add("/myServlet");
// 创建使用FilterRegistrationBean示例化对象
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new MyFilter());
// 设置需要过滤的url
registrationBean.setUrlPatterns(stringList);
return registrationBean;
}
3、注册Listener组件
1)自定义一个Listener类,实现javax.servlet.ServletContextListener;接口
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized...web应用启动了");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed...web应用销毁了");
}
}
2)在java配置类中,使用ServletListenerRegistrationBean 类,定义一个方法
/**
* 注册自定义的Listener,使用ServletListenerRegistrationBean,并将其注入到spring的核心容器中
* @return
*/
@Bean
public ServletListenerRegistrationBean listenerBean(){
ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(new MyListener());
return registrationBean;
}
4、SpringBoot自动注册SpringMVC的前端控制器
1) SpringBoot帮我们自动SpringMVC的时候,自动的注册SpringMVC的前端控制器;DIspatcherServlet。
DispatcherServletAutoConfiguration中:
@Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
@ConditionalOnBean(value = DispatcherServlet.class, name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
public ServletRegistrationBean dispatcherServletRegistration(
DispatcherServlet dispatcherServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(
dispatcherServlet, this.serverProperties.getServletMapping());
//默认拦截: / 所有请求;包静态资源,但是不拦截jsp请求; /*会拦截jsp
//可以通过server.servletPath来修改SpringMVC前端控制器默认拦截的请求路径
registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
registration.setLoadOnStartup(
this.webMvcProperties.getServlet().getLoadOnStartup());
if (this.multipartConfig != null) {
registration.setMultipartConfig(this.multipartConfig);
}
return registration;
}
2)SpringBoot能不能支持其他的Servlet容器;