SpringBoot-Servlet配置及容器切换

版权声明:来一来,看一看,有钱的捧个人场,没钱的你不得捧个人场 https://blog.csdn.net/wait_for_eva/article/details/82939712

容器配置

1. 配置文件

# 简单配置可以通过application.yml文件直接进行配置
server.port=8080

2. 代码配置

@Configuration
public class Config {
    @Bean
    WebServerFactoryCustomizer webServerFactoryCustomizer(){
        return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {
            @Override
            public void customize(ConfigurableWebServerFactory factory) {
                factory.setPort(8080);
            }
        };
    }
}

WebServerFactoryCustomizer:旧版本叫做EmbeddedServletContainerCustomizer

ConfigurableWebServerFactory:记得泛型声明,默认方法factory是空的

组件注册

1. servlet注册

  • 组件
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().write("response");
    }
}
  • 注册
@Configuration
public class Config {
    ServletRegistrationBean<MyServlet> servletServletRegistrationBean(){
        return new ServletRegistrationBean(new MyServlet(), "/myServlet");
    }
}

servletServletRegistrationBean:自动注册的包装Bean

new MyServlet():需要注册的Servlet实例对象

/myServlet:访问映射地址

@Configuration
public class Config {
    ServletRegistrationBean<MyServlet> servletServletRegistrationBean(){
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.setLoadOnStartup(0);
        bean.setServlet(new MyServlet());
        bean.setUrlMappings(Arrays.asList("/", "/myservlet"));
        return bean;
    }
}

也可以先生成对象,再进行设置。

PS:除去简单映射,例如LoadOnStartup等信息也可以进行配置

2. Filter注册

  • 组件
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("filter");
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() {
    }
}
  • 注册
@Configuration
public class Config {
    @Bean
    FilterRegistrationBean<MyFilter> filterFilterRegistrationBean(){
        FilterRegistrationBean<MyFilter> filter = new FilterRegistrationBean<MyFilter>();
        filter.setFilter(new MyFilter());
        filter.setUrlPatterns(Arrays.asList("/", "/index"));
        return filter;
    }
  • 过滤器可以通过路径进行过滤,分部进行设置
  • 也可以通过ServletRegistrationBean集合直接自动过滤,具体可以查看构造方法

3. Listener注册

  • 组件
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("do something");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("do nothing");
    }
}

支持的Listener类型

  1. ServletContextAttributeListener
  2. ServletRequestListener
  3. ServletRequestAttributeListener
  4. HttpSessionAttributeListener
  5. HttpSessionListener
  6. ServletContextListener
  • 注册
@Configuration
public class Config {
    
    @Bean
    ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean(){
        ServletListenerRegistrationBean<MyListener> listener = new ServletListenerRegistrationBean<MyListener>();
        listener.setListener(new MyListener());
        listener.setEnabled(true);
        listener.setOrder(1);
        return listener;
    }

同样的,可以设置监听方法,还有其他可配置参数。

容器切换

1. 三大容器

容器 优点 缺点 默认
tomcat 功能齐全 庞大,荣泽 true
jetty 轻量 功能不全 false
undertow 异步,高效 不支持jsp false

2. 容器切换

  • tomcat
    在这里插入图片描述
  • spring-boot-starter-web默认使用tomcat
  • spring-boot-starter-tomcat:就会引入tomcat
  • jetty
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
	 	<!-- 去除tomcat依赖 -->
        <exclusion>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<groupId>org.springframework.boot</groupId>
		</exclusion>
	</exclusions>
</dependency>
<!--  引入jetty -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

在这里插入图片描述

  • undertow
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
	 	<!-- 去除tomcat依赖 -->
        <exclusion>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<groupId>org.springframework.boot</groupId>
		</exclusion>
	</exclusions>
</dependency>
<!--  引入undertow -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wait_for_eva/article/details/82939712
今日推荐