高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...
1.HttpServletRequest 類
a)HttpServletRequest 類有什么作用。
每次只要有請求進入 Tomcat 服務器,Tomcat 服務器就會把請求過來的 HTTP 協議信息解析好封裝到 Request 對象中。 然后傳遞到 service 方法(doGet 和 doPost)中給我們使用。我們可以通過 HttpServletRequest 對象,獲取到所有請求的 信息。
b)HttpServletRequest 類的常用方法
序號
方法名
作用
1
getRequstURI()
獲取請求的資源路徑
2
getRequestURL()
獲取請求的統一資源定位符(絕對路徑)
3
getRemoteHost()
獲取客戶端的IP地址
4
getHeader()
獲取請求頭
5
getParameter()
獲取請求參數
6
getParameterValues()
獲取請求參數(多個值的時候使用)
7
getMethod()
獲取請求方式get或post
8
setAttribute(key,value)
獲取域數據
9
getAttribute(key)
獲取域數據
10
getRequestDispacher()
獲取請求轉發對象
常用 API 示例代碼:
public class RequestAPIServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
// i.getRequestURI() 獲取請求的資源路徑
System.out.println("URI => " + req.getRequestURI());
// ii.getRequestURL() 獲取請求的統一資源定位符(絕對路徑)
System.out.println("URL => " + req.getRequestURL());
// iii.getRemoteHost() 獲取客戶端的 ip 地址
/**
* 在 IDEA 中,使用 localhost 訪問時,得到的客戶端 ip 地址是 ===>>> 127.0.0.1
* 在 IDEA 中,使用 127.0.0.1 訪問時,得到的客戶端 ip 地址是 ===>>> 127.0.0.1
* 在 IDEA 中,使用 真實 ip 訪問時,得到的客戶端 ip 地址是 ===>>> 真實的客戶端 ip 地址
*/
System.out.println("客戶端 ip 地址 => " + req.getRemoteHost());
// iv.getHeader() 獲取請求頭
System.out.println("請求頭 User-Agent ==>> " + req.getHeader("User-Agent"));
// vii.getMethod() 獲取請求的方式 GET 或 POST
System.out.println( "請求的方式 ==>> " + req.getMethod() );
}
}
c)如何獲取請求參數
表單:
用戶名:
密碼:
興趣愛好:C++
Java
JavaScript
Java 代碼:
public class ParameterServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
// 獲取請求參數
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));
}
}
doGet 請求的中文亂碼解決:
// 獲取請求參數
String username = req.getParameter("username");
//1 先以 iso8859-1 進行編碼
//2 再以 utf-8 進行解碼
username = new String(username.getBytes("iso-8859-1"), "UTF-8");
d)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));
}
e)請求的轉發
什么是請求的轉發?
請求轉發是指,服務器收到請求后,從一次資源跳轉到另一個資源的操作叫請求轉發。
Servlet1 代碼:
public class Servlet1 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
// 獲取請求的參數(辦事的材料)查看
String username = req.getParameter("username");
System.out.println("在 Servlet1(柜臺 1)中查看參數(材料):" + username);
// 給材料 蓋一個章,并傳遞到 Servlet2(柜臺 2)去查看
req.setAttribute("key1","柜臺 1 的章");
// 問路:Servlet2(柜臺 2)怎么走
/**
* 請求轉發必須要以斜杠打頭,/ 斜杠表示地址為:http://ip:port/工程名/ , 映射到 IDEA 代碼的 web 目錄
*
*/
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
// RequestDispatcher requestDispatcher = req.getRequestDispatcher("http://www.baidu.com");
// 走向 Sevlet2(柜臺 2)
requestDispatcher.forward(req,resp);
}
}
Servlet2 代碼:
public class Servlet2 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
// 獲取請求的參數(辦事的材料)查看
String username = req.getParameter("username");
System.out.println("在 Servlet2(柜臺 2)中查看參數(材料):" + username);
// 查看 柜臺 1 是否有蓋章
Object key1 = req.getAttribute("key1");
System.out.println("柜臺 1 是否有章:" + key1);
// 處理自己的業務
System.out.println("Servlet2 處理自己的業務 ");
}
}
f) base 標簽的作用
Title這是 a 下的 b 下的 c.html 頁面
跳回首頁
g)Web 中的相對路徑和絕對路徑
在 javaWeb 中,路徑分為相對路徑和絕對路徑兩種:
相對路徑是:
[.]表示當前路徑,[..]表示上一級目錄,[資源名]表示當前路徑/資源名
絕對路徑:
http://ip:port/工程路徑/資源路徑
實際開發中,路徑使用絕對路徑,而不簡單的使用相對路徑。
1、絕對路徑。2、base+相對路徑。
h)web 中 / 斜杠的不同意義
在 web 中 / 斜杠 是一種絕對路徑。
/ 斜杠 如果被瀏覽器解析,得到的地址是:http://ip:port/
例如:斜杠
/ 斜杠 如果被服務器解析,得到的地址是:http://ip:port/工程路徑
/servlet1
servletContext.getRealPath(“/”);
request.getRequestDispatcher(“/”);
特殊情況: response.sendRediect(“/”); 把斜杠發送給瀏覽器解析。得到 http://ip:port/
2.HttpServletResponse 類
a)HttpServletResponse 類的作用
HttpServletResponse 類和 HttpServletRequest 類一樣。每次請求進來,Tomcat 服務器都會創建一個 Response 對象傳 遞給 Servlet 程序去使用。HttpServletRequest 表示請求過來的信息,HttpServletResponse 表示所有響應的信息, 我們如果需要設置返回給客戶端的信息,都可以通過 HttpServletResponse 對象來進行設置.
b)兩個輸出流的說明。
字節流:getOutputStream();? 常用于下載(傳遞二進制數據)
字符流:getWriter();? ?常用于回傳字符串(常用)
兩個流同時只能使用一個。是用了字節流,就不能在使用字符流。反之亦然,否則就會報錯。
c)如何往客戶端回傳數據
要求 : 往客戶端回傳 字符串 數據。
public class ResponseIOServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException{
// 要求 : 往客戶端回傳 字符串 數據。
PrintWriter writer = resp.getWriter();
writer.write("response's content!!!");
}
}
d)響應的亂碼解決
解決響應中文亂碼方案一(不推薦使用):
// 設置服務器字符集為 UTF-8
resp.setCharacterEncoding("UTF-8");
// 通過響應頭,設置瀏覽器也使用 UTF-8 字符集
resp.setHeader("Content-Type", "text/html; charset=UTF-8");
解決響應中文亂碼方案二(推薦):
// 它會同時設置服務器和客戶端都使用 UTF-8 字符集,還設置了響應頭
// 此方法一定要在獲取流對象之前調用才有效
resp.setContentType("text/html; charset=UTF-8");
e)請求重定向
請求重定向,是指客戶端給服務器發請求,然后服務器告訴客戶端說。我給你一些地址。你去新地址訪問。叫請求 重定向(因為之前的地址可能已經被廢棄)。
請求重定向的第一種方案:
// 設置響應狀態碼 302 ,表示重定向,(已搬遷)
resp.setStatus(302);
// 設置響應頭,說明 新的地址在哪里
resp.setHeader("Location", "http://localhost:8080");
請求重定向的第二種方案(推薦使用):
resp.sendRedirect("http://localhost:8080");
文章來源: blog.csdn.net,作者:輕狂書生FS,版權歸原作者所有,如需轉載,請聯系作者。
原文鏈接:blog.csdn.net/LookForDream_/article/details/105504284
總結
以上是生活随笔為你收集整理的高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fetch 不是xhr_春招|前端201
- 下一篇: python数据分析的步骤排序_Pyth