自動化測試開發

4、Servlet模型(一)

Servlet的編寫、訪問過程

Servlet簡介

  • ServletJava Servlet的簡稱,是小服務程序或服務連接器,是用Java編寫的服務器端程序,主要功能在于獲取請求,返回響應
  • 廣義:一個Servlet是一個Java語言編寫的類,提供請求響應式的編程模型
  • 狹義:Servlet是指Java語言實現的一個接口

編寫部署Servlet程序

編寫源文件
  • 編寫類實現(implements)

javax.servlet.Servlet 接口,在類中實現

javax.servlet.Servlet 接口中的方法

編寫類文件
  • 通過Javac命令編譯寫好的源文件
  • 注意:-cp參數的使用
部署程序
  • 將編譯生成字節碼(.class)文件復制到“號站點號/WEB-INF/classes/"目錄,需要注意目錄結構
  • 配置web.xml中的<servlet>、<servlet-mapping>節點

編寫部署Servlet 程序步驟

1、編寫Servlet程序(實現Servlet接口)

2、編譯Servlet源文件,生成字節碼文件

注意:

  • DOS窗口中進入Servlet文件所在目錄
  • -cp參數導入需要的jar包

javac -cp .;lib\*Hello.java

3、部署

Tomcatwebapps目錄下創建項目目錄

在項目目錄下創建WEB-INF目錄

WEB-INF目錄下放置web.xml配置文件、classes目錄和lib目錄

  • classes目錄中是步驟2中生成的字節碼文件
  • lib目錄中是用到的jar

4、運行
  • 啟動Tomcat
  • 訪問Servlet

Servlet處理請求,返回響應

http://localhost:8080/MyWebsite/hello

WEB-INF目錄下web.xml

<servlet>

????? <servlet-name>helloWorld</servlet-name>

????? <servlet-class>xx.xx.HelloServlet</servlet-class>

</servlet>

<servlet-mapping>

????? <servlet-name>helloWorld</servlet-name>

????? <url-pattern>/hello</url-pattern>

</servlet-mapping>

Servlet中的請求與響應

接收請求

Tomcat啟動后Web容器首先做的工作

  • 接收到請求后服務器轉交請求給Web容器
  • Web容器產生請求對象和響應對象

  • 調用Servletservice()方法,并將請求和響應對象作為參數傳入該方法
  • service方法根據請求方式調用doXXX()方法

返回響應

  • doXXX()方法中使用請求對象獲取請求信息,響應對象返回響應結果(PrintWriter對象)
  • 銷毀請求、響應對象

接收請求

  • HttpServletRequest接口以參數的形式傳遞到service方法里
  • HttpServletservice方法

  • 受保護的service()方法根據請求類型調用doXXX()方法
  • 所以一般要重寫doXXX()方法

解析請求

getParameter()方法

  • href="RegistServlet?userName=zs
  • 表單中的name屬性值的獲取

  • request.getHeaderNames();
  • request.getHeader(“host”);//服務器主機
  • request.getRemoteHost();//客戶端IP
  • request.setCharacterEncoding("UTF-8");

Enumeration e = request.getHeaderNames();

while(e.hasMoreElements()) {

??? System.out.println(e.nextElement());

}

Attribute參數

  • setAttribute() :設置參數
  • getAttribute() :獲取某個參數的值

HttpServletResponse接口

protected void doGet(HttpServletRequest request, HttpServletResponse response)

  • getWriter()方法,返回的是一個輸出流
  • response.setContentType("text/html");

編碼

  • response.setCharacterEncoding("UTF-8");
  • response.setContentType ("text/html;charset=UTF-8");

示例:

Servlet中請求數據的傳遞、請求轉發與請求重定向

Servlet應用執行過程--請求轉發

Servlet應用執行過程--重定向

請求重定向、請求轉發

請求轉發

  • request.getRequestDispatcher(" targetURL").forward(request, response);

請求重定向

  • response.sendRedirect("targetURL")

請求數據的傳遞

請求數據的傳遞

  • request.setAttribute(String,Object)
  • request.getAttribute(String),返回Object

注意:

請求轉發可以共享參數

  • request.getParameter()
  • request.getAttribute()

請求重定向無法共享參數

請求重定向、請求轉發區別

本質

  • 請求轉發:一次請求
  • 請求重定向:兩次請求

速度

  • 請求轉發 > 請求重定向

Attribute參數

  • 請求轉發可共享參數
  • 請求重定向不可共享參數

地址欄??

  • 請求轉發:不變
  • 請求重定向:變

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896720.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896720.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

24、Java 集合

十一章&#xff1a;Java 集合 一、集合框架的概述 1、集合&#xff1a;就像一個容器&#xff0c;可以動態的把多個對象的引用放入容器中。簡稱 Java 容器 ? 說明&#xff1a;此時的存儲&#xff0c;主要指的是內存層面的存儲&#xff0c;不涉及到持續化的存儲&#xff08;.t…

1114棋盤問題acwing(深度優先搜索)

題目描述 在一個給定形狀的棋盤&#xff08;形狀可能是不規則的&#xff09;上面擺放棋子&#xff0c;棋子沒有區別。 要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列&#xff0c;請編程求解對于給定形狀和大小的棋盤&#xff0c;擺放 kk 個棋子的所有可行的擺放…

logback日志輸出配置范例

logback日志輸出配置范例 在wutool中&#xff0c;提供了logback日志輸出配置范例&#xff0c;實現日志文件大小限制、滾動覆蓋策略、定時清理等功能。 關于wutool wutool是一個java代碼片段收集庫&#xff0c;針對特定場景提供輕量解決方案&#xff0c;只要按需選擇代碼片段…

測試人員如何驅動開發?

軟件開發中測試人員的作用正在從傳統的缺陷發現者演變為開發過程的主動推動者。特別是在敏捷和 DevSecOps 環境中&#xff0c;測試人員如何通過參與需求、提供反饋和推動自動化來驅動開發&#xff0c;成為一個值得探討的話題。本文將詳細分析測試人員驅動開發的具體方式&#x…

大模型語料庫的構建過程 包括知識圖譜構建 垂直知識圖譜構建 輸入到sql構建 輸入到cypher構建 通過智能體管理數據生產組件

以下是大模型語料庫的構建過程&#xff1a; 一、文檔切分語料庫構建 數據來源確定&#xff1a; 首先&#xff0c;需要確定語料庫的數據來源。這些來源可以是多種多樣的&#xff0c;包括但不限于&#xff1a; 網絡資源&#xff1a;利用網絡爬蟲技術從各種網站&#xff08;如新聞…

oracle游標為什么沒有共享,統計一下原因

-- Script Code為什么沒共享 define sql_id bs391f0yq5tpw;set serveroutput onDECLAREv_count number;v_sql varchar2(500);v_sql_id varchar2(30) : &sql_id; BEGINv_sql_id : lower(v_sql_id);dbms_output.put_line(chr(13)||chr(10));dbms_output.put_line(sql_id: ||…

哈希碰撞攻防戰——深入淺出Map/Set的底層實現

各位看官早安午安晚安呀 如果您覺得這篇文章對您有幫助的話 歡迎您一鍵三連&#xff0c;小編盡全力做到更好 歡迎您分享給更多人哦 今天我們來學習Map/Set的底層實現 目錄 問題一&#xff1a;hash會出現負數&#xff1f;數組越界 一&#xff1a;什么是二叉搜索樹&#xff1f…

win10使用haneWIN NFS Server掛載NFS v2服務,u-boot通過NFS下載zImage

1. haneWIN NFS Server掛載NFS v2服務 https://www.hanewin.net/nfs-e.htm netstat -ano | findstr ":2049"TCP 0.0.0.0:2049 0.0.0.0:0 LISTENING 3824UDP 0.0.0.0:2049 *:* 38…

Linux文件系統與目錄結構

Linux系統中一切皆文件 bin 是Binary 的縮寫, 這個目錄存放著最經常使用的命令 boot 這里存放的是啟動Linux時使用的一些核心文件&#xff0c;包括一些連接文件以及鏡像文件&#xff0c;自 己的安裝別放這里。 cdrom 這個目錄通常專門用來掛載光盤。當系統剛安裝時&#x…

一文詳解基于NarrotoAI的短劇短視頻自動解說、混剪AI平臺搭建

背景 前陣給孩子做電子相冊學了點剪輯技術&#xff0c;就想湊個熱鬧剪剪短劇玩玩&#xff0c;一是學以 致用&#xff0c;再者也好奇短劇創作為啥這么火&#xff0c;跟個風。 初步了解情況后&#xff0c;發現我的剪輯技術已經落后了&#xff0c;行家們玩的主要是解說 &#xf…

計算機畢業設計Hadoop+Spark+DeepSeek-R1大模型音樂推薦系統 音樂數據分析 音樂可視化 音樂爬蟲 知識圖譜 大數據畢業設計

溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 作者簡介&#xff1a;Java領…

《Canvas修仙傳·第三重天金丹境(下集)》 ——量子煙花與物理宇宙的混沌法則

各位道友久候&#xff01;上集我們煉就了《靈蛇奇譚》的元神&#xff0c;今日將開啟Canvas修仙路上最絢麗的篇章——掌控微觀粒子的創世之力&#xff01;(&#xff89;≧?≦)&#xff89; 章前黑話詞典 &#x1f50d; 量子境術語表&#xff1a; 對象池&#xff08;Object Po…

c++ namespace名字域空間

在C中&#xff0c;namespace 是一個非常重要的概念&#xff0c;用于組織代碼&#xff0c;避免名稱沖突。namespace&#xff08;命名空間&#xff09;是一個邏輯上的代碼組織單元&#xff0c;用于將代碼&#xff08;類、函數、變量等&#xff09;分組&#xff0c;從而避免命名沖…

獲取阿里云OSS預簽名URL下載(java)

1,引入依賴 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId> </dependency> <!--AliSms--> <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-s…

中間件專欄之Redis篇——Redis的基本IO網絡模型

Redis主要采用的是單線程的事件驅動模型&#xff0c;通過I/O多路復用來實現高效的并發請求處理。 一、單線程模型 Redis 采用 單線程模型 來處理所有請求&#xff0c;包括網絡 I/O 和命令執行。雖然現代多核 CPU 能夠并行處理任務&#xff0c;但 Redis 的設計原則是盡量避免多…

Python 線程同步

Python 線程同步 Python 線程同步 Python 線程同步 線程同步是一種確保兩個或多個線程不同時執行同一塊共享代碼的機制。共享塊中的代碼通常是訪問共享數據或資源&#xff0c;這種共享塊被稱作臨界區。這個概念可以用下面的圖清晰地表示出來&#xff1a; #mermaid-svg-2TivIuc…

Linux操作系統5-進程信號3(信號的捕捉流程,信號集,sigaction)

上篇文章&#xff1a;Linux操作系統5-進程信號3&#xff08;信號的保存, 用戶態與內核態&#xff0c;內核空間&#xff09;-CSDN博客 本篇Gitee倉庫&#xff1a;???????myLerningCode/l26 橘子真甜/Linux操作系統與網絡編程學習 - 碼云 - 開源中國 (gitee.com) 本篇重點…

【機器學習chp10】降維——(核化)PCA + MDS + lsomap + 拉普拉斯特征映射 + t-NSE + UMAP

目錄 一、降維的意義與本質 1、意義 2、本質 3、常見降維方法 &#xff08;1&#xff09;線性降維 &#xff08;2&#xff09;非線性降維 二、基于重構的降維 1、PCA 2、核化PCA &#xff08;1&#xff09;實現過程 步驟一&#xff1a;數據映射與核函數定義 步驟二…

代碼的解讀——自用

代碼來自&#xff1a;https://github.com/ChuHan89/WSSS-Tissue?tabreadme-ov-file 借助了一些人工智能 run_pipeline.sh 功能總結 該腳本用于執行一個 弱監督語義分割&#xff08;WSSS&#xff09; 的完整流程&#xff0c;包含三個階段&#xff1a; Stage1&#xff1a;訓…

Powershell和BTEQ工具實現帶多組參數和標簽的Teradata數據庫批量數據導出程序

設計一個基于多個帶標簽SQL模板作為配置文件和多組參數的Powershell代碼程序和BTEQ工具&#xff0c;實現根據不同的輸入參數&#xff0c;自動批量地將Teradata數據庫的數據導出為CSV文件到指定目錄上&#xff0c;標簽和多個參數&#xff08;以“_”分割&#xff09;為組成導出數…