JSP內置對象(基礎二上)out,request,response

jsp內置對象主要有:
out,request,response,session,application,page,pageContext,exception,config。

  • out內置對象
    out對象是JspWrite類的示例,是向客戶端輸出內容常用的類。
    常用方法:
    1.void println()向客戶端打印字符串
    2.void clear()清除緩衝區內容,如果在flush之後調用會拋出異常
    3.void clearBuffer()清除緩衝區內容,如果在flush之後調用不會拋出異常
    4.void flush將緩衝區內容輸出到客戶端
    5.int getBufferSize()返回緩衝區字節數的大小,如果不設緩衝區則爲0
    6.int getReMaining()返回緩衝區剩餘多少可用
    7.boolean isAutoFlush()返回緩衝區滿時,是自動清空還是拋出異常
    8 void close()關閉輸出流
    運用:

  <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <h1>out內置對象</h1>
    <% 
       out.println("<h2>靜夜思</h2>");
       out.println("牀前明月光<br>");
       out.println("疑是地上霜<br>");
       out.flush();
       //out.clear();//這裏會拋出異常。
       out.clearBuffer();//這裏不會拋出異常。
       out.println("舉頭望明月<br>");
       out.println("低頭思故鄉<br>");

    %>
        緩衝區大小:<%=out.getBufferSize() %>byte<br>
        緩衝區剩餘大小:<%=out.getRemaining() %>byte<br>
       是否自動清空緩衝區:<%=out.isAutoFlush() %><BR>    
  </body>
</html>
  • request對象
    首先介紹表單的get提交與post提交方式的區別。
    1.get提交
    get提交以明文的方式通過URL提交數據,提交的數據最多不超過2KB,安全較低但效率比post高,適合提交數據量不大,安全性不高的數據,比如:搜索,查詢功能。
    post提交是將用戶提交的信息封裝在HTML HEADER內,適合用於提交數據量大,安全性高的用戶信息,比如:註冊,修改,上傳等功能。
    客戶端請求的信息被封裝在request對象中,通過它才能瞭解客戶的需求,做出響應,它是httpSerlvetRequest類的實例。request對象具有請求作用域,即完成客戶端請求之前,該對象一直有效。
    常用方法:
    void setAttribute(String name,Object):設置名字爲name的request 的參數值
    Object getAttribute(String name):返回由name指定的屬性值
    getAttributeNames():返回request 對象所有屬性的名字集合,結果是一個枚舉的實例
    getCookies():返回客戶端的所有 Cookie 對象,結果是一個Cookie 數組
    getCharacterEncoding() :返回請求中的字符編碼方式
    getContentLength() :返回請求的 Body的長度
    getHeader(String name) :獲得HTTP協議定義的文件頭信息
    getHeaders(String name) :返回指定名字的request Header 的所有值,結果是一個枚舉的實例
    getHeaderNames() :返回所以request Header 的名字,結果是一個枚舉的實例
    getInputStream() :返回請求的輸入流,用於獲得請求中的數據
    getMethod() :獲得客戶端向服務器端傳送數據的方法
    String getParameter(String name) :獲得客戶端傳送給服務器端的有 name指定的參數值
    getParameterNames() :獲得客戶端傳送給服務器端的所有參數的名字,結果是一個枚舉的實

    String[] getParameterValues(String name):獲得有name指定的參數的所有值
    String getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
    getQueryString() :獲得查詢字符串
    getRequestURI() :獲取發出請求字符串的客戶端地址
    getRemoteAddr():獲取客戶端的 IP 地址
    getRemoteHost() :獲取客戶端的名字
    getSession([Boolean create]) :返回和請求相關 Session
    String getServerName() :獲取服務器的名字
    String getContentType:得到請求體的MIME類型
    getServletPath():獲取客戶端所請求的腳本文件的路徑
    getServerPort():獲取服務器的端口號
    removeAttribute(String name):刪除請求中的一個屬性

實例
實現用戶表單提交

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'login.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
     <h1>用戶登錄</h1>
    <hr>
    <form action="request.jsp" method="post">
    <table>
        <tr>
            <td>用戶名:</td>
            <td><input type="text" name="username"/></td>
        </tr>
         <tr>
        <td>愛好:</td>
        <td>
           <input type="checkbox" name="favorite" value="read">讀書
           <input type="checkbox" name="favorite" value="music">音樂
           <input type="checkbox" name="favorite" value="movie">電影
           <input type="checkbox" name="favorite" value="internet">上網
        </td>
      </tr>
      <tr>
         <td colspan="2"><input type="submit" value="提交"/></td>
      </tr>
    </table>
    </form>
    <br>
    <br>
    <a href="request.jsp?username=李四">測試URL傳參數</a>
  </body>
</html>

request.jsp頁面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'request.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
   <h1>request內置對象</h1>
    <% 
       request.setCharacterEncoding("utf-8"); 
       //解決中文亂碼問題,無法解決URL傳遞中文出現的亂碼問題。
       //解決URL傳遞中文亂碼需到tomcat下的server.xml內加入URIEncoding="utf-8"
       request.setAttribute("password", "123456");

    %>
        用戶名:<%=request.getParameter("username") %><br>   
        愛好 :<% 
           if(request.getParameterValues("favorite")!=null)
           {
               String[] favorites = request.getParameterValues("favorite");
               for(int i=0;i<favorites.length;i++)
               {
                  out.println(favorites[i]+"&nbsp;&nbsp;");
               }
            }
        %> <br>
         密碼:<%=request.getAttribute("password") %><br> 
         請求體的MIME類型:<%=request.getContentType() %><br>
         協議類型及版本號:  <%=request.getProtocol() %><br>
         服務器主機名 :<%=request.getServerName() %><br>
         服務器端口號:<%=request.getServerPort() %><BR>
         請求文件的長度 :<%=request.getContentLength() %><BR>
         請求客戶端的IP地址:<%=request.getRemoteAddr() %><BR>
         請求的真實路徑:<%=request.getRealPath("request.jsp") %><br>
         請求的上下文路徑:<%=request.getContextPath() %><BR>         


  </body>
</html>

解決URL傳遞中文亂碼:
打開tomcat->conf->server.xml
加入:URIEncoding=”utf-8”
這裏寫圖片描述

  • response對象
    response是HttpSerlvetResponse類的實例,response對象具有頁面作用域,即訪問一個頁面時,該頁面的response對象只能對這次訪問有效,其他頁面的response對當前頁面無效。
    常用方法:
    String getCharacterEncoding()返回響應用的是何種字符編碼
    void setContentType(String type)設置響應MIME類型
    PrintWrite getWrite()返回可以向客戶端輸出字符的一個對象
    sendRedirect(java.lang.String location)重新定向客戶端的請求
    實例
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%
    response.setContentType("text/html;charset=utf-8"); //設置響應的MIMI類型

    out.println("<h1>response內置對象</h1>");
    out.println("<hr>");
    //out.flush();

    PrintWriter outer = response.getWriter(); //獲得輸出流對象
    outer.println("大家好,我是response對象生成的輸出流outer對象");
    response.sendRedirect("login.jsp");//請求重定向
    //請求重定向
    //response.sendRedirect("request.jsp");
    //請求轉發
   // request.getRequestDispatcher("request.jsp").forward(request, response);
%>

請求轉發與請求重定向的區別:
請求重定向:客戶端行爲,response.sendRedirect();從本質上講,相當於兩次請求,前一次請求對象不會保存,地址欄的URL地址會改變。如上例子從login.jsp表單提交到response.jsp,頁面調用response.sendRedirect(“request.jsp”)(取消註釋);則地址欄是request.jsp,且提交的對象未保存。

請求轉發:request.getRequestDispatcher().forward(request, response);
是一次請求,請求對象會保存,地址欄的url地址不會變。如上例子從login.jsp表單提交到response.jsp,頁面調用request.getRequestDispatcher(“request.jsp”).forward(request, response)(取消註釋);則地址欄是response.jsp,提交的對象保存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章