欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:Servlet 詳解

柚子快報激活碼778899分享:Servlet 詳解

http://yzkb.51969.com/

1. Servlet

1.1 Servlet 是什么

Servlet 就是 Tomcat 這個 HTTP 服務器提供給 Java 的一組 API,根據(jù) 用戶不同 /時間不同 /輸入的參數(shù)不同,來構(gòu)建動態(tài)頁面。不必關(guān)注 Socket, HTTP協(xié)議格式, 多線程并發(fā)等技術(shù)細節(jié), 降低了 web app 的開發(fā)門檻, 提高了開發(fā)效率。

1.2 Servlet 主要做的工作

允許程序猿注冊一個類, 在 Tomcat 收到某個特定的 HTTP 請求的時候, 執(zhí)行這個類中的一些代碼.幫助程序猿解析 HTTP 請求, 把 HTTP 請求從一個字符串解析成一個 HttpRequest 對象.幫助程序猿構(gòu)造 HTTP 響應. 程序猿只要給指定的 HttpResponse 對象填寫一些屬性字段, Servlet 就會自動的按照 HTTP 協(xié)議的方式構(gòu)造出一個 HTTP 響應字符串, 并通過 Socket 寫回給客戶端.

1.3 Servlet 使用演示

1.3.1 創(chuàng)建項目

使用 IDEA 創(chuàng)建一個 Maven 項目.

菜單 -> 文件 -> 新建項目 -> Maven 選擇項目要存放的目錄 項目創(chuàng)建完畢 一般右下角會彈出以下對話框. 選擇 Enable Auto-Import。

1.3.2 引入依賴

Maven 項目創(chuàng)建完畢后, 會自動生成一個 pom.xml 文件,需要在 pom.xml 中引入 Servlet API 依賴的 jar 包.

在Maven中央倉庫中搜索 “servlet”, 一般第一個結(jié)果就是選擇版本. 可以在Tomcat查詢版本對應關(guān)系。查看本地Tomcat版本 使用 Tomcat 8.5, 那么就需要使用 Servlet 3.1.0 把中央倉庫中提供的 xml 復制到項目的 pom.xml 中 修改后的 pom.xml 形如:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.example

ServletHelloWorld

1.0-SNAPSHOT

javax.servlet

javax.servlet-api

3.1.0

provided

dependencies 標簽內(nèi)部放置項目依賴的 jar 包. maven 會自動下載依賴到本地 groupId: 表示組織名稱,artifactId: 表示項目名稱,version: 表示版本號中央倉庫就是按照這三個字段來確定唯一一個包的.

1.3.3 創(chuàng)建webapp目錄

當項目創(chuàng)建好了之后, IDEA 會幫我們自動創(chuàng)建出一些目錄. 形如

src 表示源代碼所在的目錄main/java 表示源代碼的根目錄. 后續(xù)創(chuàng)建 .java 文件就放到這個目錄中.main/resources 表示項目的一些資源文件所在的目錄. 此處暫時不關(guān)注.test/java 表示測試代碼的根目錄.

創(chuàng)建 webapp 目錄 在 main 目錄下, 和 java 目錄并列, 創(chuàng)建一個 webapp 目錄。webapp 目錄就是未來部署到 Tomcat 中的一個重要的目錄. 當前我們可以往 webapp 中放一些靜態(tài)資源, 比如 html , css 等創(chuàng)建 web.xml 在 webapp 目錄內(nèi)部創(chuàng)建一個 WEB-INF 目錄, 并創(chuàng)建一個 web.xml 文件,Tomcat 找到這個文件才能正確處理 webapp 中的動態(tài)資源. 編寫 web.xml 往 web.xml 中拷貝以下代碼,具體細節(jié)暫時不關(guān)注

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd" >

Archetype Created Web Application

1.3.4 編寫代碼

在 java 目錄中創(chuàng)建一個類 HelloServlet, 繼承自 HttpServlet,代碼如下:

@WebServlet("/hello") // 注解, 表示 Tomcat 收到的請求中路徑為 /hello 的請求才會調(diào)用 HelloServlet 這個類的代碼

// 這個路徑未包含 Context Path

public class HelloServlet extends HttpServlet {

@Override // 重寫 doGet 方法 ,這個方法會在 Tomcat 收到 GET 請求時觸發(fā)

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

// doGet 的參數(shù)有兩個, 分別表示收到的 HTTP 請求 和要構(gòu)造的 HTTP 響應

// HttpServletRequest 表示 HTTP 請求

// Tomcat 按照 HTTP 請求的格式把 字符串 格式的請求轉(zhuǎn)成了一個 HttpServletRequest 對象.

//后續(xù)想獲取請求中的信息(方法, url, header, body 等) 都是通過這個對象來獲取.

// HttpServletResponse 表示 HTTP 響應 代碼中把響應對象構(gòu)造好(構(gòu)造響應的狀態(tài)碼, header, body 等)

System.out.println("hello");

// resp.getWriter() 會獲取到一個流對象,

// 通過這個流對象就可以寫入一些數(shù)據(jù), 寫入的數(shù)據(jù)會被構(gòu)造成一個 HTTP 響應的 body 部分

// Tomcat 會把整個響應轉(zhuǎn)成字符串, 通過 socket 寫回給瀏覽器.

resp.getWriter().write("hello");

}

}

代碼不是通過 main 方法作為入口了. 可以理解為main 方法已經(jīng)被包含在 Tomcat 里, 我們寫的代碼會被 Tomcat 在合適的時機調(diào)用起來,接下來會演示。

滿足以下三個條件的類才能被調(diào)用:

創(chuàng)建的類需要繼承自 HttpServlet

這個類需要使用 @WebServlet 注解關(guān)聯(lián)上一個 HTTP 的路徑

這個類需要實現(xiàn) doXXX 方法.

1.3.5 打包程序

使用 maven 進行打包

1.3.5.1 jar包

jar 包是普通的 java 程序打包的結(jié)果. 里面會包含一些 .class 文件,war 包是 java web 的程序, 里面除了會包含 .class 文件之外, 還會包含 HTML, CSS, JavaScript, 圖片, 以及其他的 jar 包.打成 war 包格式才能被 Tomcat 識別.

打開 maven 窗口 (一般在 IDEA 右側(cè)就可以看到 Maven 窗口, 如果看不到的話, 可以通過 菜單 -> View -> Tool Window -> Maven 打開)Lifecycle , 雙擊 package 即可進行打包打包成功 可以看到在 target 目錄下, 生成了一個 jar 包

ServletHelloWorld-1.0-SNAPSHOT.jar 這個名字相當于把 artifactId 和 version 拼接起來了

但是 jar 包并不是我們需要的, Tomcat 需要識別的是另外一種 war 包格式

1.3.5.2 war包

在 pom.xml 中新增一個 packing 標簽, 表示打包的方式是打一個 war 包.

war

在 pom.xml 中再新增一個 build 標簽, 內(nèi)置一個 finalName 標簽, 表示打出的 war 包的名字是HelloServlet

ServletHelloWorld

完整的pom.xml 文件:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.example

ServletHelloWorld

1.0-SNAPSHOT

javax.servlet

javax.servlet-api

3.1.0

provided

war

ServletHelloWorld

重新使用 maven 打包, 可以看到生成的新的 war 包的結(jié)果.

1.3.6 部署程序

把 war 包拷貝到 Tomcat 的 webapps 目錄下。(Tomcat的使用) 啟動 Tomcat , Tomcat 就會自動把 war 包解壓縮,看到這個日志說明 Tomcat 已經(jīng)正確識別了 ServletHelloWorld 這個 webapp.

1.3.7 驗證程序

通過瀏覽器訪問 http://127.0.0.1:8080/ServletHelloWorld/hello URL 中的 PATH 分成兩個部分, 其中 ServletHelloWorld 為 Context Path, hello 為 Servlet Path

1.3.7 使用 IDEA 中的 Smart Tomcat 插件部署

1.3.7.1 安裝 Smart Tomcat 插件

菜單 -> 文件 -> Settings Plugins -> Marketplace -> 搜索 “tomcat” -> Install.

安裝完畢之后, 會提示 “重啟 IDEA”

1.3.7.2 配置 Smart Tomcat 插件

點擊右上角的 “Add Configuration” 選擇左側(cè)的 “Smart Tomcat”

配置Tomcat 在 Name 這一欄填寫一個名字(可以隨便寫), 在 Tomcat Server 這一欄選擇 Tomcat 所在的目錄. 其他的選項不必做出修改。 其中 Context Path 默認填寫的值是項目名稱 點擊 OK 右上角變成了 點擊綠色的三角號, IDEA 就會自動進行編譯, 部署, 啟動 Tomcat 的過程.

此時 Tomcat 日志就會輸出在 IDEA 的控制臺中, 可以看到現(xiàn)在就不再亂碼了.

訪問頁面 在瀏覽器中使用 http://127.0.0.1:8080/ServletHelloWorld/hello 訪問頁面. 路徑的對應關(guān)系.

1.3.7.2 Smart Tomcat 工作原理

Smart Tomcat 相當于是在 Tomcat 啟動的時候直接引用了項目中的 webapp 和 target 目錄.

1.3.7.3 Tomcat 的偽代碼

1.4 Servlet程序的運行原理

當瀏覽器給服務器發(fā)送HTTP請求的時候, Tomcat 作為 HTTP 服務器, 就可以接收到這個請求

詳細交互流程:

Tomcat 接收 HTTP請求

<1> 用戶在瀏覽器輸入一個 URL, 此時瀏覽器就會構(gòu)造一個 HTTP 請求 <2> 這個 HTTP 請求會經(jīng)過網(wǎng)絡(luò)協(xié)議棧逐層進行 封裝 成二進制的 bit 流, 最終通過物理層的硬件設(shè)備轉(zhuǎn)換成光信號/電信號傳輸出去. <3> 這些光信號/電信號通過互聯(lián)網(wǎng)上的一系列網(wǎng)絡(luò)設(shè)備, 最終到達目標主機(這個過程也需要網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層參與). <4> 目的主機收到這些光信號/電信號, 又會通過網(wǎng)絡(luò)協(xié)議棧逐層進行 分用, 層層解析, 最終還原成HTTP 請求. 并交給 Tomcat 進程進行處理(根據(jù)端口號確定進程) <5> Tomcat 通過 Socket 讀取到這個請求(一個字符串), 并按照 HTTP 請求的格式來解析這個請求。

<<1>>根據(jù)請求中的 Context Path 確定一個 webapp <<2>>通過 Servlet Path 確定一個具體的類 <<3>> 根據(jù)當前請求的方法(GET/POST/…)決定調(diào)用這個類的doGet / doPost方法,此時代碼中的doGet / doPost方法的第 一個參數(shù)HttpServletRequest就包含了這個HTTP請求的詳細信息。

根據(jù)請求計算響應

在doGet / doPost 方法中, 就執(zhí)行到其他代碼,這些代碼會根據(jù)請求中的一些信息, 來給 HttpServletResponse 對象設(shè)置一些屬性. 例如狀態(tài)碼, header, body 等.

返回響應

<1> doGet / doPost 執(zhí)行完畢后, Tomcat 就會自動把剛設(shè)置好的 HttpServletResponse 對象轉(zhuǎn)換成一個符合 HTTP 協(xié)議的字符串, 通過 Socket 把響應發(fā)送出去. <2>響應數(shù)據(jù)在服務器的主機上通過網(wǎng)絡(luò)協(xié)議棧層層 封裝, 最終又得到一個二進制的 bit 流, 通過物理層硬件設(shè)備轉(zhuǎn)換成光信號/電信號傳輸出去. <3>這些光信號/電信號通過互聯(lián)網(wǎng)上的一系列網(wǎng)絡(luò)設(shè)備, 最終到達瀏覽器所在的主機(這個過程也需要網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層參與). <4>主機收到這些光信號/電信號, 又會通過網(wǎng)絡(luò)協(xié)議棧逐層進行 分用, 層層解析, 最終還原成HTTP 響應, 并交給瀏覽器處理 <5>瀏覽器通過 Socket 讀到這個響應(一個字符串), 按照 HTTP 響應的格式來解析這個響應. 并且把body 中的數(shù)據(jù)按照一定的格式顯示在瀏覽器的界面上.

2. Servlet API詳解

2.1 HttpServlet

寫 Servlet 代碼的時候, 首先第一步就是先創(chuàng)建類繼承 HttpServlet, 并重寫其中的某些方法. 實際開發(fā)的時候主要重寫 doXXX 方法,這些方法的調(diào)用時機, 就稱為 “Servlet 生命周期” 很少會重寫 init / destory / service 。HttpServlet 的實例只是在程序啟動時創(chuàng)建一次. 而不是每次收到 HTTP 請求都重新創(chuàng)建實例,

2.1.1 HttpServlet 核心方法

2.1.2 簡單的前后端交互演示

創(chuàng)建一個新的maven項目,再pom.xml中添加servlet的依賴,在main包下創(chuàng)建一個webapp目錄創(chuàng)建 MethodServlet.java, 重寫 doGet 方法

@WebServlet("/method")

public class MethodServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.getWriter().write("GET response");

}

}

創(chuàng)建 testMethod.html,放到 webapp 目錄中

// 點擊按鈕觸發(fā)sedGet()函數(shù)

// 使用之前封裝好的Ajax函數(shù)來發(fā)送請求

4. 重新部署程序 5. 訪問:http://127.0.0.1:8080/ServletHelloWorld/testMethod.html頁面 6. 點擊 “發(fā)送 GET 請求” 按鈕, 即可在控制臺看到響應內(nèi)容

通過 Fiddler 抓包, 可以看到

當瀏覽器中輸入 URL 之后, 瀏覽器先給服務器發(fā)送了一個 HTTP GET 請求 當點擊 “發(fā)送 GET 請求” 按鈕, 瀏覽器又通過 ajax 給服務器發(fā)送了一個 HTTP GET 請求

如果在響應代碼里寫入中文,此處可能出現(xiàn)亂碼的情況

resp.getWriter().write("GET 響應");

可以在代碼中顯式的指定編碼方式

resp.setContentType("text/html; charset=utf-8");

resp.getWriter().write("GET 響應");

此時通過抓包可以看到響應中多了 Content-Type 字段。 內(nèi)部指定了編碼方式.瀏覽器看到這個字段就能夠正確解析中文了.

2.2 HttpServletRequest詳解

2.2.1 核心方法

2.2.2 代碼示例

2.2.2.1 打印請求信息

發(fā)起一個請求,將請求信息作為響應在瀏覽器中打印出來

創(chuàng)建 ShowRequest 類

@WebServlet("/showRequest")

public class ShowRequest extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// 設(shè)置響應數(shù)據(jù)類型及編碼格式

resp.setContentType("text/html; charset=utf-8");

// 獲取信息并加入換行符,拼接成字符串放到respBody中

StringBuilder respBody = new StringBuilder();

respBody.append(req.getProtocol());

respBody.append("
");

respBody.append(req.getMethod());

respBody.append("
");

respBody.append(req.getRequestURI());

respBody.append("
");

respBody.append(req.getContextPath());

respBody.append("
");

respBody.append(req.getQueryString());

respBody.append("
");

respBody.append("

headers:

");

// 從請求對象req中獲取所有請求頭的名稱,放入枚舉集合 headernames中

Enumeration headerNames = req.getHeaderNames();

while (headerNames.hasMoreElements()) {

// 遍歷枚舉集合中的請求頭字符串加入換行符并拼接到respBody中

String headerName = headerNames.nextElement();

respBody.append(headerName + " ");

respBody.append(req.getHeader(headerName));

respBody.append("
");

}

// 返回響應

resp.getWriter().write(respBody.toString());

}

}

部署程序在瀏覽器通過 URL http://127.0.0.1:8080/ServletHelloWorld/showRequest 訪問, 可以看到

2.2.2.2 獲取 GET 請求中的參數(shù)

GET 請求中的參數(shù)一般都是通過 query string 傳遞給服務器的. 形如:

https://v.bedu.vip/personInf/student?userId=1111&classId=100

此時瀏覽器通過 query string 給服務器傳遞了兩個參數(shù), userId 和 classId, 值分別是 1111 和 100,在服務器端就可以通過 getParameter 來獲取到參數(shù)的值。getParameter 的返回值類型為 String. 必要的時候需要手動把 String 轉(zhuǎn)成 int.

創(chuàng)建 GetParameter 類

@WebServlet("/getParameter")

public class GetParameter extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.setContentType("text/html; charset=utf-8");

String userId = req.getParameter("userId");

String classId = req.getParameter("classId");

resp.getWriter().write("userId: " + userId + ", " + "classId: " + classId);

}

}

重新部署程序,在瀏覽器中訪問:

http://127.0.0.1:8080/ServletHelloWorld/getParameter

可以看到當沒有 query string的時候, getParameter 獲取的值為 null. 4. 再次訪問:

http://127.0.0.1:8080/ServletHelloWorld/getParameter?userId=123&classId=456

可以看到,服務器已經(jīng)獲取到客戶端傳遞過來的參數(shù)并返回

2.2.2.3 獲取 POST 請求中的參數(shù)(body參數(shù)格式為form表單)

POST 請求的參數(shù)一般通過 body 傳遞給服務器. body 中的數(shù)據(jù)格式有很多種. 如果是采用 form 表單的形式, 仍然可以通過 getParameter 獲取參數(shù)的值.

創(chuàng)建類 PostParameter

@WebServlet("/postParameter")

public class PostParameter extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.setContentType("text/html; charset=utf-8");

String userId = req.getParameter("userId");

String classId = req.getParameter("classId");

resp.getWriter().write("userId: " + userId + ", " + "classId: " +

classId);

}

}

創(chuàng)建 testPost.html, 放到 webapp 目錄中

重新部署程序訪問URL

http://127.0.0.1:8080/ServletHelloWorld/testPost.html

可以看到 HTML 在輸入框中輸入內(nèi)容, 點擊提交,可以看到跳轉(zhuǎn)到了新的頁面, 并顯示出了剛剛傳入的數(shù)據(jù).

此時通過抓包可以看到, form 表單構(gòu)造的 body 數(shù)據(jù)的格式為:

2.2.2.4 獲取 POST 請求中的參數(shù)(body為json格式字符串)

創(chuàng)建 PostParameterJson 類

@WebServlet("/postParameterJson")

public class PostParameterJson extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.setContentType("application/json;charset=utf-8");

String body = readBody(req);

resp.getWriter().write(body);

}

private String readBody(HttpServletRequest req) throws IOException {

int contentLength = req.getContentLength(); // 獲取請求體的內(nèi)容長度

byte[] buffer = new byte[contentLength]; // 創(chuàng)建了一個與內(nèi)容長度相等的字節(jié)數(shù)組

InputStream inputStream = req.getInputStream(); // 獲取請求體的輸入流對象

inputStream.read(buffer); // 從輸入流中讀取數(shù)據(jù)填充到buffer數(shù)組中

return new String(buffer, "utf-8"); // 將字節(jié)數(shù)組轉(zhuǎn)換成字符串

}

}

創(chuàng)建 testPostJson.html

在瀏覽器中URL

http://127.0.0.1:8080/ServletHelloWorld/testPostJson.html

可以看到html頁面 點擊按鈕, 則瀏覽器就會給服務器發(fā)送一個 POST 請求, body 中帶有 JSON 格式

抓包觀察

服務器收到這個結(jié)果之后, 又把數(shù)據(jù)返回了回去, 瀏覽器中看到了響應結(jié)果. 目前服務器拿到的 JSON 數(shù)據(jù)仍然是一個整體的 String 類型, 如果要想獲取到 userId 和classId 的具體值, 還需要搭配 JSON 庫進一步解析.

2.2.2.5 獲取 POST 請求中的參數(shù)(JSON解析)

通過ObjectMapper 對象的 readValue 方法把一個 JSON 字符串轉(zhuǎn)成 JsonData 對象 通過ObjectMapper 對象的 writeValueAsString 方法把一個 Java 對象轉(zhuǎn)成 JSON 格式字符串

引入 Jackson 這個庫, 進行 JSON 解析.

在中央倉庫)中搜索 Jackson, 選擇 JackSon Databind 依賴配置添加到 pom.xml 中

com.fasterxml.jackson.core

jackson-databind

2.12.3

修改PostParameterJson 代碼

// 創(chuàng)建一個新的類表示 JSON 數(shù)據(jù), 屬性的名字需要和 JSON 字符串中的 key 一致.

class JsonData {

public String userId;

public String classId;

}

@WebServlet("/postParameterJson")

public class PostParameterJson extends HttpServlet {

@Override

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

resp.setContentType("text/html;charset=utf-8");

String body = readBody(req);

// 創(chuàng)建 ObjectMapper 對象. 這個是 Jackson 中的核心類.

ObjectMapper objectMapper = new ObjectMapper();

// 通過ObjectMapper 對象的 readValue 方法把一個 JSON 字符串轉(zhuǎn)成 JsonData 對象

// 通過ObjectMapper 對象的 writeValueAsString 方法把一個 Java 對象轉(zhuǎn)成 JSON 格式字符串

// JsonData 這個類用來表示解析之后生成的 JSON 對象. 這個類的屬性的名字和類型要和 JSON 字符串的 key 相對應

// readValue 的第二個參數(shù)為 JsonData 的 類對象. 通過這個類對象, 在 readValue 的內(nèi)部就可以借助

// 反射機制來構(gòu)造出 JsonData 對象, 并且根據(jù) JSON 中key 的名字, 把對應的 value 賦值給 JsonData 的對應字段

JsonData jsonData = objectMapper.readValue(body, JsonData.class);

resp.getWriter().write("userId: " + jsonData.userId + ", " + "classId: " + jsonData.classId);

}

private String readBody(HttpServletRequest req) throws IOException {

int contentLength = req.getContentLength();

byte[] buffer = new byte[contentLength];

InputStream inputStream = req.getInputStream();

inputStream.read(buffer);

return new String(buffer, "utf-8");

}

}

2.3 HttpServletResponse詳解

Servlet 中的 doXXX 方法的目的就是根據(jù)請求計算得到相應, 然后把響應的數(shù)據(jù)設(shè)置到HttpServletResponse 對象中. 然后 Tomcat 就會把這個 HttpServletResponse 對象按照 HTTP 協(xié)議的格式, 轉(zhuǎn)成一個字符串, 并通過Socket 寫回給瀏覽器.

2.3.1 核心方法

響應對象是服務器要返回給瀏覽器的內(nèi)容, 這里的重要信息都是程序猿設(shè)置的. 因此上面的方 法都是 “寫” 方法。狀態(tài)碼/響應頭的設(shè)置要放到 getWriter / getOutputStream 之前. 否則可能設(shè)置失效。

2.3.2 代碼示例

2.3.2.1 設(shè)置狀態(tài)碼

實現(xiàn)一個程序, 用戶在瀏覽器通過參數(shù)指定要返回響應的狀態(tài)碼.

創(chuàng)建 StatusServlet 類

@WebServlet("/statusServlet")

public class StatusServlet extends HttpServlet {

@Override

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

String statusString = req.getParameter("status");

if (statusString != null) {

resp.setStatus(Integer.parseInt(statusString));

}

resp.getWriter().write("status: " + statusString);

}

}

部署程序在瀏覽器中訪問 URL

http://127.0.0.1:8080/ServletHelloWorld/statusServlet?

可以看到

抓包結(jié)果 變換不同的 status 的值, 就可以看到不同的響應結(jié)果.

2.3.2.2 自動刷新

實現(xiàn)一個程序, 讓瀏覽器每秒鐘自動刷新一次. 并顯示當前的時間戳. 通過 HTTP 響應報頭中的 Refresh 字段, 可以控制瀏覽器自動刷新的時機. 通過 Date 類的 getTime 方法可以獲取到當前時刻的毫秒級時間戳.

創(chuàng)建 AutoRefreshServlet 類

@WebServlet("/autoRefreshServlet")

public class AutoRefreshServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.setHeader("Refresh", "1");

long timeStamp = new Date().getTime();

resp.getWriter().write("timeStamp: " + timeStamp);

}

}

部署程序訪問 URL

http://127.0.0.1:8080/ServletHelloWorld/autoRefreshServlet

可以看到瀏覽器每秒鐘自動刷新一次.

抓包結(jié)果

2.3.2.3 重定向

實現(xiàn)一個程序, 返回一個重定向 HTTP 響應, 自動跳轉(zhuǎn)到另外一個頁面.

創(chuàng)建 RedirectServlet 類

@WebServlet("/redirectServlet")

public class RedirectServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.sendRedirect("http://www.sogou.com");

}

}

部署程序訪問 URL

http://127.0.0.1:8080/ServletHelloWorld/redirectServlet

可以看到頁面自動跳轉(zhuǎn)到 搜狗主頁 了.

抓包結(jié)果

柚子快報激活碼778899分享:Servlet 詳解

http://yzkb.51969.com/

相關(guān)鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19118653.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄