SpringBoot-Servlet配置及容器切換
阿新 • • 發佈:2018-12-13
容器配置
1. 配置檔案
# 簡單配置可以通過application.yml檔案直接進行配置
server.port=8080
2. 程式碼配置
@Configuration
public class Config {
@Bean
WebServerFactoryCustomizer webServerFactoryCustomizer(){
return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {
@Override
public void customize(ConfigurableWebServerFactory factory) {
factory.setPort(8080);
}
};
}
}
WebServerFactoryCustomizer
:舊版本叫做EmbeddedServletContainerCustomizer
ConfigurableWebServerFactory
:記得泛型宣告,預設方法factory是空的
元件註冊
1. servlet註冊
- 元件
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("response");
}
}
- 註冊
@Configuration
public class Config {
ServletRegistrationBean<MyServlet> servletServletRegistrationBean(){
return new ServletRegistrationBean(new MyServlet(), "/myServlet");
}
}
servletServletRegistrationBean
:自動註冊的包裝Bean
new MyServlet()
:需要註冊的Servlet例項物件
/myServlet
:訪問對映地址
@Configuration
public class Config {
ServletRegistrationBean<MyServlet> servletServletRegistrationBean(){
ServletRegistrationBean bean = new ServletRegistrationBean();
bean.setLoadOnStartup(0);
bean.setServlet(new MyServlet());
bean.setUrlMappings(Arrays.asList("/", "/myservlet"));
return bean;
}
}
也可以先生成物件,再進行設定。
PS:除去簡單對映,例如
LoadOnStartup
等資訊也可以進行配置
2. Filter註冊
- 元件
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("filter");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
- 註冊
@Configuration
public class Config {
@Bean
FilterRegistrationBean<MyFilter> filterFilterRegistrationBean(){
FilterRegistrationBean<MyFilter> filter = new FilterRegistrationBean<MyFilter>();
filter.setFilter(new MyFilter());
filter.setUrlPatterns(Arrays.asList("/", "/index"));
return filter;
}
- 過濾器可以通過路徑進行過濾,分部進行設定
- 也可以通過
ServletRegistrationBean
集合直接自動過濾,具體可以檢視構造方法
3. Listener註冊
- 元件
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("do something");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("do nothing");
}
}
支援的Listener
型別
ServletContextAttributeListener
ServletRequestListener
ServletRequestAttributeListener
HttpSessionAttributeListener
HttpSessionListener
ServletContextListener
- 註冊
@Configuration
public class Config {
@Bean
ServletListenerRegistrationBean<MyListener> servletListenerRegistrationBean(){
ServletListenerRegistrationBean<MyListener> listener = new ServletListenerRegistrationBean<MyListener>();
listener.setListener(new MyListener());
listener.setEnabled(true);
listener.setOrder(1);
return listener;
}
同樣的,可以設定監聽方法,還有其他可配置引數。
容器切換
1. 三大容器
容器 | 優點 | 缺點 | 預設 |
---|---|---|---|
tomcat |
功能齊全 | 龐大,榮澤 | true |
jetty |
輕量 | 功能不全 | false |
undertow |
非同步,高效 | 不支援jsp |
false |
2. 容器切換
tomcat
spring-boot-starter-web
預設使用tomcat
spring-boot-starter-tomcat
:就會引入tomcat
jetty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 去除tomcat依賴 -->
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入jetty -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
undertow
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 去除tomcat依賴 -->
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入undertow -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>