17.配置嵌入式的Servlet容器

springboot使用的是嵌入式的tomcat服务器
1.如何修改和定制servlet容器的相关配置

修改servlet有关的配置(ServerProperties)
例如在application.properties
    server.port=8081
    server.context-path=/crud
    server.tomcat.uri-encoding=utf-8

1.通用的servlet容器设置
    server.xxx
2.tomcat的设置
    server.tomcat.xxx
    
    
3.还可以通过嵌入式的servlet容器定制器(WebServerFactoryCustomizer),来修改容器的配置
    @Configuration
    public class MyServerConfig {
        @Bean
        public WebServerFactoryCustomizer WebServerFactoryCustomizer(){
            return new WebServerFactoryCustomizer() {
                @Override
                public void customize(WebServerFactory factory) {
                    ConfigurableWebServerFactory factory1= (ConfigurableWebServerFactory) factory;
                    factory1.setPort(8083);
                }
            };
        }
    }

--------------------------------------------------------------------------------
如何注册servlet的三大组件
由于springbootmore是以jar包的形式启动嵌入式的servlet容器来启动springboot的web应用,没有web.xml文件,注册三大组件(servlet,filter,listener)以以下的方式

1.注册servlet
    1.1 创建自己的servlet,处理doget/dopost请求
        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().println("hello myservlet");
            }
        }
    1.2.配置servlet并加载到容器中
        @Configuration
            public class MyServerConfig {
                //配置嵌入式的servlet:设置端口为8083
                @Bean
                public WebServerFactoryCustomizer webServerFactoryCustomizer(){
                    return new WebServerFactoryCustomizer() {
                        @Override
                        public void customize(WebServerFactory factory) {
                            ConfigurableWebServerFactory factory1= (ConfigurableWebServerFactory) factory;
                            factory1.setPort(8083);
                        }
                    };
                }
                //配置servlet的三大组件
                //1.注册servlet
                @Bean
                public ServletRegistrationBean myservlet(){
                    //使用ServletRegistrationBean:参数1(自己的servlet),参数2(自建的servlet处理的请求路径)
                    ServletRegistrationBean registrationBean = new ServletRegistrationBean(new Myservlet(), "/myservlet");
                    return registrationBean;
                }
            }
    1.3访问路径:http://localhost:8083/myservlet  页面出现:hello myservlet  说明自建的servlet起作用了,配置成功!
    
2.注册filter
    2.1创建自己的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("MyFilter process");
                filterChain.doFilter(servletRequest, servletResponse);
            }
            @Override
            public void destroy() {
        
            }
        }
    2.2将自己的filter注册到容器中
        //注册filter
        @Bean
        public FilterRegistrationBean myFilter(){
            FilterRegistrationBean registrationBean=new FilterRegistrationBean();
            registrationBean.setFilter(new Myfilter());
            registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
            return registrationBean;
        }
    2.3.当输入路径是:http://localhost:8083/myServlet  后台打印:MyFilter process
    
3.注册listener
    3.1自己创建的lister
        public class MyListener implements ServletContextListener {
            @Override
            public void contextInitialized(ServletContextEvent sce) {
                System.out.println("ServletContex对象初始化...web应用启动!");
            }
        
            @Override
            public void contextDestroyed(ServletContextEvent sce) {
                System.out.println("ServletContex销毁...服务器关闭!");
            }
        }
    3.2将自己创建的listener加载到容器中
        //注册listener
        @Bean
        public ServletListenerRegistrationBean myListener(){
            ServletListenerRegistrationBean listenerRegistrationBean=new ServletListenerRegistrationBean(new MyListener());
            return listenerRegistrationBean;
        }
    3.3
        当程序启动时:打印:ServletContex对象初始化...web应用启动!
        当程序正常停止时:打印:ServletContex销毁...服务器关闭!
springboot是否支持其他的servlet容器

1.tomcat(默认使用)
2.Jetty(长连接)
3.Undertow(不支持jsp)

 

posted @ 2022-05-10 22:12  努力的达子  阅读(36)  评论(0编辑  收藏  举报