17.配置嵌入式的Servlet容器
springboot使用的是嵌入式的tomcat服务器
1.如何修改和定制servlet容器的相关配置
修改servlet有关的配置(ServerProperties)
例如在application.properties
server.port=8081
server.context-path=/crud
server.tomcat.uri-encoding=utf-8
1.通用的servlet容器设置
server.xxx
2.tomcat的设置
server.tomcat.xxx
3.还可以通过嵌入式的servlet容器定制器(WebServerFactoryCustomizer),来修改容器的配置
@Configuration
public class MyServerConfig {
@Bean
public WebServerFactoryCustomizer WebServerFactoryCustomizer(){
return new WebServerFactoryCustomizer() {
@Override
public void customize(WebServerFactory factory) {
ConfigurableWebServerFactory factory1= (ConfigurableWebServerFactory) factory;
factory1.setPort(8083);
}
};
}
}
--------------------------------------------------------------------------------
如何注册servlet的三大组件
由于springbootmore是以jar包的形式启动嵌入式的servlet容器来启动springboot的web应用,没有web.xml文件,注册三大组件(servlet,filter,listener)以以下的方式
1.注册servlet
1.1 创建自己的servlet,处理doget/dopost请求
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().println("hello myservlet");
}
}
1.2.配置servlet并加载到容器中
@Configuration
public class MyServerConfig {
//配置嵌入式的servlet:设置端口为8083
@Bean
public WebServerFactoryCustomizer webServerFactoryCustomizer(){
return new WebServerFactoryCustomizer() {
@Override
public void customize(WebServerFactory factory) {
ConfigurableWebServerFactory factory1= (ConfigurableWebServerFactory) factory;
factory1.setPort(8083);
}
};
}
//配置servlet的三大组件
//1.注册servlet
@Bean
public ServletRegistrationBean myservlet(){
//使用ServletRegistrationBean:参数1(自己的servlet),参数2(自建的servlet处理的请求路径)
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new Myservlet(), "/myservlet");
return registrationBean;
}
}
1.3访问路径:http://localhost:8083/myservlet 页面出现:hello myservlet 说明自建的servlet起作用了,配置成功!
2.注册filter
2.1创建自己的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("MyFilter process");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
2.2将自己的filter注册到容器中
//注册filter
@Bean
public FilterRegistrationBean myFilter(){
FilterRegistrationBean registrationBean=new FilterRegistrationBean();
registrationBean.setFilter(new Myfilter());
registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
return registrationBean;
}
2.3.当输入路径是:http://localhost:8083/myServlet 后台打印:MyFilter process
3.注册listener
3.1自己创建的lister
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContex对象初始化...web应用启动!");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContex销毁...服务器关闭!");
}
}
3.2将自己创建的listener加载到容器中
//注册listener
@Bean
public ServletListenerRegistrationBean myListener(){
ServletListenerRegistrationBean listenerRegistrationBean=new ServletListenerRegistrationBean(new MyListener());
return listenerRegistrationBean;
}
3.3
当程序启动时:打印:ServletContex对象初始化...web应用启动!
当程序正常停止时:打印:ServletContex销毁...服务器关闭!
springboot是否支持其他的servlet容器
1.tomcat(默认使用)
2.Jetty(长连接)
3.Undertow(不支持jsp)
分类:
springboot简单版
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构