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