6、JSP內建對象

來源:互聯網
上載者:User

JSP有九個內建對象:

- Request ——請求對象
- Response—— 響應對象
- PageContext ——頁面內容物件
- Session ——會話對象
- Application ——應用程式物件
- Out ——輸出對象
- Config ——設定物件
- Page ——頁面對象
- Exception ——異常對象

out內建對象有println方法,它是對產生的html原始碼換行,而不是瀏覽器顯示中的換行,瀏覽器頁面中的換行用<br>標籤

重點內建對象:request,session,application

1、request和response

“request”對象代表的是來自用戶端的請求,例如在form表單中填寫的資訊等,是最常使用的對象。它的方法使用較多的是getParameter、getParameterNames和getParameterValues,通過調用這幾個方法來擷取請求對象中所包含的參數的值。
“response”對象代表的是對用戶端的響應,也就是說可以通過“response”對象來組織發送到用戶端的資料。但是由於組織方式比較的底層,所以不建議普通讀者使用,需要向用戶端發送文字時直接使用“out”對象即可。

對於request,它的getParameter方法是getParameterValues方法的特例,表示請求的參數值只有一個,如果請求參數值有多個,請使用getParameterValues方法。在多選框的情況下,需要使用getParameterValues方法來擷取使用者所選擇的多個複選框的值。

對於如下的頁面:

<body>    <form action="result.jsp" method="post">        username:<input type="text" name="username"><br>    password:<input type="password" name="password"><br>    age:<input type="text" name="age">    age1:<input type="text" name="age">    <input type="submit" value=" submit" >      <input type="reset" value="reset" >     </form>  </body>


result.jsp中:

<body>     <% String username = request.getParameter("username");     String password = request.getParameter("password");          out.println("username:" + username +"<br>");     out.println("password:" + password + "<br>");          String[] values = request.getParameterValues("age");     for(String value : values)     {     System.out.println(value);     }          String value1 = request.getParameter("age");     System.out.println(value1);     %>  </body>


values是一個字串數組,列印出age和age1的內容,value1隻列印出匹配的第一個值。

 “response”對象代表的是對用戶端的響應,也就是說可以通過“response”對象來組織發送到用戶端的資料。但是由於組織的方式比較底層,所以不建議普通讀者使用,需要向用戶端發送文字時直接使用“out”對象即可。“response”一般是用在檔案下載。

2、session對象:“session”對象代表格服務器與用戶端所建立的會話,當需要在不同的JSP頁面中保留客戶資訊的情況下使用,比如線上購物、客戶軌跡跟蹤等。

    - HTTP是無狀態(stateless)協議;、Web Server對每個用戶端請求都沒有曆史記憶;session用來儲存用戶端狀態資訊

三個jsp頁面示範session值的傳遞:

session1.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>  <head>    <title>My JSP 'session1.jsp' starting page</title>  </head>  <body>    <form action="session2.jsp">    姓名:<input type="text" name="username">     <input type="submit" value="submit">    </form>  </body></html>session2.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>  <head>    <title>My JSP 'session2.jsp' starting page</title>  </head>  <body>    <%     String name = request.getParameter("username");    session.setAttribute("logName",name);    %>    你的名字:<%= name %>已經寫入session<a href="session3.jsp">check</a> </body></html>session3.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>  <head>    <title>My JSP 'session3.jsp' starting page</title>  </head>  <body>    <% String yourName =(String) session.getAttribute("logName");    if(yourName == null) {    %>    你還沒有登入   <% } else { %>   "<%= yourName %>"已經登入   <% } %>  </body></html>

 

3、application對象——負責提供應用程式在伺服器中運行時的一些全域資訊,常用的方法有getMimeType和getRealPath等
4、out:“out”對象代表了向用戶端發送資料的對象,與“response”對象不同,通過“out”對象發送的內容將是瀏覽器需要顯示的內容,是文本一級的,可以通過“out”對象直接向用戶端寫一個由程式動態產生HTML檔案。常用的方法除了print和println之外,還包括clear、clearBuffer、flush、getBufferSize和getRemaining,這是因為“out”對象內部包含了一個緩衝區,所以需要一些對緩衝區進行操作的方法。

5、config對象——提供一些配置資訊,常用的方法有getInitParameter和getInitParameterNames,以擷取Servlet初始化時的參數。

    page對象——代表了正在啟動並執行由JSP檔案產生的類對象,不建議一般讀者使用。

    exception對象——代表了JSP檔案運行時所產生的異常對象,此對象不能在一般JSP檔案中直接使用,而只能在使用了“<%@ page isErrorPage="true" %>”的JSP檔案中使用。

6、request、session、application比較

1)request請求對象:getAttribute,以對象形式返回特性名稱的屬性值。如果所給名稱的屬性不存在將返回空;setAttribute,設定

request1.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>  <head>    <title>My JSP 'request1.jsp' starting page</title>  </head>  <body>    <form action="request2.jsp">    username:<input type="text" name="username">    <input type="submit" value="submit">        </form>  </body></html>request2.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>  <head>    <title>My JSP 'request2.jsp' starting page</title>  </head>  <body>    <% String username = request.getParameter("username"); %>    username:<%= username %>    <% request.setAttribute("username",username); %>    <%--     <jsp:forward page="request3.jsp"></jsp:forward>    --%>    <a href="request3.jsp">request3.jsp</a>  </body></html>request3.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>  <head>    <title>My JSP 'request3.jsp' starting page</title>  </head>    <body>    <% String username =(String) request.getAttribute("username"); %>    <%= username %>  </body></html>


對於request2.jsp,如果使用<a href="request3.jsp">則點選連結時,request3.jsp顯示null,如果request2.jsp使用<jsp:forward page="request3.jsp>這是請求轉寄,request3.jsp將顯示request1.jsp中輸入的名字。主要是看是不是在一次請求當中。

request的getParameter是用戶端的請求資訊,getAttribute則是伺服器端以前通過setAttribute設定的資訊,完全是伺服器端的事情。

getAttribute與setAttribute方法一般都是成對出現的,首先通過setAttribute方法設定屬性與屬性值,然後通過getAttribute方法根據屬性擷取到與該屬性對應的對象值(擷取後一般需要進行向下類型轉換,將屬性值轉換為真正地對象)。setAttribute與getAttribute方法都是在伺服器端內部執行的,用戶端不知道伺服器端是否執行過這兩個方法;

request的getParameter方法的作用是擷取到用戶端通過表單或url請求參數所發送過來的參數值,是用戶端與伺服器端之間的互動,伺服器端想要擷取到用戶端發送過來的資料,就需要使用getParameter方法擷取。沒有與getPArameter方法對應的setParameter方法。

request對象內資料的存活範圍就是在request對象的存活範圍內,當用戶端向伺服器端發送一個請求,伺服器端向用戶端返回一個響應,該請求對象就被銷毀了;之後在向伺服器端發送新的請求時,伺服器會建立新的request對象,該request對象與之前的request對象沒有任何關係,因此也無法獲得在之前的request對象中所存在的任何資料。

2)session對象也有getAttribute和setAttribute方法,session對象內資料的存活範圍就是session對話的存活範圍(只要瀏覽器不關閉,session對象就會一直存在),因此在同一個瀏覽器視窗中,無論向伺服器端發送多少請求,session對象只有一個

3)application對象也有getAttribute和setAttribute方法,application 應用對象:存活範圍最大的對象,只要伺服器沒有關閉,application對象中的資料就會一直存在,在整個伺服器運行過程中,application對象只有一個

4)request、session以及application這3個對象的範圍是逐個增加的:request只在一個請求的範圍內;session是在瀏覽器視窗的範圍內;application則是在整個伺服器的運行過程中。

利用application編寫網頁計數器:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><html>  <head>    <title>My JSP 'application.jsp' starting page</title>  </head>  <body>    <%    if(application.getAttribute("counter") == null)    application.setAttribute("counter","1");    else    {    String strnum = null;    strnum = application.getAttribute("counter").toString();    int icount = 0;        icount = Integer.valueOf(strnum).intValue();    icount++;    application.setAttribute("counter",Integer.toString(icount));    }    %>    你是第<%= application.getAttribute("counter") %>位訪問者。  </body></html>


7、關於<jsp:formard>轉換為servlet,是使用了PageContext.forward方法來進行請求轉寄的

使用servlet來完成jsp:forward功能:

<%@ 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 'myforward.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>    <form action="MyForwardServlet">    username<input type="text" name="username">    <input type="submit" value="submit">        </form>  </body></html>


servlet

import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyForwardServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{String username = req.getParameter("username");req.setAttribute("username", username);RequestDispatcher rd = req.getRequestDispatcher("myResult.jsp");rd.forward(req, resp);}}


 

<%@ 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 'myResult.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>    username:<%= request.getAttribute("username") %>  </body></html>


 servlet中使用setAttribute主要是設定通過用戶端傳來的參數然後查詢資料庫等獲得的資料,然後在傳遞到下一個頁面進行展示:

import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyForwardServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{String username = req.getParameter("username");req.setAttribute("username", username);List<String> list = new ArrayList<String>();for(int i = 0;i < 100;i++){list.add(String.valueOf(i));}req.setAttribute("list", list);RequestDispatcher rd = req.getRequestDispatcher("myResult.jsp");rd.forward(req, resp);}}

8、application的一些方法(application是ServletContext的對象):getMajorVersion、getMinorVersion、getResource、getRealPath——用的比較多,返回資源的絕對路徑

9、關於<input type="hidden" >在進行不同網頁之間傳遞資訊時,通常使用hidden標籤,而不是使用session來儲存,因為session比較消耗記憶體。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.