二、註冊Servlet三大組件

由於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;
 }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章