由於SpringBoot默認是以jar包的方式啓動嵌入式的Servlet容器來啓動SpringBoot的web應用,沒有web.xml文件,也就不能夠通過傳統的xml配置來映射,如果需要註冊自定義組件,可以通過如下方式
(一)註冊自定義Servlet組件
1:創建繼承HttpServlet類子類,重寫doGet或者doPost,這裏只是測試,如果是開發中需要put或者delete根據實際情況重寫即可
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//返回客戶端字符串 Custom Servlet
resp.getWriter().write("Custom Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
2:構建一個ServletRegistrationBean類型的Bean,其中第一個參數爲Servlet實例(即自定義的HttpServlet),第二個參數爲映射的請求
@Configuration
public class MyServletConfig {
//註冊自定義的Servlet
@Bean
public ServletRegistrationBean myServletRegistration() {
return new ServletRegistrationBean(new MyServlet(), "/myServlet");
}
}
(二)註冊自定義Filter組件
1:創建自定義的Filter類,實現接口,根據需要實現其功能
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("執行自定義過濾器...");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
2:通過構建一個FilterRegistrationBean 類型的Bean來註冊過濾器
@Configuration
public class MyServletConfig {
//註冊自定義的Filter
@Bean
public FilterRegistrationBean myFilterRegistrationBean() {
FilterRegistrationBean myFilterBean = new FilterRegistrationBean();
//加載自定義的過濾器類
myFilterBean.setFilter(new MyFilter());
//設置過濾的請求
myFilterBean.addUrlPatterns("/myFilter");
return myFilterBean;
}
}
瀏覽器測試:
http://localhost:端口/myFilter
(三)註冊自定義Listener組件
1:構建一個實現ServletContextListener接口的監聽器
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("WEB容器啓動");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("WEB容器銷燬");
}
}
2:註冊自定義的監聽器,返回一個類型的Bean
@Configuration
public class MyServletConfig {
//註冊自定義的Listener
@Bean
public ServletListenerRegistrationBean myServletListenerRegistrationBean() {
ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean();
registrationBean.setListener(new MyListener());
return registrationBean;
}
}