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地址不會改變。