1. 程式人生 > >Spring boot註冊三大元件

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中設定
自定義元件的屬性