57.SpringBoot的Servlet配置

目录

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

1.修改和server有关的配置

2.编写一个WebServerFactoryCustomizer:嵌入式的servlet容器的定制器。来修改servlet的配置

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

三、使用其他Servlet容器

1.使用其他容器

2.嵌入式Servlet容器自动配置的原理

3.嵌入式Servlet容器启动的原理

四、使用外置的Servlet


我们都知道,SpringBoot自带Tomcat作为嵌入式的Servlet容器。

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

1.修改和server有关的配置

通过server.xxx配置server。

通过server.tomcat.xxx配置tomcat

2.编写一个WebServerFactoryCustomizer:嵌入式的servlet容器的定制器。来修改servlet的配置

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

由于SpringBoot默认显示以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。

注册三大组件用一下方式:

ServletRegistrationBean

FilterRegistrationBean

ServletListenerRegistrationBean

示例如下:

MyServlet

MyFilter

MyListener

MyServletConfig

@Configuration
public class MyServletConfig {
    //注册三大组件
    @Bean
    public ServletRegistrationBean myServlet(){
        ServletRegistrationBean registrationBean = new ServletRegistrationBean<>(new MyServlet(),"/myServlet");
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
        return filterRegistrationBean;
    }

    @Bean
    public ServletListenerRegistrationBean myListener(){
        ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean =
                new ServletListenerRegistrationBean<>(new MyListener());
        return servletListenerRegistrationBean;
    }
}

三、使用其他Servlet容器

除了tomcat,其他Servlet容器还有Jetty(适合长连接)、Undertow(不支持JSP)

1.使用其他容器

pom.xml里面排除tomcat,引入jetty

2.嵌入式Servlet容器自动配置的原理

  1. SpringBoot根据导入的依赖情况,给容器中添加相应的Factory
  2. 容器中某个组件要创建对象,会惊动后置处理器
  3. 后置处理器从容器中获取所有的定制器,调用定制器的定制方法

3.嵌入式Servlet容器启动的原理

  1. SpringBoot应用运行run方法
  2. refreshContext(context):SpringBoot刷新IOC容器(创建IOC对象,初始化容器,创建容器中的每个组件)。根据是否Web应用创建不同的ApplicationContext容器
  3. refresh(context):刷新刚才创建好的IOC容器
  4. onRefresh():web的ioc容器重写了onRefresh方法
  5. webioc容器会创建嵌入式的Servlet容器
  6. 获取具体的嵌入式的Servlet容器工厂,工厂创建对象,后置处理器根据这个对象获取所有定制器来定制Servlet容器的相关配置
  7. 使容器工厂获取嵌入式的Servlet容器
  8. 嵌入式的Servlet容器创建对象并启动servlet容器

四、使用外置的Servlet

我们内置的Servlet容器有限,并且不支持JSP。但是万一我们需要用jsp,需要外置的Servlet

1.修改pom.xml,将打包方式变成war包

2.生成web.xml

点击右上角

注:正文上下两个红色框,下面是不用变动的,上面红色框的路径需要自己改变一下:

我们手动添加src\main\webapp\WEB-INF。比如我的就是如下:

D:\springBootProduct\springboot-04-web-servlet\src\main\webapp\WEB-INF\web.xml

你修改好后,路径就会变成(1)里面的路径。

3.将服务器整合进idea里面

以war包方式创建项目

看目录会多一个文件ServletInitializer

点击右上角

点击加号

这里注意:

刚打开默认路径是这样,我们需要变更路径,变成如下:

D:\springBootProduct\springboot-04-jsp\src\main\webapp\WEB-INF\web.xml

此时目录变成这样:

点击右上角

设置端口号,tomcat,以及名字

这个地方可以要可以不要,区别会在url上面提现出来,我们这里先不删除

创建两个jsp,内容随便给

HelloController

application.properties

运行

注意:如果你运行不起来,那么是不是ServletInitializer类缺失:自己手动加一下,如果还是不行,重新建一个项目,记得一定war包形式

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Springboot04JspApplication.class);
    }

}

猜你喜欢

转载自blog.csdn.net/qq_40594696/article/details/111863478