JSP中Out和Request對象詳解


  內置表示不需要new便可直接使用。

一、基礎知識

  1.緩沖區:IO最原始是一個一個字節的讀取,這就像吃米飯的時候一粒一粒的吃,很沒有效率,這時候就有了碗,一碗一碗的吃,豈不痛快。

  2.Get提交不能超過2k,安全性不高,查詢、搜索時做,效率高,Post提交的信息在Html header里,信息量大,在注冊、修改、上傳時候。

二、out內置對象

  向客戶端輸出信息,是JspWriter的對象,常用的有println、flush和clear和clearbuffer,后兩者的區別是,潛着在flush調用后會拋出異常,前者不會....拋出異常部分后面的代碼都不會被執行,還有getBufferSize(緩沖區大小,如果不設置則為0),getRemaining(緩沖區剩余大小),isAutoFlush(緩沖區滿時是否自動刷新)。

三、Request對象

  是HttpServletRequest的實力,客戶端請求完成之前,一直存在。

 1 <%@ page language="java" contentType="text/html; charset=utf-8"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 3 <html>
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 6 <title>Insert title here</title>
 7 </head>
 8 <body>
 9     <form name="regiserForm" action="mainPage.jsp" method="post">
10     <table>
11         <tr>
12             <td>姓名</td>
13             <td>
14                 <input type="text" name="userName">
15             </td>
16         <tr>
17         <tr>
18             <td>愛好</td>
19             <td>
20                 <input type="checkbox" name="favourite" value="羽毛球">羽毛球 21                 <input type="checkbox" name="favourite" value="籃球">籃球 22                 <input type="checkbox" name="favourite" value="網球">網球 23                 <input type="checkbox" name="favourite" value="足球">足球 24             </td>
25         </tr>
26         <tr>
27             <td colspan=2>
28                 <input type="submit" value="提交">
29             </td>
30         </tr>
31     </table>
32     </form>
33 </body>
34 </html>

  這是注冊頁面,第一點需要注意的是

<%@ page language="java" contentType="text/html; charset=utf-8"%>

  charset在contentType里面(看冒號),單獨寫的話提示找不到屬性。第二點是布局問題,名字和input分別占用一個td,工兩個td,所以下面的提交是colspan=2。

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<% request.setCharacterEncoding("UTF-8"); String userName= request.getParameter("userName"); String[] favourite = request.getParameterValues("favourite"); out.println("姓名&nbsp&nbsp&nbsp"+userName); out.print("愛好"); for (int i=1; i<favourite.length; i++) { out.println("&nbsp&nbsp&nbsp"+favourite[i]); } %>

</body>
</html>

  由於頁面編碼方式都是UTF-8,但是參數傳輸方式默認是ISO-8859-1,所以現瀏覽器里的結果是亂碼。在接受參數之前加入

 request.setCharacterEncoding("UTF-8");

  

  下面測試Get傳遞參數

1 <!-- 直接這樣會出現空指針異常,因為並沒有傳遞愛好屬性,而mainPage直接去獲取愛好,所以空指針,因此需要判斷一下 -->
2     <a href="mainPage.jsp?userName=李四">測試Get方法(URL傳參數)</a>

..........................

    request.setCharacterEncoding("UTF-8"); String userName= request.getParameter("userName"); out.println("姓名&nbsp&nbsp&nbsp"+userName); if(request.getParameterValues("favourite")!=null) { String[] favourite = request.getParameterValues("favourite"); out.print("愛好"); for (int i=1; i<favourite.length; i++) { out.println("&nbsp&nbsp&nbsp"+favourite[i]); } }

  按理說這種方式傳遞中文不論地址欄還是現實的結果都會是亂碼,但是我這竟然沒有,如果有的話

   <Connector port="9999" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

  配置Tomcat下的server.xml,第一個Connector,可以修改端口號,同事最后加入URIEncoding這個屬性。或者

String str= request.getParameter("userName");
String userName = new String(str.getBytes("ISO-8859-1"),"UTF-8");

  還有一種就是為Connector 節點添加useBodyEncodingForURI="true" 屬性即可。

  還可以在request對象里setAttribute('"password","123456")下面通過getAttribute("password")來獲得,原來是getParameter。

  getContentType:或者MIME類型

  getProtocol:協議類型和版本號

  getServerPort:服務器端口號

  getRemoteAddr:客戶端的IP地址

  真是的IP地址因為是動態IP,所以找不到真是的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM