Servlet學(xué)習(xí)(二)

一、請求的方式

1.地址欄輸入

2.超鏈接

3.Form表單

4.ajax,異步無刷新技術(shù)

5.請求轉(zhuǎn)發(fā)

6.重定向

二、HttpServletRequest對象

主要作用:接受客戶端發(fā)送過來的請求信息

1.常用方法

getRequestURL():獲取來源URL

getQueryString():

getMethod():請求方式,get/post

2.請求亂碼解決

2.1 方案一

只對post請求有效

req.setCharacterEncoding("UTF-8");

2.2 方案二

一次只能處理一個參數(shù)

如果本身不亂碼,使用后會亂碼

無論get還是post都可以使用

new String(request.getParameter("參數(shù)名").getBytes("ISO-8859-1"),"UTF-8")

3.請求轉(zhuǎn)發(fā)

請求轉(zhuǎn)發(fā),是一種服務(wù)器的行為

當(dāng)客戶端請求到達(dá)后,服務(wù)器進(jìn)行轉(zhuǎn)發(fā), 此時會將請求對象進(jìn)行保存

req.getRequestDispatcher("請求地址").forward(request,response)

4.request作為域?qū)ο?/h2>

設(shè)置作用域

req.setAttribute("user", "zhangsan");

移除作用域

req.removeAttribute("user");

三、HttpServletResponse對象

1.常用方法

getWriter(),獲取輸出的 字符流

getOutputStream(),獲取輸出的字節(jié)流

setContentType(),設(shè)置響應(yīng)類型和編碼

2.刷新和頁面自動跳轉(zhuǎn)

2.1 頁面跳轉(zhuǎn)

3秒后進(jìn)行跳轉(zhuǎn)

response.setHeader("refresh","3;URL=ok.html");

2.2 自動刷新

每隔2秒自動刷新

resp.setHeader("refresh","2");

3.響應(yīng)數(shù)據(jù)

接受到客戶端請求后,可以通過HttpServletResponse對象直接進(jìn)行響應(yīng)

getWriter()獲取字符流

PrintWriter writer = resp.getWriter();

writer.write("<h4>Hello Servlet</h4>");

writer.close();

getOutputStream()獲取字節(jié)流,可以響應(yīng)一切數(shù)據(jù)

OutputStream outputStream = resp.getOutputStream();

outputStream.write("<h4>Hello Servlet</h4>".getBytes());

4.解決亂碼

4.1 指定客戶端和服務(wù)器使用的編碼一致

設(shè)置服務(wù)器的編碼格式

resp.setCharacterEncoding("UTF-8")

設(shè)置客戶端的編碼格式

resp.setHeader("content-type", "text/html;charset=UTF-8");

4.2 使用單句話代替

用這句話,就可以替代,完成編碼格式統(tǒng)一和,響應(yīng)類型識別

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

5.響應(yīng)圖片

5.1? 獲取路徑

獲得項目在服務(wù)器中的真實路徑

String path = req.getServletContext().getRealPath("/")

獲得圖片的存放路徑

String filepath = path + "WEB-INF/圖片名稱.jpeg"

5.2 獲取對象

獲取該對象

File file = new File(filepath)

5.3 判斷對象

判斷該對象是否存在,并且是否為一個文件

if(file.exists() && file.isFile())

5.4 寫入關(guān)閉

得到輸出流

ServletOutputStream out = resp.getOutputStream();

得到輸入流

InputStream in = new FileInputStream(filepath);

寫出

byte[] arr = byte[1024];

int len =0;

while((len=in.read(arr))

!= -1){

? ? out.write(arr,0,len);

}

out.flush();

in.close();

out.close();

5.5 設(shè)置響應(yīng)類型

resp.setContentType("img/jpeg");


6.請求轉(zhuǎn)發(fā)和重定向的區(qū)別

6.1 請求轉(zhuǎn)發(fā)

1. 只有一次請求,request作用域中的數(shù)據(jù)可以共享

2. 瀏覽器地址欄不發(fā)生改變

3. 服務(wù)器行為

4. 跳轉(zhuǎn)的絕對地址可以定位到站點(diǎn)名后

6.2 重定向

1. 有兩次請求,request作用域的屬于不可以共享

2. 瀏覽器地址方式改變

3. 客戶端行為

4. 跳轉(zhuǎn)地址可以定位到http://后

5. 重定向可以定位到任意路徑

6.3 請求轉(zhuǎn)發(fā)和重定向的"/"含義

請求轉(zhuǎn)發(fā)(服務(wù)端跳轉(zhuǎn)):"http://localhost:8080/站點(diǎn)名"

重定向(客戶端跳轉(zhuǎn)):"http://localhost:8080/"

6.4 客戶端跳轉(zhuǎn)

1. 表單提交

2. 超鏈接提交

3. 地址欄輸入

4. 重定向?

6.5 服務(wù)端跳轉(zhuǎn)

1. 地址欄直接輸入

2. 請求轉(zhuǎn)發(fā)

7.路徑問題

7.1相對路徑

路徑的前面不要加任何符號,一般情況下代表的是:"http://localhost:8080/站點(diǎn)名"

7.2絕對路徑

以http://開頭的完整的絕對路徑,可以跨域,可以訪問任何資源

以"/"開頭,訪問當(dāng)前項目下的資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容