SpringBoot配置嵌入式Servlet容器

前言:
最近学习SpringBoot,故将一些学习中的笔记记录下来。学习初始阶段,尚有不足,若有错误可留言。

关于配置嵌入式Servlet容器

一:如何定制和修改Servlet容器的相关配置
首先:SpringBoot默认使用tomcat作为嵌入式的servlet容器。在开发应用中,我们可以定制和修改Servlet容器的相关配置
修改方式有两种:

  • 1:修改和server有关的配置(ServerProperties[也是EmbeddedServletContainerCustomizer]);
	server.port=8081
	server.context‐path=/crud
	server.tomcat.uri‐encoding=UTF‐8
	//通用的Servlet容器设置
	server.xxx
	//Tomcat的设置
	server.tomcat.xxx
  • 2:编写一个WebServerFactoryCustomizer(在2.0以上的版本中使用此接口,2.0一下使用EmbeddedServletContainerCustomizer):嵌入式的Servlet容器的定制器;来修改Servlet容器的配置
/**
     * 嵌入式的Servlet容器的定制器;来修改Servlet容器的配置
     * @return
     */
    @Bean
    public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){

        return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>(){

            @Override
            public void customize(ConfigurableWebServerFactory factory) {
            	//修改内置Tomcat的端口
                factory.setPort(8081);
            }
        };
    }

二:注册Servlet三大组件【Servlet、Filter、Listener】

在之前我们未使用springboot的内嵌tomcat的时候,我们若想注册Servlet三大组件的时候,可以直接通过配置webapp/web-inf/web.xml这个配置文件来实现;但是现在由于springboot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。

所以现在我们若想注册三大组件,springboot提供如下三种方式

  • ServletRegistrationBean(注册Servlet)
	创建属于自己的servlet,继承HttpServlet成为标准的Servlet
	public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      	resp.getWriter().write("Hello Word!!!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("Hello Word!!!");
    }
}

将servlet注入容器中

//ServletRegistrationBean 底层有一个有参构造器,在这个构造器中我们可以传入我们的标准的Servlet(MyServlet())和Servlet拦截的路径("/myServlet")
 @Bean
    public ServletRegistrationBean MyServlet(){
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
        return registrationBean;
    }

在重写Servlet中需要注意两点
1:继承自HttpServlet的Servlet没有重写doGet或doPost等方法;默认调用父类的doGet或doPost等方法;
2:不要让父类HttpServlet的doGet或doPost等方法覆盖了你重写的doGet或doPost等方法;
即去掉super.doGet(request, response)和super.doPost(request, response);

  • FilterRegistrationBean(注册Filter)
//import javax.servlet.*;
//创建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("允许放行。。。。。。。");
        filterChain.doFilter(servletRequest,servletResponse);
    }
    @Override
    public void destroy() {

    }
}

将Filter注入容器中

	//在此需要注意的是路径前面不要忘记写“/”
	@Bean
    public FilterRegistrationBean Filter(){
        FilterRegistrationBean filter = new FilterRegistrationBean();
        filter.setFilter(new MyFilter());
        filter.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
        return filter;
    }
  • ServletListenerRegistrationBean(注册Listener)
创建监听器

public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("启动。。。。。。。。。");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("关闭。。。。。。。。。");
    }
}

将监听器注入容器中

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

总结:
嵌入式的Servlet容器:(应用是打成的jar包)

  • 优点:简单,便携
  • 默认不支持jsp,优化定制比较复杂

若想要支持jsp,则可以使用外置的Servlet容器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值