1、配置嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入的Servlet容器; 问题: 1、如果是外置的tomcat,我们可以对tomcat的conf目录中server.xml和web.xml进行定制优化修改。然而对于SpringBoot嵌入式Servlet容器配置如何修改??? 1.1、配置文件:可以在 application.properties/yml 文件中设置相关的server信息,如图所示: #设置项目访问路径
server.servlet.context-path=/crud
#设置项目端口号
server.port=80
1.2、代码配置: import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; @Configuration public class MyServerConfig { /** * 配置嵌入式的servlet容器 * @return */ @Bean public TomcatServletWebServerFactory getTomcat(){ TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory(); tomcatServletWebServerFactory.setContextPath("/test"); tomcatServletWebServerFactory.setPort(8090); return tomcatServletWebServerFactory; } 2、SpringBoot能不能支持其它的Servlet容器??? |
2、注册servlet三大组件:Servlet、Filter、Listener ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean 由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。 我们这里创建的 SpringBoot 应用是 jar 的方式,启动嵌入式的 tomcat 。如果创建的是一个标准的web项目,我们可以在 webapp/WEB-INF/web.xml 中注册三大组件。 可以通过以下的方式进行注册: 2.1、注册Servlet /** * 注册Servlet组件 * 通过@Bean加载到容器中 * @return */ @Bean public ServletRegistrationBean<MyServlet> myServlet(){ ServletRegistrationBean<MyServlet> servletRegistrationBean = new ServletRegistrationBean<MyServlet>(new MyServlet(), "/myServlet"); return servletRegistrationBean; } 2.2、注册Filter @Bean public FilterRegistrationBean<MyFilter> myFilter(){ FilterRegistrationBean<MyFilter> filterRegistrationBean = new FilterRegistrationBean<MyFilter>(); filterRegistrationBean.setFilter(new MyFilter()); // 设置filter filterRegistrationBean.setUrlPatterns(Arrays.asList("/myFilter","/myServlet","/test")); // 设置拦截请求的URL return filterRegistrationBean; } import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyFilter implements Filter { private Logger logger = LoggerFactory.getLogger(MyFilter.class); /** * filter的销毁 */ @Override public void destroy() { } /** * filter的过滤 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { logger.info("MyFilter process……"); // 打印日志 chain.doFilter(request, response); // 放行请求 } /** * filter的初始化 */ @Override public void init(FilterConfig config) throws ServletException { } }测试:http://localhost/crud/myFilter、http://localhost/crud/myServlet、http://localhost/crud/test 2.3、注册Listener import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.demo.springbootweb.filter.MyFilter; public class MyListener implements ServletContextListener { private Logger logger = LoggerFactory.getLogger(MyFilter.class); @Override public void contextDestroyed(ServletContextEvent arg0) { logger.info("contextDestroyed web应用销毁……"); } @Override public void contextInitialized(ServletContextEvent arg0) { logger.info("contextInitialized web应用启动……"); } } /** * 注册Listener组件,通过@Bean加载到容器中 * @return */ @Bean public ServletListenerRegistrationBean<MyListener> myListener(){ ServletListenerRegistrationBean<MyListener> myListener = new ServletListenerRegistrationBean<MyListener>(new MyListener()); return myListener; } |
下面是MyServerConfig代码: |
import java.util.Arrays; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.demo.springbootweb.filter.MyFilter; import com.demo.springbootweb.listener.MyListener; import com.demo.springbootweb.servlet.MyServlet; @Configuration public class MyServerConfig { /** * 配置嵌入式的servlet容器 * @return */ @Bean public TomcatServletWebServerFactory getTomcat(){ TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory(); tomcatServletWebServerFactory.setContextPath("/test"); // 设置项目访问路径 tomcatServletWebServerFactory.setPort(8090); // 设置项目端口号 return tomcatServletWebServerFactory; } /** * 注册Servlet组件 * 通过@Bean加载到容器中 * @return */ @Bean public ServletRegistrationBean<MyServlet> myServlet(){ ServletRegistrationBean<MyServlet> servletRegistrationBean = new ServletRegistrationBean<MyServlet>(new MyServlet(), "/myServlet"); return servletRegistrationBean; } /** * 注册Filter组件,通过@Bean加载到容器中 * @return */ @Bean public FilterRegistrationBean<MyFilter> myFilter(){ FilterRegistrationBean<MyFilter> filterRegistrationBean = new FilterRegistrationBean<MyFilter>(); filterRegistrationBean.setFilter(new MyFilter()); // 设置filter filterRegistrationBean.setUrlPatterns(Arrays.asList("/myFilter","/myServlet","/test")); // 设置拦截请求的URL return filterRegistrationBean; } /** * 注册Listener组件,通过@Bean加载到容器中 * @return */ @Bean public ServletListenerRegistrationBean<MyListener> myListener(){ ServletListenerRegistrationBean<MyListener> myListener = new ServletListenerRegistrationBean<MyListener>(new MyListener()); return myListener; } }
感谢--尚硅谷 |