認識Servlet容器
Servlet是在javax.servlet包中定義的一個接口。在開發Spring Boot應用程序時,使用Controller基本能解決大部分的功能需求。但有時候也需要使用Servlet,比如實現攔截和監聽功能。
Spring Boot的核心控制器DispatcherServlet會處理所有的請求。如果自定義Servlet,則需要進行註冊,以便DispatcherServlet核心控制器知道它的作用,以及處理請求url-pattern.
使用Servlet處理請求,可以直接通過@WebServlet(urlPattern,descript)
註冊Servlet,然後在入口類中添加註解@ServletComponentScan
,以掃描該註解指定包下的所有Servlet。
用Servlet處理請求
實驗結果
運行程序,使用postman測試軟件中GET方法訪問地址
沒有postman的小夥伴可以點擊鏈接,進行下載postman和簡單使用測試軟件Postman下載(親測有效)
http://localhost:8080/ServletDemo02/*
會返回重寫doGET方法的值
Servlet ServletDemo02
下面是postman 的界面和返回結果
同時控制檯會輸出doGet裏定義的值
doGet
項目結構
無需依賴配置
1.註冊Servlet類
ServletDemo02.java
代碼解釋:
@WebServlet(urlPattern="/ServletDemo02/*"):屬性urlPattern指定WebServlet的作用範圍,這裏代表ServletDemo02下的所有子路徑。
doGet:父類HpptServlet的doGet方法是空的,沒有實現任何代碼,子類需要重寫此方法。
package com.example.demo;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/ServletDemo02/*")
public class ServletDemo02 extends HttpServlet {
/**
* 重寫doGet方法,父類的HttpServlet的doGet方法是空的,沒有實現任何代碼,子類需要重寫此方法
* 客戶使用GET方法請求Servlet時,Web容器會調用doGet方法處理請求
* */
@Override
protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{
System.out.println("doGet");
resp.getWriter().print("Servlet ServletDemo02");
}
}
2.開啓Servlet支持
在入口類上添加註解@ServletComponentScan
,以使得Servlet生效。
ServletDemoApplication.java
代碼解釋
@CompomentScan:組件掃描,可自動發現和裝配一些Bean,並根據定義的掃描路徑把符合掃描規則的類裝配到Spring容器中。
@SpringBootApplication:入口類Application的啓動註解
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
@ServletComponentScan
@SpringBootApplication
public class ServletDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ServletDemoApplication.class, args);
}
}