SpringBoot配置嵌入式容器及三大组件

  • 首先明白的一点的是:SpringBoot是默认采用ssm架构,里面的日志采用的是logback ,嵌入式的tomcat容器。

  • 配置端口号,项目名等我们除了可以通过application.properties配置文件配置外,我们可以用代码自定义配置tomcat的相关设置。

server的基本配置

  1. 通过配置文件配置端口号
server.port= 9999
spring.thymeleaf.cache= false //解除thymeleaf的缓存,此处没有用到
这个是时候启动项目,端口号是9999
  1. 通过Java代码实现配置。—–EmbeddedServletContainerCustomizer

在项目路径下,新建configure包,里面新建MyConfigure类,用于项目的配置

@Configuration
public class MyConfigure {

    /**
     * 配置嵌入式容器的一些基本配置
     * @return
     */
    @Bean
   public EmbeddedServletContainerCustomizer  embeddedServletContainerCustomizer(){
       return new EmbeddedServletContainerCustomizer() {
           @Override
           public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
               configurableEmbeddedServletContainer.setPort(8088);
               //configurableEmbeddedServletContainer.setContextPath("/test");
           }
       };
   }

configurableEmbeddedServletContainer.setPort(8088); 设置端口号为8088了

这个时候启动容器,端口号是8088

三大组件的编写和配置

​ 在之前的ssm,ssh中,我们配置Servlet、Filter、Listener都是在web.xml里面配置的。但是我们使用SpringBoot来开发项目之后,在项目中已经没有web.xml配置文件了,那么我们该如何编写和配置这三大组件呢。

  1. ServletRegistrationBean 用于配置Servlet

  2. FilterRegistrationBean 用户配置Filter

    1. ServletListenerRegistrationBean 用户配置Listener

开发Servlet—ServletRegistrationBean

  1. 在项目路径下,新建servlet包,里面新建MyServlet类,用于项目的servlet类
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        System.out.print("访问了MyServlet的get方法");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
        System.out.print("访问了MyServlet的get方法");
    }

}
  1. 在之前的MyConfigure类中添加以下代码
/**
     * 注册自己编写的Servlet
     * @return
     */
   @Bean
   public ServletRegistrationBean myServlet(){
       ServletRegistrationBean  servletRegistrationBean=new ServletRegistrationBean(new MyServlet(),"/myServlet");
       return  servletRegistrationBean;
   }
  1. 当访问/myServlet的时候,会打印 System.out.print(“访问了MyServlet的get方法”);

开发Filter—FilterRegistrationBean

  1. 在项目路径下,新建filter包,里面新建MyFilter类,用于项目的filter类
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.print("访问了MyFilter的init方法");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.print("访问了MyFilter的doFilter方法");
        filterChain.doFilter(servletRequest,servletResponse);

    }

    @Override
    public void destroy() {
        System.out.print("访问了MyFilter的destroy方法");
    }
}
  1. 在之前的MyConfigure类中添加以下代码
/**
     * 注册自己编写的Filter拦截器
     * @return
     */
   @Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/say1"));
        return filterRegistrationBean;

    }
  1. 当访问/say1的时候,会打印 System.out.print(“访问了MyFilter的doFilter方法”);

开发Listener—ServletListenerRegistrationBean

  1. 在项目路径下,新建listener包,里面新建MyListener类,用于项目的Listener类
public class MyListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("访问了MyListener的contextInitialized方法,启动了监听");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("访问了MyListener的contextDestroyed方法,销毁了监听");
    }

}

  1. 在之前的MyConfigure类中添加以下代码
 /**
     * 注册自己编写的Listener监听器
     * @return
     */
   @Bean
    public ServletListenerRegistrationBean myListener(){
        ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean=new ServletListenerRegistrationBean<MyListener>(new MyListener());
        return servletListenerRegistrationBean;
    }
  1. 当启动项目的时候,会打印 System.out.println(“访问了MyListener的contextInitialized方法,启动了监听”);

注意SpringBoot配置SpringMCV的dispatchServlet是在DispatcherServletAutoConfiguration.class中

@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());
            registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
            registration.setLoadOnStartup(
                    this.webMvcProperties.getServlet().getLoadOnStartup());
            if (this.multipartConfig != null) {
                registration.setMultipartConfig(this.multipartConfig);
            }
            return registration;
        }

猜你喜欢

转载自blog.csdn.net/wf_feng/article/details/82626096