02.Spring Boot 實戰~SpringBoot 整合Servlet,Filter, Listener

02.Spring Boot 實戰~SpringBoot 整合Servlet,Filter, Listener

本文是上一篇文章的後續,詳情點擊該鏈接

SpringBoot 在 Controller 中常用註解

註解 說明
@RestController @RestController 相當於@Controller+@ResponseBody 註解 如果使用@RestController 註解 Controller 中的方法無法返回頁面,相當於在方法上面自 動 加 了@ResponseBody 注 解 , 所 以 沒 辦 法 跳 轉 並 傳 輸 數 據 到 另 一 個 頁 面 , 所以InternalResourceViewResolver 也不起作用,返回的內容就是 Return 裏的內容
@GetMapping @GetMapping 註解是@RequestMapping(method=RequestMethod.GET)的縮寫
@PostMapping @PostMapping 註解是@RequestMapping(method= RequestMethod.POST)的縮寫
@PutMapping @PutMapping 註解是@RequestMapping(method=RequestMethod.PUT)的縮寫
@DeleteMapping @DeleteMapping 註解是@RequestMapping(method=RequestMethod.DELETE)的縮寫。

Spring boot整合Servlet

方式一:通過註解掃描完成 Servlet 組件的註冊

創建Servlet
@WebServlet("/first")
public class MyServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("hello world this is my first servlet");
    }
}
啓動類
//啓動類必須要有這個註解!
@SpringBootApplication
@ServletComponentScan// 在 spring Boot啓 動 時 會 掃 描 @WebServlet
public class SpringBootDemoApplication {
    public static void main(String[] args) {
        //必須要通過SpringApplication下的靜態方法run
        //第一個參數是啓動類的class,第二個參數是main方法裏的args
        SpringApplication.run(SpringBootDemoApplication.class,args);
    }
}

在這裏插入圖片描述

方法二:通過方法完成 Servlet 組件的註冊

創建Servlet

這個時候我們就不再需要@WebServlet註解了

public class MyServlet2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().write("this is my second servlet");
    }
}
創建ServletConfig類

完成Servlet組件的註冊

@Configuration
public class ServletConfig {
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
        //實例化Servlet
        ServletRegistrationBean bean = new ServletRegistrationBean(new MyServlet2());
        bean.addUrlMappings("/second");
        return bean;
    }
}
啓動類
//啓動類必須要有這個註解!
@SpringBootApplication
@ServletComponentScan// 在 spring Boot啓 動 時 會 掃 描 @WebServlet
public class SpringBootDemoApplication {
    public static void main(String[] args) {
        //必須要通過SpringApplication下的靜態方法run
        //第一個參數是啓動類的class,第二個參數是main方法裏的args
        SpringApplication.run(SpringBootDemoApplication.class,args);
    }
}

Spring boot 整合 Filter

方式一:通過註解掃描完成Filter組件註冊

創建Filter
//攔截剛剛創建的MyServlet
@WebFilter("/first")
public class FirstFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("start");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("end");
    }

    @Override
    public void destroy() {}
}
啓動類
//啓動類必須要有這個註解!
@SpringBootApplication
@ServletComponentScan// 在 spring Boot啓 動 時 會 掃 描 @WebServlet,@WebFilter註解

public class SpringBootDemoApplication {
    public static void main(String[] args) {
        //必須要通過SpringApplication下的靜態方法run
        //第一個參數是啓動類的class,第二個參數是main方法裏的args
        SpringApplication.run(SpringBootDemoApplication.class,args);
    }
}

在這裏插入圖片描述在這裏插入圖片描述

方式二:通過方法完成Filter組件註冊

創建新的Filter

這個時候我們不再需要@WebFilter註解了

public class FirstFilter2 implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("start");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("end");
    }

    @Override
    public void destroy() {}
}

完成Filter的註冊

@Configuration
public class FilterConfig {
    public FilterRegistrationBean getFilterRegistrationBean(){
        FilterRegistrationBean bean = new FilterRegistrationBean(new FirstFilter2());
        //攔截MyServlet
        bean.addUrlPatterns(new String[]{"/first"});
        return bean;
    }
}

啓動類

//啓動類必須要有這個註解!
@SpringBootApplication
@ServletComponentScan// 在 spring Boot啓 動 時 會 掃 描 @WebServlet,@WebFilter註解

public class SpringBootDemoApplication {
    public static void main(String[] args) {
        //必須要通過SpringApplication下的靜態方法run
        //第一個參數是啓動類的class,第二個參數是main方法裏的args
        SpringApplication.run(SpringBootDemoApplication.class,args);
    }
}

在這裏插入圖片描述
在這裏插入圖片描述

Spring Boot 整合 Listener

方式一:還是使用註解

@WebListener
public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Listener ....Init");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}
啓動類
//啓動類必須要有這個註解!
@SpringBootApplication
@ServletComponentScan// 在 spring Boot啓 動 時 會 掃 描 @WebServlet,@WebFilter註解,@WebListener

public class SpringBootDemoApplication {
    public static void main(String[] args) {
        //必須要通過SpringApplication下的靜態方法run
        //第一個參數是啓動類的class,第二個參數是main方法裏的args
        SpringApplication.run(SpringBootDemoApplication.class,args);
    }
}

在這裏插入圖片描述

方式二:還是通過方法完成註冊

配置類
@Configuration
public class ListenerConfig {
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new FirstListener2());
        return bean;
    }
}

套路都一樣,我也懶得再寫了。。。

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