網站首頁 編程語言 正文
Servlet
文章目錄
- Servlet
- @[toc]
- Servlet快速入門
- Servlet執行流程
- Servlet生命周期
- Servlet方法介紹
- Servlet體系結構
- 思考
- 總結
- Servlet urlpattern配置
- urlPattern配置規則
- XML配置方式編寫Servlet
文章目錄
- Servlet
- @[toc]
- Servlet快速入門
- Servlet執行流程
- Servlet生命周期
- Servlet方法介紹
- Servlet體系結構
- 思考
- 總結
- Servlet urlpattern配置
- urlPattern配置規則
- XML配置方式編寫Servlet
Servlet快速入門
1.創建Web項目,導入Servlet坐標
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
dependencies>
2.定義一個類,實現Servlet接口,并重寫Servlet接口中的所有方法,并在service方法中輸入一句話
package com.tiyc.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebServlet("/demo1")/*配置訪問路徑*/
public class ServletDemo1 implements Servlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Servlet hello world~");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
3.配置:在類上使用@WebServlet注解,配置該Servlet的訪問路徑
@WebServlet("/demo1")/*配置訪問路徑*/
public class ServletDemo1 implements Servlet {
4.訪問:啟動Tomcat,瀏覽器輸入URL訪問該Servlet
http://localhost:8080/tomcat-demo02/demo1
Servlet執行流程
1.客戶端發送請求給服務器。
2.服務器開始接受,先判斷該請求的servlet實例是否存在,如果不存在先裝載一個servlet類并創建實例。如果存在則直接調用該servlet的service方法,之后進行判斷是調用doGet方法還是doPost方法。
3.servlet創建實例后,調用init方法進行初始化。之后調用servce方法,判斷是調用doGet方法還是doPost方法。
4.最后判斷服務是否關閉,如果關閉則調用destroy方法。
注:
Servlet由誰創建?Servlet方法由誰調用?
- Servlet有Web服務器創建,Servlet方法由web服務器調用。
服務器怎么知道Servlet中一定有service方法?
- 因為我們自定義的Servlet,必須實現Servlet接口并復寫其方法,而Servlet接口中有service方法。
Servlet生命周期
- 對象的生命周期指:一個對象從被創建到被銷毀的整個過程。
Servlet運行在Servlet容器(web服務器)中,其生命周期由容器來管理,分為四個階段:
-
加載與實例化:默認情況下,當Servlet第一次被訪問時,由容器創建Servlet對象
@WebServlet(urlPatterns = "/demo",loadOnStartup = 1); // 1.負整數:第一次訪問時創建Servlet對象 // 2.0或正整數:服務器啟動時創建Servlet對象。數字越小優先級越高
-
初始化:在Servlet實例化之后,容器將調用Servlet的init()方法初始化這個對象,完成一些如:加載配置文件,創建連接等初始化工作。該方法只調用一次。
-
請求處理:每次請求Servlet時,Servlet容器都會調用Servlet 的service()方法對請求進行處理。
/** * 提供服務 * 1.調用時機:每一次Servlet被訪問時 * 2.調用次數:可多次調用 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("Servlet hello world~"); }
-
服務終止:當需要釋放內存或者容器關閉時,容器就會調用Servlet實例destroy()方法完成資源的釋放。當descroy()方法調用之后容器會釋放這個Servlet實例,該實例會隨后被Java的垃圾收集器所回收
/** * 銷毀方法: * 1.調用時機:內存釋放或者服務器關閉時,Servlet對象會被銷毀,調用 * 2.調用次數:1次 * */ @Override public void destroy() { System.out.println("我是銷毀方法:destroy()...."); }
Servlet方法介紹
-
初始化方法,在Servlet被創建時執行,只執行一次
void init(ServletConfig config)
-
提供服務方法,每次Servlet被訪問,都會調用該方法
void service(ServletRequest req,ServletResponse res)
-
銷毀方法,當Servlet被銷毀時,調用該方法。在內存釋放或服務器關閉時銷毀Servlet
void destroy()
-
獲取ServletConfig()對象
ServletConfig getServletConfig()
-
獲取Servlet信息
String getServletInfo()
Servlet體系結構
@WebServlet("/demo4")
public class ServletDemo4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get.....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post.....");
}
}
思考
1.HttpServlet中為什么要根據請求方式的不同,調用不同方法?
2.如何調用?
答:
模擬HttpServlet寫個MyHttpServlet
public class MyHttpServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//根據請求方式的不同,進行分別處理
HttpServletRequest request = (HttpServletRequest) servletRequest;
//1.獲取請求方式:借助ServletRequest對象
String method = request.getMethod();
//2.判斷
if ("GET".equals(method)){
//get方式的處理邏輯
doGet(servletRequest,servletResponse);
}else if("POST".equals(method)){
//post方式的處理邏輯
doPost(servletRequest,servletResponse);
}
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
protected void doGet(ServletRequest servletRequest, ServletResponse servletResponse) {
}
protected void doPost(ServletRequest servletRequest, ServletResponse servletResponse) {
}
}
繼承MyHttpServlet的效果:
總結
1.HttpServlet的使用步驟
- 繼承HttpServlet
- 重寫doGet()和doPost()方法
2.HttpServlet原理
- 獲取請求方式,并根據不同的請求方式,調用不同的doXxx方法
Servlet urlpattern配置
-
Servlet想要被訪問,必須配置其訪問路徑(urlPattern)
-
一個Servlet,可以配置多個urlPattern
@WebServlet(urlPatterns = {"/demo1","demo2"})
-
urlPattern配置規則
注:范圍越小越精確,優先級越高。
1.精準匹配
-
配置路徑:
@WebServlet(urlPatterns = "/demo7")
-
訪問路徑:
http://localhost:8080/tomcat-demo02/demo7
2.目錄匹配
-
配置路徑:
@WebServlet(urlPatterns = "/user/*")
-
訪問路徑:
http://localhost:8080/tomcat-demo02/user/aaa http://localhost:8080/tomcat-demo02/user/bbb
3.擴展名匹配
-
配置路徑:
@WebServlet(urlPatterns = "*.do")
-
訪問路徑:
http://localhost:8080/tomcat-demo02/aaa.do http://localhost:8080/tomcat-demo02/bbb.do
4.任意匹配
-
配置路徑:
@WebServlet(urlPatterns = "/") @WebServlet(urlPatterns = "/*")
-
訪問路徑:
http://localhost:8080/tomcat-demo02/hehe http://localhost:8080/tomcat-demo02/haha
注:/* 與/ 的區別
- 當我們的項目中的Servlet配置了/,會覆蓋掉Tomcat中的DefaultServlet,當其他的url-pattern都匹配不上時就會走這個Servlet
- 當我們的項目中配置了/* 意味著匹配任意訪問路徑
- /* 的優先級比 / 高。
XML配置方式編寫Servlet
-
Servlet從3.0版本后開始支持使用注解配置,3.0版本前只支持XML配置文件的配置方式。
-
步驟:
1.編寫Servlet類
2.在web.xml中配置該Servlet
3.運行結果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
?
原文鏈接:https://blog.csdn.net/weixin_50659410/article/details/124778711
相關推薦
- 2022-04-05 C語言用遞歸函數實現漢諾塔_C 語言
- 2022-03-07 PXE如何實現自動化部署Linux系統介紹_Linux
- 2022-12-13 Python操作Excel數據的封裝函數分享_python
- 2022-11-22 ubuntu20.04中vscode使用ROS的詳細方法_C 語言
- 2022-09-18 詳解React?hooks組件通信方法_React
- 2022-12-07 C++?類this及返回自身對象的引用方式_C 語言
- 2022-06-22 Docker中?container?和?image?的命名_docker
- 2022-08-11 C++簡明講解缺省參數與函數重載的用法_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支