王振國老師整理
HttpServletRequest 類
HttpServletRequest 類有什麼作用?
每次只要有請求進入 Tomcat 服務器,Tomcat 服務器就會把請求過來的 HTTP 協議信息解析好封裝到 Request 對象中。 然後傳遞到 service 方法(doGet 和 doPost)中給我們使用。我們可以通過 HttpServletRequest 對象,獲取到所有請求的 信息。
HttpServletRequest 類的常用方法
- getRequestURI() 獲取請求的資源路徑
- getRequestURL() 獲取請求的統一資源定位符(絕對路徑)
- getRemoteHost() 獲取客戶端的 ip 地址
- getHeader() 獲取請求頭
- getParameter() 獲取請求的參數
- getParameterValues() 獲取請求的參數(多個值的時候使用)
- getMethod() 獲取請求的方式 GET 或 POST
- setAttribute(key, value); 設置域數據
- getAttribute(key); 獲取域數據
- getRequestDispatcher() 獲取請求轉發對象
doGet 請求的中文亂碼解決
// 獲取請求參數
String username = req.getParameter("username");
//1 先以 iso8859-1 進行編碼
//2 再以 utf-8 進行解碼
username = new String(username.getBytes("iso-8859-1"), "UTF-8");
POST 請求的中文亂碼解決
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
// 設置請求體的字符集爲 UTF-8,從而解決 post 請求的中文亂碼問題
req.setCharacterEncoding("UTF-8");
System.out.println("-------------doPost------------");
// 獲取請求參數
String username=req.getParameter("username");
String password=req.getParameter("password");
String[]hobby=req.getParameterValues("hobby");
System.out.println("用戶名:"+username);
System.out.println("密碼:"+password);
System.out.println("興趣愛好:"+Arrays.asList(hobby));
}
請求的轉發
- 請求轉發是指,服務器收到請求後,從一次資源跳轉到另一個資源的操作叫請求轉發。
base 標籤的作用
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--base 標籤設置頁面相對路徑工作時參照的地址
href 屬性就是參數的地址值
-->
<base href="http://localhost:8080/07_servlet/a/b/">
</head>
<body>
這是 a 下的 b 下的 c.html 頁面<br/>
<a href="../../index.html">跳回首頁</a><br/>
</body>
</html>
Web 中的相對路徑和絕對路徑
在 javaWeb 中,路徑分爲相對路徑和絕對路徑兩種:
相對路徑:
- . 表示當前目錄
- .. 表示上一級目錄 資源名 表示當前目錄/資源名
絕對路徑:
- http://ip:port/工程路徑/資源路徑
在實際開發中,路徑都使用絕對路徑,而不簡單的使用相對路徑。
- 絕對路徑
- base+相對2
web 中 / 斜槓的不同意義
在 web 中 / 斜槓 是一種絕對路徑。
/ 斜槓 如果被瀏覽器解析,得到的地址是:http://ip:port/
<a href="/">斜槓</a>
/ 斜槓 如果被服務器解析,得到的地址是:http://ip:port/工程路徑
- /servlet1
- servletContext.getRealPath(“/”);
- request.getRequestDispatcher(“/”);
特殊情況: response.sendRediect(“/”); 把斜槓發送給瀏覽器解析。得到 http://ip:port/