浪潮優派培訓筆記:JSP的9大內置對象之(二).與Input/Output有關的內置對象:out、request、response

(二).與Input/Output有關的內置對象:out、request、response

  request對象實現javax.servlet.http.HttpServletRequest接口-->javax.servlet.ServletReqest接口;

  response對象實現javax.servlet.http.HttpServletResponse接口-->javax.servlet.ServletResponse接口;

 out對象實現javax.servlet.jsp.JspWriter類,後者和Servlet中的常用的PrintWriter類都繼承於java.io.Writer類。

  out(掌握):  JspWriter類型,提供print()方法,

  out.print()和out.println()用於打印信息到瀏覽器。

  此外out對象還提供了一些其他方法來控制管理輸出緩衝區和輸出流。(瞭解即可)

 獲得當前緩存區大小:out.getBufferSize();

  獲得剩餘緩存區大小:out.getRemaining();

  request(重點)

 request的常用方法:獲取請求的路徑(協議,服務器名,端口,應用程序上下文)

request.getContextPath();//獲取項目的Web Context-root,如:/jspPro2

request.getScheme();//獲取協議類型,如:http

request.getServerName();//獲取服務器名

request.getServerPort();//獲取服務端口號

例如:當新建一個Advanced Templates的JSP文件時,文件的開頭會有下面的這段代碼:

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+

request.getServerPort()+path+"/";

%>

                其中,basePath就定位到應用程序的根路徑,即:http://localhost:7070/項目名/。

  request的功能——數據傳遞功能

l在表單提交時,tomcat會自動將表單元素的值以name-value對的形式封裝到下一個頁面的request對象中去,所以可以通過下一個頁面的request對象的getParameter()或getParameterValues()方法來提取自動封裝的數據。其中:通過getParameter()方法來獲取單值,通過getParameterValues()方法獲取多值。

l根據業務需要,程序員可以通過request.setAttribute("name","value")方法將數據封裝到request對象中,則在此request對象生命週期範圍內,可以通過request.getAttribute("name")取值,或通過request.removeAttribute("name")刪除數據。

l獲取url中的參數 :url中帶參數的形式: ../*.jsp?name=value

       根據name獲取value: request.getParameter("name");

       【request生命週期】:從發出請求,到此請求被響應;如果url發生變化,則請求發生變化。

 request的功能——實現界面的請求轉發

請求轉發:也叫服務器端的轉發,客戶端(瀏覽器)的url不變

       request.getRequestDispatcher("要轉向的url").forward(request,response);

 

例:在JSP項目jspPro2的register.jsp文件的全部代碼如下: 

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

<html>

    <head>

       <title>Register</title>

       <script type="text/javascript">

           function regButton(){

              document.forms[0].action="returnInfo.jsp";

              document.forms[0].submit();    

           }

       </script>

    </head>

    <body>

       <form action="" method="post" name="myform">

           <table align="center" border="0">

              <tr>

                  <td align="right">用戶名:</td>

                  <td><input type="text" name="name" size="19"/></td>

              </tr>

              <tr>

                  <td align="right">密&nbsp;&nbsp;碼:</td>

                  <td><input type="password" name="pass" size="21"/></td>

              <tr>

                  <td align="right">性&nbsp;&nbsp;別:</td>

                  <td><input type="radio" name="sex" value="男" checked>男

                     &nbsp;&nbsp;

                     <input type="radio" name="sex" value="女">女

                  </td>

              </tr>

               <tr>

                  <td align="right">愛&nbsp;&nbsp;好:</td>

                  <td>

                     <input type="checkbox" name="hobby" value="看書" checked>

                     看書 &nbsp;&nbsp;

                     <input type="checkbox" name="hobby" value="打遊戲">

                     打遊戲&nbsp;&nbsp;

                     <input type="checkbox" name="hobby" value="編程" checked>

                     編程 &nbsp;&nbsp;

                     <input type="checkbox" name="hobby" value="吃飯">

                     吃飯

                  </td>

              </tr>

              <tr>

                  <td align="right">出生日期:</td>

                  <td>

                     <input type="text" size="4" maxlength="4" name="year">

                     年&nbsp;

                     <select name="month" size="1">

                         <option value="0">請選擇月份</option>

                         <option vlaue="1" selected>一月</option>

                         <option vlaue="2">二月</option>

                         <option vlaue="3">三月</option>

                         <option vlaue="4">四月</option>

                         <option vlaue="5">五月</option>

                         <option vlaue="6">六月</option>

                         <option vlaue="7">七月</option>

                         <option vlaue="8">八月</option>

                         <option vlaue="9">九月</option>

                         <option vlaue="10">十月</option>

                         <option vlaue="11">十一月 </option>

                         <option vlaue="12">十二月 </option>

                     </select>

                     月&nbsp;

                     <input type="text" size="2" maxlength="2" name="day">

                     日

                  </td>

              </tr>

              <tr align="center">

                  <td colspan="2">

                     <input type="button" value="注  冊" οnclick="regButton()">

                     &nbsp; &nbsp;

                     <input type="reset" value="重  置">

                  </td>

              </tr>

           </table>

       </form>

    </body>

</html>

 通過瀏覽器訪問register.jsp並輸入相應信息後的顯示效果爲:

returnInfo.jsp文件的全部代碼如下: 

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

<html>

    <head>

       <title>return info</title>

    </head>

    <body>

       <%

           //request.setCharacterEncoding("UTF-8");

           //response.setCharacterEncoding("UTF-8");

           String name = request.getParameter("name");

//設置編碼格式

           name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

           String pass = request.getParameter("pass");

           String sex = new String(request.getParameter("sex").getBytes(

                  "ISO-8859-1"), "UTF-8");

           String likes[] = request.getParameterValues("hobby");

           String year = request.getParameter("year");

           String month = new String(request.getParameter("month").getBytes("ISO-8859-1"),"utf-8");

           String day = request.getParameter("day");

       %>

       您提交的信息爲:

       <p>用戶名:<%=name%></p>

       <p>密碼:<%=pass%></p>

       <p>性別:<%=sex%></p>

       <p>愛好:

           <%

              for (String str : likes) {

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

              out.print(like + "   ");

           }%></p>

       <p> 出生日期: <%=year%>&nbsp;<%=month%>&nbsp;<%=day%></p>

    </body>

</html>


上一頁面點擊“註冊”後會出現下面的頁面:


 response(重點): ServletResponse <-- HttpServletResponse

response對象用於將服務器端數據發送到客戶端,可通過在客戶端瀏覽器顯示、用戶瀏覽頁面的重定向以及在客戶端創建Cookies等實現。

response對象實現HttpServletResponse接口,可以對客戶的請求做出動態的響應,向客戶端發送數據。以下是response對象的主要方法:

■      addHeader(String name,String value):添加HTTP頭文件,該頭文件將會傳到客戶端去,如果有同名的頭文件存在,那麼原來的頭文件會被覆蓋。

■      setHeader(String name,String value):設定指定名字的HTTP文件頭的值,如果該值存在,那麼它將會被新的值覆蓋。

■      containsHeader(String name):判斷指定名字的HTTP文件頭是否存在,並返回布爾值。

■      flushBuffer():強制將當前緩衝區的內容發送到客戶端。

■      addCookie(Cookie cookie):添加一個Cookie對象,用來保存客戶端的用戶信息,可以用request對象的getCookies()方法獲得這個Cookie。

■      sendError(int型錯誤編號,"錯誤信息"):向客戶端發送錯誤信息。例如,“505”指示服務器內部錯誤,“404”指示網頁找不到的錯誤。

■      setRedirect(url):把響應發送到另一個指定的頁面(URL)進行處理。

響應轉發:response.sendRedirect("要轉向的url");即客戶端轉發,瀏覽器的url會發生變化。

刷新界面:response.setIntHeader("refresh",10);  10秒後刷新本頁面

          response.setHeader("refresh","3;url=要刷新到的頁面"); 【注意參數形式】

使用HTML語言的HTTP-EQUIV也可以:

<METAHTTP-EQUIV="Refresh" CONTENT=" 10; URL=http://Server/Path">


發佈了40 篇原創文章 · 獲贊 39 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章