SpringBoot框架:嵌入式Servlet容器的修改配置和启动原理,注册servlet三大组件,修改成其他的servlet容器的使用和原理,外置的Servlet容器的使用和原理

嵌入式Servlet容器

之前我们写一个web项目的时候,需要将这个项目打包成war包,然后
将这个war包放在配置好servlet容器(Tomcat)里面运行
但是现在我们编写SpringBoot项目的时候发现启动的时候我们
并没有配置什么Tomcat,但是使用的却是Tomcat容器
SpringBoot默认使用Tomcat作为嵌入式的Servlet容器;
从pom配置文件里面可以看出来

在这里插入图片描述

对于嵌入式的东西,我们关注的问题大概是:
	怎样定制和修改Servlet容器的相关配置;
	如何修改成其他的servlet容器

修改Servlet容器的相关配置

修改和server有关的配置
修改和server有关的配置
(ServerProperties里面的属性
【可以发现它也是EmbeddedServletContainerCustomizer
也是使用customize方法将配置修改的】);
//通用的Servlet容器设置
server.xxx
//Tomcat的设置
server.tomcat.xxx
只要是配置文件里面能配置的属性,都是对应一个配置类
进入ServerProperties类进行查看,
可以发现里面有port端口号进行设置,
contextPath项目访问路径进行设置
tomcat容器进行设置
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties
		implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered {
   
   
	private Integer port;
	private String contextPath;
	private final Tomcat tomcat = new Tomcat();
	@Override
	public void customize(ConfigurableEmbeddedServletContainer container) {
   
   
		if (getPort() != null) {
   
   
			container.setPort(getPort());
		}
	}

点进Tomcat类里面进行查看
public static class Tomcat 
{
   
   
	private String protocolHeaderHttpsValue = "https";
	private Charset uriEncoding;
}
比如:
server.context-path=/crud
server.tomcat.uri-encoding=utf-8
编写一个EmbeddedServletContainerCustomizer
EmbeddedServletContainerCustomizer:
嵌入式的Servlet容器的定制器;来修改Servlet容器的配置
@Bean //要将这个定制器加入到容器中
public EmbeddedServletContainerCustomizer myEmbeddedServletContainerCustomizer()
{
   
   
    return new EmbeddedServletContainerCustomizer()
    {
   
   
        //定制嵌入式的Servlet容器相关的规则
        @Override
        public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer)
        {
   
   
            configurableEmbeddedServletContainer.setPort(8083);
        }
    };
}

注册servlet三大组件

SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器
来启动SpringBoot的web应用,没有web.xml文件。
注册三大组件用以下方式
    //注册三大组件
    //注册Servlet
    public ServletRegistrationBean Myservlet()
    {
   
   
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new MyServlet(),"/myservlet");
        return servletRegistrationBean;
    }
    //注册filter
    @Bean
    public FilterRegistrationBean MyFilter()
    {
   
   
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello","/myservlet"));
        return filterRegistrationBean;
    }
    //注册listener
    @Bean
    public ServletListenerRegistrationBean MyListener()
    {
   
   
        ServletListenerRegistrationBean<MyListener> myListenerServletListenerRegistrationBean = new ServletListenerRegistrationBean<>(new MyListener());
        return myListenerServletListenerRegistrationBean;
    }

package jane.test.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author jane
 * @create 2021-01-28 12:46
 */
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("MyServlet...");
    }
}

package jane.test.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author jane
 * @create 2021-01-29 12:49
 */
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()
    {
   
   

    }
}

package jane.test.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * @author jane
 * @create 2021-01-29 12:59
 */
public class MyListener implements ServletContextListener
{
   
   
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent)
    {
   
   
        System.out.println("contextInitialized...web应用启动")
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReflectMirroring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值