日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...

發(fā)布時(shí)間:2024/7/23 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。