今日学到springboot如何注册三大组件,记录下来:
由于springboot默认是以jar包的方式启动嵌入式的servlet容器来启动springboot的web应用,没有web.xml文件。注册三大组件用以下方式:
1. servletRegisstrationBean
自定义一个MyServlet :
public class MyServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);//这里只调用了一下doGet方法,可以写自己的逻辑。
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello world");//像浏览器输出字符串
}
}
2.FilterRegistrationBean:
自定义一个过滤器:
//要想成为filter就必须实现接口里面的方法
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("过滤器执行doFilter");
//输出之后要放行出去
chain.doFilter(request,response);
}
@Override
public void destroy() {
System.out.println("过滤器destroy");
}
}
3.ServletListenerRegistrationBean
自定义一个监听器:
//监听器有很多,可以写自己的,实现不同接口的方法
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("web应用启动");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("web应用销毁");
}
}
自定义之后,讲他们注册到配置类中:
@Configuration//说明这是一个配置类
public class MyServerConfig {
//注册三大组件
@Bean//加到容器中
public ServletRegistrationBean myServlet(){
ServletRegistrationBean registrationBean =new ServletRegistrationBean(new MyServlet(),"myServlet");
//......自己设置要修改的属性
return registrationBean;
}
@Bean//加在容器中
public FilterRegistrationBean myFilter(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new MyFilter());
//设置拦截hello和myFilter两个请求
filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello","/myFilter"));
return filterRegistrationBean;
}
@Bean //加到容器中
public ServletListenerRegistrationBean myListener(){
ServletListenerRegistrationBean<MyListener> registrationBean =new ServletListenerRegistrationBean<>();
//......设置一些属性啥的
return registrationBean;
}
}