HttpServletRequest 和HttpServletResponse
文章目錄
Servlet配置方式
ServletContext
如何得到
有什么作用
可以獲取全局配置參數(shù)
可以獲取Web應(yīng)用中的資源
通過classloader去獲取web工程下的資源
使用ServletContext存取數(shù)據(jù)。
ServletContext存取值分析
細(xì)節(jié):
ServletContext 何時(shí)創(chuàng)建, 何時(shí)銷毀?
HTTPServletRequest
HTTPServletResponse
響應(yīng)的數(shù)據(jù)中有中文,那么有可能出現(xiàn)中文亂碼
不管是字節(jié)流還是字符流,直接使用一行代碼就可以了。
演練下載資源。
總結(jié)
Servlet配置方式
全路徑匹配
以 / 開始 /a /aa/bb
localhost:8080/項(xiàng)目名稱/aa/bb
路徑匹配 , 前半段匹配
以 / 開始 , 但是以 * 結(jié)束 /a/* /*
其實(shí)是一個(gè)通配符,匹配任意文字
localhost:8080/項(xiàng)目名稱/aa/bb
以擴(kuò)展名匹配
寫法: 沒有/ 以 * 開始 *.擴(kuò)展名 *.aa *.bb
ServletContext
Servlet 上下文
每個(gè)web工程都只有一個(gè)ServletContext對(duì)象。 說白了也就是不管在哪個(gè)servlet里面,獲取到的這個(gè)類的對(duì)象都是同一個(gè)。
如何得到
//1. 獲取對(duì)象ServletContext ServletContext context = getServletContext();
1
2
有什么作用
獲取全局配置參數(shù)
獲取web工程中的資源
存取數(shù)據(jù),servlet間共享數(shù)據(jù) 域?qū)ο?/p>
獲取全局參數(shù)
1. 獲取資源在tomcat里面的絕對(duì)路徑 先得到路徑,然后自己new InpuStream context.getRealPath("") //這里得到的是項(xiàng)目在tomcat里面的根目錄。 D:\tomcat\apache-tomcat-7.0.52\apache-tomcat-7.0.52\wtpwebapps\Demo03\ String path = context.getRealPath("file/config.properties"); D:\tomcat\apache-tomcat-7.0.52\apache-tomcat-7.0.52\wtpwebapps\Demo03\file\config.properties 2. getResourceAsStream 獲取資源 流對(duì)象 直接給相對(duì)的路徑,然后獲取流對(duì)象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
通過classloader去獲取web工程下的資源
使用ServletContext存取數(shù)據(jù)。
定義一個(gè)登陸的html頁(yè)面, 定義一個(gè)form表單
定義一個(gè)Servlet,名為L(zhǎng)oginServlet
針對(duì)成功或者失敗,進(jìn)行判斷,然后跳轉(zhuǎn)到不一樣的網(wǎng)頁(yè)
ServletContext存取值分析
細(xì)節(jié):
1
2
3
4
5
6
7
8
9
10
11
12
13
ServletContext 何時(shí)創(chuàng)建, 何時(shí)銷毀?
服務(wù)器啟動(dòng)的時(shí)候,會(huì)為托管的每一個(gè)web應(yīng)用程序,創(chuàng)建一個(gè)ServletContext對(duì)象
從服務(wù)器移除托管,或者是關(guān)閉服務(wù)器。
ServletContext 的作用范圍
只要在這個(gè)項(xiàng)目里面,都可以取。 只要同一個(gè)項(xiàng)目。 A項(xiàng)目 存, 在B項(xiàng)目取,是取不到的? ServletContext對(duì)象不同。
HttpServletRequest
這個(gè)對(duì)象封裝了客戶端提交過來的一切數(shù)據(jù)。
可以獲取客戶端請(qǐng)求頭信息
//得到一個(gè)枚舉集合 Enumeration
1
2
3
4
5
6
7
8
獲取客戶端提交過來的數(shù)據(jù)
String name = request.getParameter("name"); String address = request.getParameter("address"); System.out.println("name="+name); System.out.println("address="+address); ------------------------------------------------- //name=zhangsan&name=lisi&name=wangwu 一個(gè)key可以對(duì)應(yīng)多個(gè)值。 Map
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
獲取中文數(shù)據(jù)
客戶端提交數(shù)據(jù)給服務(wù)器端,如果數(shù)據(jù)中帶有中文的話,有可能會(huì)出現(xiàn)亂碼情況,那么可以參照以下方法解決。
如果是GET方式
代碼轉(zhuǎn)碼
String username = request.getParameter(“username”);
String password = request.getParameter(“password”);
System.out.println("userName="+username+"==password="+password); //get請(qǐng)求過來的數(shù)據(jù),在url地址欄上就已經(jīng)經(jīng)過編碼了,所以我們?nèi)〉降木褪莵y碼, //tomcat收到了這批數(shù)據(jù),getParameter 默認(rèn)使用ISO-8859-1去解碼 //先讓文字回到ISO-8859-1對(duì)應(yīng)的字節(jié)數(shù)組 , 然后再按utf-8組拼字符串 username = new String(username.getBytes("ISO-8859-1") , "UTF-8"); System.out.println("userName="+username+"==password="+password); 直接在tomcat里面做配置,以后get請(qǐng)求過來的數(shù)據(jù)永遠(yuǎn)都是用UTF-8編碼。
1
2
3
4
5
6
7
8
9
10
可以在tomcat里面做設(shè)置處理 conf/server.xml 加上URIEncoding=“utf-8”
如果是POST方式
這個(gè)說的是設(shè)置請(qǐng)求體里面的文字編碼。 get方式,用這行,有用嗎? ---> 沒用 request.setCharacterEncoding("UTF-8"); 這行設(shè)置一定要寫在getParameter之前。
1
2
3
4
HttpServletResponse
負(fù)責(zé)返回?cái)?shù)據(jù)給客戶端。
輸出數(shù)據(jù)到頁(yè)面上
//以字符流的方式寫數(shù)據(jù) //response.getWriter().write("
hello response...
"); //以字節(jié)流的方式寫數(shù)據(jù) response.getOutputStream().write("hello response2222...".getBytes());1
2
3
4
5
響應(yīng)的數(shù)據(jù)中有中文,那么有可能出現(xiàn)中文亂碼
以字符流輸出
response.getWriter()
//1. 指定輸出到客戶端的時(shí)候,這些文字使用UTF-8編碼 response.setCharacterEncoding("UTF-8"); //2. 直接規(guī)定瀏覽器看這份數(shù)據(jù)的時(shí)候,使用什么編碼來看。 response.setHeader("Content-Type", "text/html; charset=UTF-8"); response.getWriter().write("我愛中國(guó)...");
1
2
3
4
5
6
7
以字節(jié)流輸出
response.getOutputStream()
//1. 指定瀏覽器看這份數(shù)據(jù)使用的碼表 response.setHeader("Content-Type", "text/html;charset=UTF-8"); //2. 指定輸出的中文用的碼表 response.getOutputStream().write("我愛中國(guó)..".getBytes("UTF-8")); --------------------------------------------
1
2
3
4
5
6
7
8
不管是字節(jié)流還是字符流,直接使用一行代碼就可以了。
response.setContentType("text/html;charset=UTF-8"); 然后在寫數(shù)據(jù)即可。
1
2
3
演練下載資源。
直接以超鏈接的方式下載,不寫任何代碼。 也能夠下載東西下來。
讓tomcat的默認(rèn)servlet去提供下載:
aa.jpg
bb.txt
cc.rar
原因是tomcat里面有一個(gè)默認(rèn)的Servlet – DefaultServlet 。這個(gè)DefaultServlet 專門用于處理放在tomcat服務(wù)器上的靜態(tài)資源。
總結(jié)
Servlet注冊(cè)方式
ServletContext【重點(diǎn)】
作用: 1. 獲取全局參數(shù) 2. 獲取工程里面的資源。 3. 資源共享。 ServletContext 域?qū)ο?有幾個(gè) 一個(gè) 什么時(shí)候創(chuàng)建 ? 什么時(shí)候銷毀 服務(wù)器啟動(dòng)的時(shí)候給每一個(gè)應(yīng)用都創(chuàng)建一個(gè)ServletContext對(duì)象, 服務(wù)器關(guān)閉的時(shí)候銷毀
1
2
3
4
5
6
7
8
9
10
11
12
13
簡(jiǎn)單登錄
HttpServletRequest【重點(diǎn)】
1. 獲取請(qǐng)求頭 2. 獲取提交過來的數(shù)據(jù)
1
2
3
HttpServletResponse【重點(diǎn)】
負(fù)責(zé)輸出數(shù)據(jù)到客戶端,其實(shí)就是對(duì)之前的請(qǐng)求作出響應(yīng)
1
中文亂碼問題。【重點(diǎn)】
下載
https web前端
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。