1. 程式人生 > 實用技巧 >2、SpringBoot整合Web層技術

2、SpringBoot整合Web層技術

整合Servlet方式一(通過註解掃描完成Servlet元件的註冊)

1.建立Serverlet
2.修改啟動類,新增 @ServletComponentScan

新增web依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.1.RELEASE</version>
</dependency>

1.建立Serverlet

@WebServlet(name="FirstServlet", urlPatterns = "/first")
public class FirstServlet extends HttpServlet{
    public void doGet(HttpServletRequest request, HttpServletResponse response){
        System.out.println("First Servlet...");
    }
}

2.修改啟動類,新增 @ServletComponentScan

@SpringBootApplication
@ServletComponentScan//在SpringBoot啟動時會掃描@WebServlet,對該類進行例項化
public class SpringbootwebApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringbootwebApplication.class, args);
   }
}

通過:localhost:8080/first 訪問

整合Servlet方式二(通過方法完成Servlet元件的註冊)

1.建立Serverlet繼承HttpServlet
2.建立Servlet配置類

1.建立Serverlet

public class SecondServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response){
        System.out.println("Second Servlet...");
    }
}

2.建立Servlet配置類

@Configuration
public class ServletConfig {
//    完成Servlet元件的註冊
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
//新增該Servlet的訪問路徑
        bean.addUrlMappings("/second");
        return bean;
    }
}

啟動類

@SpringBootApplication
public class SpringbootwebApplication {

   public static void main(String[] args) {
      SpringApplication.run(SpringbootwebApplication.class, args);
   }
}

新增@Configuration相當於這個類是一個spring配置檔案上下文,新增@Bean的這個方法會在spring容器啟動的時候進行例項化

通過url:localhost:8080/second 訪問

整合Filter方式一(通過註解掃描完成Filter元件註冊)

1.建立Filter
2.修改啟動類,新增@ServletComponentScan註解

1.建立Filter

//@WebFilter(filterName = "FirstFilter",urlPatterns = {"*.do","*.jsp"})
@WebFilter(filterName = "FirstFilter", urlPatterns = "/first")
public class FirstFilter implements Filter {

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

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("進入First Filter");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("離開First Filter");
    }
}

2.修改啟動類,新增@ServletComponentScan註解

@SpringBootApplication
@ServletComponentScan
public class SpringbootwebApplication {


   public static void main(String[] args) {
      SpringApplication.run(SpringbootwebApplication.class, args);
   }
}

因為Filter本身屬於Servlet的一個子技術,所以通過@ServletComponentScan也可以掃描到@WebFilter的類

通過url:localhost:8080/first 訪問

整合Filter方式二(通過方法完成Filter元件註冊)

1.建立Filter實現Filter
2.建立Filter配置類

1.建立Filter

public class SecondFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("進入Second Filter");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("離開Second Filter");
    }
}

建立Filter配置類

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean(){
        FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
//        bean.addUrlPatterns(new String[]{"*.do","*.jsp"});
        bean.addUrlPatterns("/second");
        return bean;
    }
}

通過 url:localhost:8080/second

整合Listener方式一(通過註解掃描完成Listener元件註冊)

1.編寫Listener實現ServletContextListener
2.修改啟動類新增@ServletComponentScan

1.編寫Listener

@WebListener
public class FirstListener implements ServletContextListener{
    //監聽銷燬的方法
    public void contextDestroyed(ServletContextEvent event){

    }

    // 監聽初始化的方法
    public void contextInitialized(ServletContextEvent event){
        System.out.println("Listener....Init.....");
    }
}

2.修改啟動類新增@ServletComponentScan

@SpringBootApplication
@ServletComponentScan
public class SpringbootwebApplication {
   public static void main(String[] args) {
      SpringApplication.run(SpringbootwebApplication.class, args);
   }
}

整合Listener方式二(通過方法完成Listener元件註冊)

1.編寫Listener
2.建立Listenter啟動類

1.編寫Listener

public class SecondListener implements ServletContextListener {
    //監聽銷燬的方法
    public void contextDestroyed(ServletContextEvent event){
    }


    // 監聽初始化的方法
    public void contextInitialized(ServletContextEvent event){
        System.out.println("SecondListener....Init.....");
    }
}

2.建立Listenter啟動類

@Configuration
public class ListenerConfig {
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
        return bean;
    }
}