SpringBoot(6)—— 配置嵌入式Servlet容器

配置嵌入式Servlet容器


一、定制和修改Servlet容器的相关配置

1. 修改和server相关的配置:直接在主配置文件中设置

server.xxx:通用的Servlet容器设置
server.tomcat.xxx:Tomcat的设置

2. 定制嵌入式Servlet容器,来修改Servlet配置:编写一个嵌入式的Servlet容器WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>,并且要加入到容器中@Bean

具体代码:
config/MyServerConfig

@Configuration
public class MyServerConfig {

    /*
     * TODO 编写一个嵌入式的Servlet容器,来修改相关配置
     *  WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
     *  并且要加入到容器中
     */
    @Bean
    public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> webServerFactoryCustomizer(){
        return new WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>() {

            // 定制嵌入式Servlet的相关配置
            @Override
            public void customize(ConfigurableServletWebServerFactory factory) {
                factory.setPort(8083);
            }
        };
    }
}

二、注册Servlet三大组件(Servlet,Filter,Listener)

先定制自己的组件类,然后使用下面三个方式在MyServerConfig中注册自己的组件类(需要加入到容器中@Bean

1. Servlet

(1)MyServlet extends HttpServlet
(2)ServletRegistrationBean<Servlet>

具体代码:
servlet/MyServlet

public class MyServlet extends HttpServlet {

    // 处理GET请求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    // 处理POST请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("Hello MyServlet");
    }
}

config/MyServerConfig

	// (1)Servlet:ServletRegistrationBean<Servlet>
    @Bean
    public ServletRegistrationBean<Servlet> myServlet(){
        ServletRegistrationBean<Servlet> registrationBean = new ServletRegistrationBean<>(new MyServlet(), "/myServlet");

        return registrationBean;
    }

效果:输入 http://localhost:8083/myServlet ,页面显示:Hello MyServlet


2. Filter:

(1)MyFilter implements Filter
(2)FilterRegistrationBean<Filter>

具体代码:
filter/MyFilter

public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("MyFilter process...");
        // 放行
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {

    }

}

config/MyServerConfig

	// (2)Filter:FilterRegistrationBean<Filter>
    @Bean
    public FilterRegistrationBean<Filter> myFilter(){
        FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new MyFilter());
        // 拦截请求
        registrationBean.setUrlPatterns(Arrays.asList("/hello", "/myServlet"));

        return registrationBean;
    }

效果:输入 http://localhost:8083/myServlet 或者 http://localhost:8083/hello,后台显示:MyFilter process...


3. Listener:

(1)MyListener implements ServletContextListener
(2)ServletListenerRegistrationBean<EventListener>

具体代码:
listener/MyListener

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项目销毁");
    }
}

config/MyServerConfig

	// (3)Listener:ServletListenerRegistrationBean<EventListener>
    @Bean
    public ServletListenerRegistrationBean<EventListener> myListener(){
        ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());

        return registrationBean;
    }

效果:
(1)项目启动,控制台显示:contextInitialized。。。web应用启动
(2)项目销毁(要点左下角的Exit,而不是Stop),控制台显示:contextDestroyed。。。web项目销毁


三、切换为其他嵌入式Servlet容器(Tomcat默认,Jetty,Undertow)

1. 在pom.xml中先排除Tomcat
<exclusions>
    <exclusion>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <groupId>org.springframework.boot</groupId>
    </exclusion>
</exclusions>
2. 引入其他的Servlet容器
<dependency>
    <artifactId>spring-boot-starter-jetty</artifactId>
    <groupId>org.springframework.boot</groupId>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值