SpringBoot与web开发(六)----SpringBoot容器

SpringBoot容器

Page content

SpringBoot 容器

SpringBoot的容器默认使用的Tomcat,

1.如何修改Servlet容器的相关配置?

  • 修改Servlet的配置 (org.springframework.boot.autoconfigure.web.ServerProperties)

    server.servlet.context-path=/crud
    server.port=8081
    

2.如何注册自己的Servlet,Filter,Listener

SpringBoot默认的是以jar包的方式启动嵌入Serlvet容器,没有Web.xml。

  • 注册三大组件的方式

    • ServletRegistrationBean

    • FilterRegistrationBean

    • ServletListenerRegistrationBean

      /**
      * @program: spring-boot-restful-crud
      * @description: servlet配置类
      * @author: YuanChangYue
      * @create: 2019-08-19 19:20
      */
      @Configuration
      public class MyServletConfig {
      
      @Bean
      public ServletRegistrationBean myServlet() {
      return new ServletRegistrationBean<>(new MyServlet(), "/myServlet");
      }
      
      @Bean
      public FilterRegistrationBean myFilter() {
      FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
      registrationBean.setFilter(new MyFilter());
      registrationBean.setUrlPatterns(Arrays.asList("/hello", "/myServlet"));
      return registrationBean;
      }
      
      @Bean
      public ServletListenerRegistrationBean myListen() {
      return new ServletListenerRegistrationBean(new MyListen());
      }
      
      }
      
      
      /**
      * @program: spring-boot-restful-crud
      * @description: 自定义Listen
      * @author: YuanChangYue
      * @create: 2019-08-19 19:42
      */
      public class MyListen implements ServletContextListener {
      @Override
      public void contextInitialized(ServletContextEvent sce) {
      System.out.println("contextInitialized ing....");
      }
      
      @Override
      public void contextDestroyed(ServletContextEvent sce) {
      System.out.println("contextDestroyed....");
      }
      }
      
      
      /**
      * @program: spring-boot-restful-crud
      * @description: 自定义Filter
      * @author: YuanChangYue
      * @create: 2019-08-19 19:33
      */
      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("servletRequest ing..... ");
      filterChain.doFilter(servletRequest, servletResponse);
      }
      
      @Override
      public void destroy() {
      System.out.println("destroy ");
      }
      }
      
      
      /**
      * @program: spring-boot-restful-crud
      * @description: 自定义Servlet
      * @author: YuanChangYue
      * @create: 2019-08-19 19:17
      */
      public class MyServlet extends HttpServlet {
      @Override
      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      resp.getWriter().write("myServlet--doPost");
      }
      
      @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doPost(req, resp);
      }
      }
      
      
  • SpringBoot 在自动配置SpringMvc,就将DispatcherServlet配置好了

3. 切换Servlet容器

  • 切换到 Jetty

    		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    
        <dependency>
            <artifactId>spring-boot-starter-jetty</artifactId>
            <groupId>org.springframework.boot</groupId>
        </dependency>
    

Jetty

4.使用外置Servlet容器

**优点: **简单 ,便携.

缺点:默认不支持JSP,优化定制复杂.