[十二]SpringBoot 之 servlet


Web開發使用 Controller 基本上可以完成大部分需求,但是我們還可能會用到 Servlet、Filter、Listener、Interceptor 等等。

當使用spring-Boot時,嵌入式Servlet容器通過掃描注解的方式注冊Servlet、Filter和Servlet規范的所有監聽器(如HttpSessionListener監聽器)。 
Spring boot 的主 Servlet 為DispatcherServlet,其默認的url-pattern為“/”。也許我們在應用中還需要定義更多的Servlet,該如何使用SpringBoot來完成呢?

在spring boot中添加自己的Servlet有兩種方法,代碼注冊Servlet和注解自動注冊(Filter和Listener也是如此)。 
一、代碼注冊通過ServletRegistrationBean、 FilterRegistrationBean 和ServletListenerRegistrationBean 獲得控制。 
也可以通過實現 ServletContextInitializer 接口直接注冊。

二、在SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener 可以直接通過 @WebServlet、@WebFilter、@WebListener 注解自動注冊,無需其他代碼。

1.通過代碼注冊Servlet示例代碼:

 

package me.shijunjie.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet1 extends HttpServlet {
    private static final long serialVersionUID = 1L;



    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");

        doPost(req, resp);

    }



    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");

        resp.setContentType("text/html"); 

        PrintWriter out = resp.getWriter(); 

        out.println("<html>"); 

        out.println("<head>"); 

        out.println("<title>HelloWorld</title>"); 

        out.println("</head>"); 

        out.println("<body>"); 

        out.println("<h1>這是:MyServlet1</h1>"); 

        out.println("</body>"); 

        out.println("</html>");

    }
}
package me.shijunjie.testspringboot2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

import me.shijunjie.servlet.MyServlet1;

@SpringBootApplication
public class App 
{
    
     /**
     * 注冊Servlet.不需要添加注解:@ServletComponentScan
     * @return
     */
    @Bean
    public ServletRegistrationBean myServlet1(){

           return new ServletRegistrationBean(new MyServlet1(),"/myServlet/*");
    }
    
    public static void main( String[] args )
    {
        SpringApplication.run(App.class, args);
    }
}

測試

2.使用注解注冊Servlet示例代碼 添加@WebServlet注解

package me.shijunjie.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns="/myServlet2/*",description="Servlet的說明")
public class MyServlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");
        doPost(req, resp);
    }



    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");

        resp.setContentType("text/html"); 

        PrintWriter out = resp.getWriter(); 

        out.println("<html>"); 

        out.println("<head>"); 

        out.println("<title>HelloWorld</title>"); 

        out.println("</head>"); 

        out.println("<body>"); 

        out.println("<h1>這是:MyServlet2</h1>"); 

        out.println("</body>"); 

        out.println("</html>");

    }
}

添加@ServletComponentScan注解

package me.shijunjie.testspringboot2;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

/**
 * Hello world!
 *
 */
@SpringBootApplication
@ServletComponentScan("me.shijunjie.servlet")
public class App 
{
    
    /* *//**
     * 注冊Servlet.不需要添加注解:@ServletComponentScan
     * @return
     *//*
    @Bean
    public ServletRegistrationBean myServlet1(){

           return new ServletRegistrationBean(new MyServlet1(),"/myServlet/*");
    }*/
    
    public static void main( String[] args )
    {
        SpringApplication.run(App.class, args);
    }
}

測試

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM