jsp內置對象(上)
在JSP中為了簡化頁面的開發提供了一些內置的對象。這些對象不需要由JSP的編寫者通過new關鍵字實例化,他們都由容器實現和管理,在所有的JSP頁面中都可以使用內置對象。
JSP中共有9大內置對象:
- out對象
- requset對象
- response對象
- session對象
- pageContext對象
- application對象
- config對象
- page對象
- exception對象
JSP內置對象(下):http://wxmimperio.coding.io/?p=329
PS:
【web對象的請求響應模式】
1.用戶從客戶端發送HTTP請求(request)到web服務器端
2.服務器給用戶做相應的HTTP響應(response)返回客戶端
【表單提交的兩種方式:get and post】
1.get:以明文的方式通過URL提交數據,數據在URL中可以看到。提交的數據最多不超過2kb。安全性比較低但效率比post方式高,適合提交數據量不大,安全性不高的數據。比如:搜索、查詢
2.post:將用戶提交的信息封裝在HTML HEADER內。適合提交數據量大,安全性高的用戶信息。比如:注冊、修改、上傳
1.out對象out對象被封裝成javax.servlet.jsp.JspWriter接口,主要用來向客戶端輸出數據,代表輸出流的對象。
常用的方法:
- out.PRint()、out.println():向客戶端打印字符串
- out.clear():清除緩沖區里的數據,但不會把數據輸出到客戶端,如果在flush之后調用會拋出異常
- out.flush():輸出緩沖區里的數據
- out.clearBuffer():清除緩沖區里的數據,并把數據輸出到客戶端,如果在flush之后調用不會拋出異常
- out.getBufferSize():獲得緩沖區大小
- out.getRemaining():獲得緩沖區剩余空間大小
- out.close():關閉輸出流
- out.isAutoFlush():返回布爾值,判斷是否為自動清除緩存
代碼:
- <body>
- println方法:<%out.println("打印輸出");%><br>
- getBufferSize方法:緩沖區大小=<%=out.getBufferSize()%><br>
- getRemaining方法:緩沖區剩余大小=<%=out.getRemaining()%><br>
- isAutoFlush方法:是否自動清除緩沖區:<%=out.isAutoFlush()%><br>
- clear方法:<%out.close();%><br>
- <%--
- clearBuffer方法:<%out.clearBuffer();%><br>
- flush方法:<%out.flush();%><br>
- close方法:<%out.close();%><br>
- --%>
- </body>
2.request對象request對象代表請求對象,他被封裝成HttpServletRequest接口。通過getParameter方法可以得到requset的參數,通過get、post、head等方法可以得到request的類型,通過Cookies、Referer等可以得到請求的HTTP頭。來自客戶端的請求經Servlet容器處理后,有request對象進行封裝,他作為jspServlet()方法的一個參數由容器傳遞給JSP頁面。
常用的方法:
- getParamter(String name):獲得客戶端傳給服務器端的參數值,參數由name指定
- getParameterValues(String name):獲得指定參數的所有值,參數由name指定
- getProtocol():獲取客戶端向服務器端傳送數據所依據的協議類型及版本號
- getServerName():獲取服務器的名字
- getServerPath():獲取客戶端所請求的腳本文件的路徑
- getServerPort():獲取服務器的端口號
- getContentLength():返回請求的長度,如果長度不確定,返回-1
- getCharacterEncoding():返回請求中的編碼方式
- getLocalAddr():返回接收到請求的網絡接口的ip地址,這個方法是在Servlet 2.4規范中新增的方法
- getLocalName():返回接收到請求的IP接口的主機名,這個方法是在Servlet 2.4規范中新增的方法
- setAttribute(String name,java.lang.Object objt):儲存此請求中的屬性
- getAttribute(String name):返回由name指定的屬性,如果此屬性不存在,則返回一個null值
代碼:
requestForm.jsp
- <formname="requsetFrom"action="requestObject.jsp"method="post">
- <table>
- <tr>
- <td>用戶名:</td>
- <td><inputtype="text"name="username"></td>
- </tr>
- <tr>
- <td>興趣:</td>
- <td>
- <inputtype="checkbox"name="favorite"value="basketball">籃球
- <inputtype="checkbox"name="favorite"value="music">音樂
- <inputtype="checkbox"name="favorite"value="football">足球
- </td>
- </tr>
- <tr>
- <td><inputtype="submit"value="提交"></td>
- </tr>
- </table>
- </form>

requestObject.jsp
- <body>
- <%
- /*解決中文亂碼問題,但不能解決用URL傳遞中文的亂碼*/
- request.setCharacterEncoding("utf-8");
- /*調用setAttribute方法*/
- request.setAttribute("passWord","123456789");
- %>
- 用戶名:<%=request.getParameter("username")%><br>
- 興趣:
- <%
- if(request.getParameterValues("favorite")!=null){
- String[]favorites=request.getParameterValues("favorite");
- for(inti=0;i<favorites.length;i++){
- out.println(favorites[i]+" ");
- }
- }
- %><br>
- 服務器版本號:<%=request.getProtocol()%><br>
- 服務器名字:<%=request.getServerName()%><br>
- 客戶端請求的文件路徑:<%=request.getServletPath()%><br>
- 服務器端口號:<%=request.getServerPort()%><br>
- 請求長度:<%=request.getContentLength()%><br>
- 請求中編碼方式:<%=request.getCharacterEncoding()%><br>
- 請求中網絡接口的IP:<%=request.getLocalAddr()%><br>
- 請求中的主機名:<%=request.getLocalName()%><br>
- 獲取指定屬性:<%=request.getAttribute("password")%><br>
- </body>

3.response對象response被包裝成HttpServletResponse接口,他封裝了JSP產生的響應,然后被發送到客戶端以響應客戶的請求。和request對象一樣,他由容器生成,作為jspService()方法的參數被傳入JSP。他具有頁面作用域,即訪問一個頁面時,該頁面的response對象只能對該頁面有效,其他頁面的response對象對當前頁面無效。
常用的方法:
- flushBuffer():強制把當前緩沖區的內容發送到客戶端
- getBufferSize():返回緩沖區大小
- addCookie(Cookie cook):添加一個Cookie對象,用來保存客戶端信息
- sendError(int):向客戶端發送錯誤的信息
- sendRedirect(String location):把響應發送到另一個位置進行處理
- setContentType(StringContentType):設置響應的MIME類型
- getWriter():返回一個可以向客戶端輸出字符的對象
- getCharacterEncoding():返回響應所用的編碼類型
PS:
【請求重定向】
客戶端行為,response.sendRedirect(),從本質上講等同于發出兩次請求,前一次請求對象不會被保存,地址欄的URL地址會發生改變
【請求轉發】
服務器行為,requset.getRequestDispatcher().forward(request,response);是一次請求,轉發后請求對象會保存,地址欄的URL地址不會發生變化
代碼:
- <body>
- 緩沖區大小=<%=response.getBufferSize()%><br>
- <%--錯誤=<%response.sendError(404);%><br>--%>
- 響應的編碼類型=<%=response.getCharacterEncoding()%><br>
- <%
- response.setContentType("text/html;charset=utf-8");//設置響應的MIME類型
- /*response生成的輸出流優先級高于內置對象out,先進行打印輸出*/
- PrintWriterouter=response.getWriter();//獲得輸出流
- outer.println("response生成的輸出流<br>");
- /*使用了一個Cookie,每次訪問此頁面時,就通過requset對象把客戶端的所有Cookie獲取過來*/
- Cookie[]cookies=request.getCookies();
- Cookiecookie_response=null;
- Listlist=Arrays.asList(cookies);
- Iteratorit=list.iterator();
- while(it.hasNext()){
- Cookietemp=(Cookie)it.next();
- if(temp.getName().equals("_access_time"));{
- cookie_response=temp;
- break;
- }
- }
- if(cookie_response!=null){
- outer.println("訪問時間="+cookie_response.getValue()+"<br>");
- cookie_response.setValue(newDate().toString());
- }else{
- cookie_response=newCookie("_access_time",newjava.util.Date().toString());
- }
- response.addCookie(cookie_response);
- response.flushBuffer();
- %>
- </body>
4.session對象session對象用來保存每個用戶信息,以便跟蹤每個用戶的操作狀態。其中,session信息保存在容器中,session的ID保存在客戶端的Cookie中。session表示客戶端與服務器的一次會話,web中的session指的是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間他表示特定的一段時間,在服務器內存中保存著不同用戶的session,session對象在第一個jsp頁面被裝載時自動創建,完成回話管理。
【生命周期】
從一個客戶打開瀏覽器并連接到服務器開始,到客戶關閉瀏覽器離開服務器結束,稱為一個會話。當一個用戶訪問一個服務器時,可能會在服務器的幾個頁面之間切換,服務器應當通過某種辦法知道這是一個客戶,就需要session對象。session對象是HttpSession類的一個實例.
創建:
當客戶端第一