1. 程式人生 > >JSP內建物件(包括request和response)以及解決url傳中文引數出現亂碼問題

JSP內建物件(包括request和response)以及解決url傳中文引數出現亂碼問題

一、內建物件簡介

1、JSP內建物件是Web容器建立的一組物件,不使用new關鍵字就可以使用的內建物件。例如:out物件

<%
    int[] value={60,70,80};
    for(int i:value){
         out.println(i);
    }
%>

2、JSP九大內建物件:
out,request,response,session,application(五大常用物件)

Page,pageContext,exception.config(四個不太常用物件)

out是JspWriter 的例項,是向客戶端輸出內容的常用物件.
常用方法:
1.void println() 向客戶端列印字串.


2.void clear() 清除緩衝區,在flush之後呼叫會丟擲異常,丟擲異常後,之後的內容不會被執行
3.void clearBuffer() 清除緩衝區,在flush之後呼叫不會丟擲異常.
4.void flush() 將緩衝區內容輸出到客戶端.
5.int getBufferSize() 
6.int getRemaining()
7.boolean siAutoFlush()
8.void close()

表單有兩種提交方式:get與post。定義在<form action="dologin.jsp" name="loginForm" method="提交方式***"></form> 動作/名稱等順序無所謂。


1.get:以【明文】方式,通過URL提交資料,資料在URL中【可以看到】。提交資料最多不超過【2KB】。安全性較低,但效率比post方式高。適合提交資料量不大,且安全要求不高的資料:比如:搜尋、查詢等功能。
2.post:將使用者提交的資訊封裝在HTML HEADER內。適合提交資料量大,安全性高的使用者資訊。如:註冊、修改、上傳等功能。

request物件
1、request用於封裝客戶端的請求資訊。
2、它是HttpServletRequest類的例項。
3、request物件具有請求域,即完成客戶端的請求之前,該物件一直有效。

常用方法如圖所示



注:虛擬路徑預設與專案名稱相同,但是可以通過選中專案>選擇Properites>MyEclipse>Web>Web-Context-root 來修改虛擬路徑(修改虛擬路徑不影響專案名,但是需要重新部署,webapps資料夾中的專案名字使用的是虛擬路徑);位址列中訪問資源要用虛擬路徑。例如對於http://localhost:8080/JspStudy/request.jsp,

request.getRealPath("request.jsp")則返回F:\apache-tomcat-7.0.26\webapps\JspStudy\request.jsp,

request.getContextPath()則返回/JspStudy

解決url傳中文引數出現亂碼問題:

URL傳中文引數不能用setCharacterEncoding("utf-8")解決,這種方式僅能解決通過表單傳中文引數導致亂碼的問題

URL傳中文引數亂碼的解決方案:
tomcat  -> conf -> server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" 【URIEncoding="utf-8"】新增這一句,修改伺服器編碼方式
/>

response物件


注:使用PrintWriter 輸出的字串 總是先於 內建的JspWriter物件(out物件)輸出的字串,例如:


輸出的結果為


可以使用out.flush()來避免這種情況


結果為


即先強制重新整理緩衝區,輸出緩衝區中的內容

請求重定向:

服務端responce.sendRedirect("xx.jsp")重定向。【客戶端行為】:即客戶端會訪問兩次,第一次訪問後會立即跳轉到第二個重定向頁面上,【從本質上講等於兩次請求】,而前一次的請求封裝的request物件不會儲存,位址列的URL地址會改變。

請求轉發:

服務端request.getRequestDispatcher("xx.jsp").forward(request,response)請求轉發。forward(request,response)用於儲存內建物件request和response。【伺服器行為】:伺服器會代替客戶端去訪問轉發頁面,【從本質是一次請求】,轉發後請求物件會儲存,位址列的URL地址不會改變。