day47_servlet

今日內容

0 復習昨日

1 接收請求

2 處理響應

0 復習昨日

HTTP請求中

  • 請求行
    • 請求方法,請求路徑
  • 請求頭
    • 頁面信息
  • 請求正文
    • 請求的數據

HTTP響應中

  • 響應行
    • 狀態碼 信息
  • 響應頭
    • 頁面信息
  • 響應正文
    • 要給瀏覽器的內容

1 接收請求

瀏覽器發出請求,經過web.xml映射匹配,找到Servlet對應的方法(doGet/doPost),接收請求數據,可以接收請求中的請求行,請求頭,請求正文

  • 瀏覽器發出請求
    • a/form/ajax
  • 經過web.xml映射匹配
    • web.xml(8行代碼)
  • doGet/doPost
    • 前端是get請求,就重寫doGet
    • 前端是post請求,就重寫doPost
  • 如何接收數據
    • 通過HttpServletRequest對象處理

需求: html頁面中寫一個表單,發送請求,后臺服務器接收所有請求數據

1.1 編寫頁面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--表單提交數據,一定要有name屬性,后臺服務器,就是name獲得值------------------------點擊提交,會以method指定的請求方式,將數據發送到action指定后臺服務器action路徑,建議是 /項目名/路徑-->
<form action="/day47/req" method="get">用戶名 <input type="text" name="username"><br>密碼 <input type="password" name="password"><br>性別 <input type="radio" name="sex" value="1"><input type="radio" name="sex" value="2"><br>技能<input type="checkbox" name="skill" value="Java">Java<input type="checkbox" name="skill" value="JavaScript">JavaScript<input type="checkbox" name="skill" value="SSM">SSM<br>學歷<select name="xueli"><option value="gaozhong">高中</option><option value="dazhuan">大專</option><option value="benke">本科</option></select><input type="submit" value="提交">
</form></body>
</html>

1.2 編寫Servlet

package com.qf.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;/*** --- 天道酬勤 ---** @author QiuShiju* @desc*/
public class MyServlet extends HttpServlet {/**** @param req 處理請求的對象* @param resp 處理響應的對象* @throws ServletException* @throws IOException*/@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 請求方法String method = req.getMethod( );System.out.println("method = "+method);// 獲得請求路徑String requestURI = req.getRequestURI( );// 資源標識符StringBuffer requestURL = req.getRequestURL( ); // 資源定位符System.out.println("requestURI = " + requestURI);System.out.println("requestURL = " + requestURL);System.out.println("--------------------------------------" );// 接收請求頭【了解】String host = req.getHeader("Host");System.out.println("host = " + host);Enumeration<String> keys = req.getHeaderNames( );while (keys.hasMoreElements()) {String key = keys.nextElement( );String value = req.getHeader(key);System.out.println(key + " : " + value);}System.out.println("--------------------------------------" );// 接收請求數據【重點】// 接收請求數據,無論單選,還是下拉框等都是getParameter(name);// name是前端標簽name屬性的值String username = req.getParameter("username");String password = req.getParameter("password");String sex = req.getParameter("sex");String xueli = req.getParameter("xueli");System.out.println("username = " + username);System.out.println("password = " + password);System.out.println("sex = " + sex);System.out.println("xueli = " + xueli);// 復選框// 如果一個沒選,數組沒有創建,是null,不是長度為0String[] skills = req.getParameterValues("skill");// 空指針異常,就是使用空對象調用屬性和方法for (int i = 0; skills != null && i < skills.length; i++) {System.out.println("skill["+(i+1)+"] = " + skills[i]);}}
}

1.3 配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><servlet><servlet-name>servlet</servlet-name><servlet-class>com.qf.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>servlet</servlet-name><!--此處不需要寫項目名,只需要寫請求路徑--><url-pattern>/req</url-pattern></servlet-mapping>
</web-app>

1.4 部署項目

1.5 啟動測試

2 做出響應

做出響應是通過HttpServletResponse對象

  • 響應行
    • 狀態碼
  • 響應頭
    • 響應信息,其中有一個cookie后續會用到,以及編碼格式
  • 響應正文
    • 向瀏覽器展現的內容
// 響應狀態碼// 200 是成功, 302 重定向 404 資源未找到 500 服務器錯誤// 一般不用設置,為自動響應// resp.setStatus(200);// 設置響應頭// resp.setHeader("key","value");// 指定瀏覽器如何解析響應的內容,解決響應亂碼resp.setContentType("text/html;charset=utf-8");// 向瀏覽器響應內容(響應正文)PrintWriter out = resp.getWriter( );out.write("<html>");out.write("     <head>");out.write("         <title>這是響應</title>");out.write("     </head>");out.write("     <body>");out.write("         <div style='background-color:red;width:500px;height:500px;font-size:50px'>");out.write("         這是響應,歡迎"+username);out.write("         </div>");out.write("     </body>");out.write("</html>");

3 亂碼解決

請求亂碼

 req.setCharacterEncoding("utf-8");

響應亂碼

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

作業

畫javaweb開發流程圖
畫servlet執行圖
---------------------
前端html頁面用戶名+密碼,
后端servlet接收數據
數據庫根據數據查詢用戶
查詢到,頁面歡迎語
查詢不到,頁面展現登錄失敗信息-------------------------
復習JDBC
復習HTML(表單/表格) JS(語法/函數) JQuery(DOM)  Ajax(語法模板)

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

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

相關文章

STL容器之map和set

map和set ? c98支持的是單參數的隱式類型轉換&#xff0c;而c11支持多參數的隱式類型轉換&#xff1b; 1.map和set的使用 1.1set ? set實現key值不允許修改&#xff0c;是將iterator轉變成const_iterator&#xff1b;可以對同一個類型typedef成兩個不同的自定義標識符。即…

Rocky 9 安裝 R-CytoTRACE

官網給出的詳細指南&#xff0c;只是可能大家打不開或者懶得去看E文。 第一步&#xff0c;下載CytoTRACE安裝包。 wget https://cytotrace.stanford.edu/CytoTRACE_0.3.3.tar.gz 第二步&#xff0c;打開R或者Rstudio-server # 安裝依賴包 if (!requireNamespace("Bioc…

在vue中$nextTick 原理及作用

在vue中$nextTick 原理及作用 Vue 的 nextTick 其本質是對 JavaScript 執行原理 EventLoop 的一種應用。 nextTick 的核心是利用了如 Promise 、MutationObserver、setImmediate、setTimeout的原生 JavaScript 方法來模擬對應的微/宏任務的實現&#xff0c;本質是為了利用 Java…

每周AI新聞(2024年第9周)微軟與Mistral AI達成合作 | 谷歌發11B基礎世界模型 | 傳蘋果放棄電動汽車制造轉向生成式AI

這里是陌小北&#xff0c;一個正在研究硅基生命的碳基生命。正在努力成為寫代碼的里面背詩最多的&#xff0c;背詩的里面最會寫段子的&#xff0c;寫段子的里面代碼寫得最好的…廚子。 每周日解讀每周AI大事件。 大廠動向 【1】微軟與Mistral AI達成合作 微軟官宣與法國生成…

視頻云平臺——搭建SRS5平臺支持GB28181視頻流的推送

&#x1f4e2;歡迎點贊 &#xff1a;&#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff0c;賜人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原創&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我們面對的不僅…

謹用ArrayList中的subList方法

謹用ArrayList中的subList方法 規范一&#xff1a; ArrayList 的 subList 結果不可強轉成 ArrayList&#xff0c;否則會拋出 ClassCastException 異常&#xff1a; public static void test7() {List<Integer> list new ArrayList<>();list.add(1);list.add(2);…

JavaWeb—— SpringBootWeb綜合案例(登錄功能、登錄校驗、異常處理)

案例-登錄認證 目錄 案例-登錄認證1. 登錄功能1.1 需求1.2 接口文檔1.3 思路分析1.4 功能開發1.5 測試 2. 登錄校驗2.1 問題分析2.2 會話技術2.2.1 會話技術介紹2.2.2 會話跟蹤方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技術 2.3 JWT令牌2.3.1…

程序員眼中的“祖傳代碼”

引言 在IT界&#xff0c;特別是在Java項目中&#xff0c;“祖傳代碼”通常指的是那些經過長時間積累、由多位開發者共同維護、且蘊含深厚技術沉淀的代碼片段或模塊。這些代碼可能存在于項目的核心模塊&#xff0c;也可能是一些輔助性的工具類。它們承載著項目的歷史&#xff0…

Matlab 多項式插值(曲線擬合)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 由于對曲線擬合有些興趣,這里就找了一些資料從最基本的方法來看一下曲線擬合的效果: 二、實現代碼 % **********

Vue.js中的路由導航守衛和其使用方法

Vue.js 中的路由導航守衛是 Vue Router 提供的一套機制&#xff0c;用于在路由切換的過程中執行自定義代碼邏輯&#xff0c;包括但不限于權限驗證、頁面滾動位置保存、加載數據等。它分為三種類型&#xff1a; 全局前置守衛 (Global beforeEach Guard) 全局前置守衛應用在整個…

python科學計算庫之Numpy庫的使用的簡單習題

Numpy庫 Numpy&#xff08;Numerical Python的縮寫&#xff09;是一個開源的Python庫&#xff0c;用于進行科學計算。它提供了一個高性能的多維數組對象&#xff08;ndarray&#xff09;及用于處理這些數組的各種工具和函數。由于其高效和靈活的數據結構以及豐富的功能&#x…

Google 地圖 API 教程--干貨(1/2)

Google Maps API 教程 在本教程中我們將學習如何使用谷歌地圖API V3創建交互式地圖。 什么是 API? API = 應用程序編程接口(Application programming interface)。 API(Application Programming Interface,應用編程接口)其實就是操作系統留給應用程序的一個調用接口,…

【d34】【Java】【力扣】27. 移除元素

題目 給你一個數組 nums 和一個值 val&#xff0c;你需要 原地 移除所有數值等于 val 的元素&#xff0c;并返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須僅使用 O(1) 額外空間并 原地 修改輸入數組。 元素的順序可以改變。你不需要考慮數組中超出新長…

案例介紹:汽車售后服務網絡構建與信息抽取技術應用(開源)

一、引言 在當今競爭激烈的汽車行業中&#xff0c;售后服務的質量已成為品牌成功的關鍵因素之一。作為一位經驗豐富的項目經理&#xff0c;我曾參與構建一個全面的汽車售后服務網絡&#xff0c;旨在為客戶提供無縫的維修、保養和配件更換服務。這個項目的核心目標是通過高效的…

spring、springmvc、springboot框架的介紹

前言 我們已經學過Spring&#xff0c;SpringMVC&#xff0c;SpringBoot了&#xff0c;那這三者之間有沒有聯系或者區別呢&#xff1f; spring是一個一站式的輕量級java開發的框架&#xff0c;那我們剛開始使用spring的時候&#xff0c;是需要配置很多的配置文件以及繁瑣的過程…

狀態機實現雙擊、短按、長按等按鍵識別檢測算法

1、按鍵識別算法的作用 按鍵識別算法在不同的技術和應用背景下有不同的作用&#xff0c;但其核心目標都是準確、可靠地檢測和區分用戶通過物理或虛擬按鍵所執行的操作。按鍵識別算法在各類電子設備及系統中起到至關重要的作用&#xff0c;它確保了人機交互的有效性和準確性&…

Vue前端+快速入門【詳解】

目錄 1.Vue概述 2. 快速入門 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript開發存在的問題&#xff1a;操作麻煩&#xff0c;耦合性強 為了實現html標簽與數據的解耦&#xff0c;前端開發中提供了MVVM思想&#xff1a;即Model-Vi…

Mysql-主從架構篇(一主多從,半同步案例搭建)

主從架構 主從架構有什么用&#xff1f; 通過搭建MySQL主從集群&#xff0c;可以緩解MySQL的數據存儲以及訪問的壓力。 數據安全&#xff08;主備&#xff09;&#xff1a;給主服務增加一個數據備份。基于這個目的&#xff0c;可以搭建主從架構&#xff0c;或者也可以基于主…

GO語言學習筆記(與Java的比較學習)(九)

讀寫數據 讀取用戶的輸入 最簡單的辦法是使用 fmt 包提供的 Scan 和 Sscan 開頭的函數。 Scanln 掃描來自標準輸入的文本&#xff0c;將空格分隔的值依次存放到后續的參數內&#xff0c;直到碰到換行。Scanf 與其類似&#xff0c;除了 Scanf 的第一個參數用作格式字符串&…

大數據開發(Java面試真題-卷三)

大數據開發&#xff08;Java面試真題&#xff09; 1、簡要介紹以下JVM有幾種垃圾收集器&#xff1f;2、Java中Synchronized的底層原理是什么&#xff1f;3、Java String為什么是不可變的&#xff1f;為什么要設計成不可變&#xff1f;4、泛型&#xff1f;5、常用的反射方法&…