Spring boot註冊三大元件
註冊三大元件
Spring boot
以jar包的方式
使用嵌入式的Tomcat啟動Web應用
沒有Web應用目錄結構,沒有web.xml檔案
Web應用
是一個Web應用的目錄結構
存在目錄檔案src/main/webapp/WEB-INF/web.xml
可以把三大元件,註冊在web.xml中
Spring boot
提供了三大元件,註冊方式
註冊Servlet,使用ServletRegistrationBean
註冊Filter,使用FilterRegistrationBean
註冊ServletListener,使用ServletListenerRegistrationBean
Servlet
自定義Servlet,繼承HttpServlet
重寫方法,處理請求
public class MyServlet extends HttpServlet {
//處理get請求
@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("Hello MyServlet");
}
}
Filter
自定義Filter,實現Filter介面
實現Filter的三個方法
Init,初始化
doFilter,過濾
destroy,銷燬
chain.doFilter,放行請求
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("MyFilter process...");
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
Listener
自定義Listener,實現ServletContextListener
Listener有很多,這裡監聽啟動和銷燬的Listener
contextInitialized,初始化方法,Web專案啟動
contextDestroyed,銷燬方法,Web專案銷燬
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized...web應用啟動");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed...當前web專案銷燬");
}
}
註冊Servlet
返回一個ServletRegistrationBean
是一個class,直接new一個
使用有參構造器,傳遞自定義的Servlet,對映路徑
註冊Filter
返回一個FilterRegistrationBean
是一個class,直接new一個
設定自定義的Filter,設定攔截請求的url
是一個集合,使用Arrays轉換
註冊Listener
返回一個ServletListenerRegistrationBean
是一個類,直接new一個
傳遞自定義的Listener
可以註冊的Listener型別
註冊方式
@Configuration
public class MyServerConfig {
//註冊三大元件
@Bean
public ServletRegistrationBean myServlet(){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
registrationBean.setLoadOnStartup(1);
return registrationBean;
}
@Bean
public FilterRegistrationBean myFilter(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new MyFilter());
registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
return registrationBean;
}
@Bean
public ServletListenerRegistrationBean myListener(){
ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
return registrationBean;
}
}
屬性設定
可以直接在registrationBean中設定
自定義元件的屬性