網(wǎng)站首頁 編程語言 正文
Servlet
文章目錄
- Servlet
- @[toc]
- Servlet快速入門
- Servlet執(zhí)行流程
- Servlet生命周期
- Servlet方法介紹
- Servlet體系結(jié)構(gòu)
- 思考
- 總結(jié)
- Servlet urlpattern配置
- urlPattern配置規(guī)則
- XML配置方式編寫Servlet
文章目錄
- Servlet
- @[toc]
- Servlet快速入門
- Servlet執(zhí)行流程
- Servlet生命周期
- Servlet方法介紹
- Servlet體系結(jié)構(gòu)
- 思考
- 總結(jié)
- Servlet urlpattern配置
- urlPattern配置規(guī)則
- XML配置方式編寫Servlet
Servlet快速入門
1.創(chuàng)建Web項(xiàng)目,導(dǎo)入Servlet坐標(biāo)
<dependencies>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
dependencies>
2.定義一個類,實(shí)現(xiàn)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執(zhí)行流程
1.客戶端發(fā)送請求給服務(wù)器。
2.服務(wù)器開始接受,先判斷該請求的servlet實(shí)例是否存在,如果不存在先裝載一個servlet類并創(chuàng)建實(shí)例。如果存在則直接調(diào)用該servlet的service方法,之后進(jìn)行判斷是調(diào)用doGet方法還是doPost方法。
3.servlet創(chuàng)建實(shí)例后,調(diào)用init方法進(jìn)行初始化。之后調(diào)用servce方法,判斷是調(diào)用doGet方法還是doPost方法。
4.最后判斷服務(wù)是否關(guān)閉,如果關(guān)閉則調(diào)用destroy方法。
注:
Servlet由誰創(chuàng)建?Servlet方法由誰調(diào)用?
- Servlet有Web服務(wù)器創(chuàng)建,Servlet方法由web服務(wù)器調(diào)用。
服務(wù)器怎么知道Servlet中一定有service方法?
- 因?yàn)槲覀冏远x的Servlet,必須實(shí)現(xiàn)Servlet接口并復(fù)寫其方法,而Servlet接口中有service方法。
Servlet生命周期
- 對象的生命周期指:一個對象從被創(chuàng)建到被銷毀的整個過程。
Servlet運(yùn)行在Servlet容器(web服務(wù)器)中,其生命周期由容器來管理,分為四個階段:
-
加載與實(shí)例化:默認(rèn)情況下,當(dāng)Servlet第一次被訪問時,由容器創(chuàng)建Servlet對象
@WebServlet(urlPatterns = "/demo",loadOnStartup = 1); // 1.負(fù)整數(shù):第一次訪問時創(chuàng)建Servlet對象 // 2.0或正整數(shù):服務(wù)器啟動時創(chuàng)建Servlet對象。數(shù)字越小優(yōu)先級越高
-
初始化:在Servlet實(shí)例化之后,容器將調(diào)用Servlet的init()方法初始化這個對象,完成一些如:加載配置文件,創(chuàng)建連接等初始化工作。該方法只調(diào)用一次。
-
請求處理:每次請求Servlet時,Servlet容器都會調(diào)用Servlet 的service()方法對請求進(jìn)行處理。
/** * 提供服務(wù) * 1.調(diào)用時機(jī):每一次Servlet被訪問時 * 2.調(diào)用次數(shù):可多次調(diào)用 * @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~"); }
-
服務(wù)終止:當(dāng)需要釋放內(nèi)存或者容器關(guān)閉時,容器就會調(diào)用Servlet實(shí)例destroy()方法完成資源的釋放。當(dāng)descroy()方法調(diào)用之后容器會釋放這個Servlet實(shí)例,該實(shí)例會隨后被Java的垃圾收集器所回收
/** * 銷毀方法: * 1.調(diào)用時機(jī):內(nèi)存釋放或者服務(wù)器關(guān)閉時,Servlet對象會被銷毀,調(diào)用 * 2.調(diào)用次數(shù):1次 * */ @Override public void destroy() { System.out.println("我是銷毀方法:destroy()...."); }
Servlet方法介紹
-
初始化方法,在Servlet被創(chuàng)建時執(zhí)行,只執(zhí)行一次
void init(ServletConfig config)
-
提供服務(wù)方法,每次Servlet被訪問,都會調(diào)用該方法
void service(ServletRequest req,ServletResponse res)
-
銷毀方法,當(dāng)Servlet被銷毀時,調(diào)用該方法。在內(nèi)存釋放或服務(wù)器關(guān)閉時銷毀Servlet
void destroy()
-
獲取ServletConfig()對象
ServletConfig getServletConfig()
-
獲取Servlet信息
String getServletInfo()
Servlet體系結(jié)構(gòu)
@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中為什么要根據(jù)請求方式的不同,調(diào)用不同方法?
2.如何調(diào)用?
答:
模擬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 {
//根據(jù)請求方式的不同,進(jìn)行分別處理
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的效果:
總結(jié)
1.HttpServlet的使用步驟
- 繼承HttpServlet
- 重寫doGet()和doPost()方法
2.HttpServlet原理
- 獲取請求方式,并根據(jù)不同的請求方式,調(diào)用不同的doXxx方法
Servlet urlpattern配置
-
Servlet想要被訪問,必須配置其訪問路徑(urlPattern)
-
一個Servlet,可以配置多個urlPattern
@WebServlet(urlPatterns = {"/demo1","demo2"})
-
urlPattern配置規(guī)則
注:范圍越小越精確,優(yōu)先級越高。
1.精準(zhǔn)匹配
-
配置路徑:
@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.擴(kuò)展名匹配
-
配置路徑:
@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
注:/* 與/ 的區(qū)別
- 當(dāng)我們的項(xiàng)目中的Servlet配置了/,會覆蓋掉Tomcat中的DefaultServlet,當(dāng)其他的url-pattern都匹配不上時就會走這個Servlet
- 當(dāng)我們的項(xiàng)目中配置了/* 意味著匹配任意訪問路徑
- /* 的優(yōu)先級比 / 高。
XML配置方式編寫Servlet
-
Servlet從3.0版本后開始支持使用注解配置,3.0版本前只支持XML配置文件的配置方式。
-
步驟:
1.編寫Servlet類
2.在web.xml中配置該Servlet
3.運(yùn)行結(jié)果
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳
?
原文鏈接:https://blog.csdn.net/weixin_50659410/article/details/124778711
相關(guān)推薦
- 2022-05-25 version `GLIBC_2.18‘ not found
- 2022-09-29 go日志庫logrus的安裝及快速使用_Golang
- 2022-07-18 python中數(shù)組array和列表list的基本用法及區(qū)別解析_python
- 2022-06-23 Python在畫圖時使用特殊符號的方法總結(jié)_python
- 2023-07-29 修改(elementui)el-table底層背景色
- 2022-08-10 C++學(xué)習(xí)之多態(tài)的使用詳解_C 語言
- 2022-05-18 React?Hook之使用State?Hook的方法_React
- 2022-05-22 部署ASP.NET?Core程序到Linux系統(tǒng)_基礎(chǔ)應(yīng)用
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支