1. 程式人生 > >jsp內建物件之response、out、config、exception、pageContext。

jsp內建物件之response、out、config、exception、pageContext。

本文是對Jsp內建物件的response、out、config、exception、pageContext知識點的詳細總結。

response物件

Response內建物件和request內建物件是相應的,response內建物件用於相應客戶請求,向客戶端輸出資訊;Javax.servlet.HttpServletResponse介面

1、自動重新整理應用

<%

    //每隔一秒重新整理一次時間:

    response.setHeader("refresh", "1");

    //獲取當前時間:

    Date mydate=new Date();

%>

<%=mydate.toLocaleString() %>

2、頁面重新定向應用 客戶端跳轉(使用JSP寫了一個登入介面)

jsp登入介面(responseScope.jsp),實現了記住密碼,再次登入的時候能夠直接輸入賬號和密碼。。。。從cookie中讀取,UserLogin.jsp中將使用者名稱和密碼存在了cookie中。

<%@ 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=utf-8">
<title>內建物件pageContext</title>
<script type="text/javascript">
     function resetValue(){
    document.getElementById(
"username").value=""; document.getElementById("pwd").value=""; } </script> </head> <% String userName=null; String Pwd=null; Cookie []cookies=request.getCookies(); for(int i=0;cookies!=null&& i<cookies.length;i++){ if(cookies[i].getName().equals("usernameAndpwd")){ userName
= cookies[i].getValue().split("-")[0]; Pwd=cookies[i].getValue().split("-")[1]; } } if(userName==null){ userName=""; } if(Pwd==null){ Pwd=""; } %> <body> <form action="UserLogin.jsp" method="post" > <table> <tr> <td>使用者名稱:</td> <td><input type="text" id="username"name="username" value="<%=userName %>" /></td> </tr> <tr> <td>密碼:</td> <td><input type="password" id="pwd" name="pwd" value="<%=Pwd %>"/></td> </tr> <tr> <td>記住密碼:</td> <td><input type="checkbox" name="remember" value="remember-me"/></td> </tr> <tr> <td><input type="submit" value="登入"></td> <td><input type="button" value="重置" onclick="resetValue()"/></td> </tr> </table> </form> </body> </html>
responseScope.jsp

 儲存到cookie中。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
 <%@ page import="javax.servlet.http.*" %>
<!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=utf-8">
<title>UserLogin.jsp</title>
</head>
<body>
      <%
     String username =request.getParameter("username");
     String pwd=request.getParameter("pwd");
     String remember=request.getParameter("remember"); 
      if("remember-me".equals(remember)){
          Cookie usernameAndpwd=new Cookie("usernameAndpwd",username+"-"+pwd);
          usernameAndpwd.setMaxAge(1*60*60*24*7);//設定儲存的時間週期是一週;
          response.addCookie(usernameAndpwd);  
      }
      response.sendRedirect("responseScope02.jsp"); 
      %>
</body>
</html>
UserLogin.jsp

3、4是對cookie和session的比較問題。

3、操作cookie應用postget方法比較 post放在資料包裡,get放在Url後面 get資料量小,不安全;

4cookiesession的比較 cookie資訊是存客戶端的,session資訊是存伺服器的;

out物件

Out內建物件主要是用來向客戶端輸出各種型別的資料,同時還可以管理應用伺服器上的輸出緩衝區。所以out內建物件的方法是向客戶端輸出資料和管理緩衝區;底層javax.servlet.jsp.JspWriter抽象類。

 這裡舉了兩個例子:

<%@ 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=utf-8">
<title>out</title>
</head>
<body>
<%  //向客戶端輸出各種型別的資料

    out.println("<h1>");
    out.println("Hello Jsp & Servlet");
    out.println("</h1>");
    //獲取緩衝區的大小管理應用伺服器上的輸出緩衝區    int totalbuffer=out.getBufferSize();
int unuse=out.getRemaining();//獲取未使用的緩衝區的大小
    int user=totalbuffer-unuse;
    out.println("緩衝區總共大小為"+totalbuffer);
    out.println("未使用的緩衝區的大小為"+unuse);
    out.println("已經使用的緩衝區的大小為"+user);
%>
<h1> </h1>
</body>
</html>

config物件

Config內建物件是Jsp頁面通過Jsp容器進行初始化時被傳遞的物件。Javax.servlet.ServletConfig。在Servlet初始化的時候,JSP引擎通過config向它傳遞資訊。這種資訊可以是屬性名和屬性值匹配的引數,也可以是通過ServletContext物件傳遞的伺服器的相關資訊。

 這裡的需要對web.xml進行配置,路徑:WebContent->WEB-INF->web.xml

配置程式碼如下(在<web-app></web-app>之間插入下面的程式碼):

<servlet>
          <servlet-name>init</servlet-name>
          <jsp-file>/sysInit.jsp</jsp-file>
          <init-param>
              <param-name>jdbcName</param-name>
              <param-value>com.mysql.jdbc.Driver</param-value>
          </init-param>
          <init-param>
              <param-name>dbUrl</param-name>
              <param-value>jdbc:mysql://localhost:3306/db_xxx</param-value>
          </init-param>
  </servlet>
     <servlet-mapping>
          <servlet-name>init</servlet-name>
          <url-pattern>/init</url-pattern>
      </servlet-mapping>

其中客戶端請求init的時候,在<servlet-mapping></servlet-mapping>中尋找到servlet-name然後到url-pattern路徑中找到init檔案,之後在<servlet></servlet>之間找到servlet-name為init,下一步對映到jsp-file中找到sysInit.jsp檔案。(開啟sysInit.jsp檔案)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
 <%@ page import="javax.servlet.http.*" %>
<!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=utf-8">
<title>UserLogin.jsp</title>
</head>
<body>
      <%
         String jdbcName=config.getInitParameter("jdbcName");
         String  dbUrl=config.getInitParameter("dbUrl");
      %>
      <h1>資料庫名稱: <%=jdbcName%></h1>
      <h1>連線池地址:<%=dbUrl %></h1>
</body>
</html>
sysInit.jsp

開啟之後我們看到輸出結果。

exception物件

  Exception內建物件用來處理JSP檔案在執行時發生的異常,它是java.lang.Throwable類的一個物件。

 我們寫一個簡單的例子:

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <%@page errorPage="error.jsp" %>
 4  
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 9 <title>exception</title>
10 </head>
11 <body>
12      <%
13      int a=1;
14      int b=0;
15      out.print(a/b);
16      %>
17 </body>
18 </html>
exception01.jsp

在程式碼中我們可以看到

<%@page errorPage="error.jsp" %>

錯誤資訊傳遞到了error.jsp檔案。在error.jsp檔案內利用exception獲取錯誤資訊。內建物件out 輸出結果。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<%@ page isErrorPage="true" %>
<!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=utf-8">
<title>ErrorMessage.jsp</title>
</head>
<body>
     <% if(exception!=null){
         out.println("程式出錯,錯誤資訊是");
         out.println(exception.getMessage());
     }
     %>
</body>
</html>
error.jsp

pageContext物件

pageContext內建物件是一個比較特殊的物件,它相當於頁面中所有物件功能的集合,即使用它可以訪問到本頁面中所有物件。pageContext內建物件由jsp容器建立並初始化,pageContext物件提供了對JSP頁面所有物件及控制元件的訪問。

 例子是讓page,request,session application分別設定數值。然後pageContext取出輸出。

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 7 <title>內建物件pageContext</title>
 8 </head>
 9 <body>
10 <%  
11     //利用pagecontext設定page request session application的值。
12     pageContext.setAttribute("name0", "pageContext");
13     request.setAttribute("name1", "requestInfo");
14     session.setAttribute("name2","sessionInfo");
15       application.setAttribute("name3","applicationInfo");
16       //利用pageContext獲取取值
17     out.println("pageContext: "+pageContext.getAttribute("name0")+"<br/>");
18       out.println("request: "+pageContext.getRequest().getAttribute("name1")+"<br/>");
19       out.println("session: "+pageContext.getSession().getAttribute("name2")+"<br/>");
20       out.println("application: "+pageContext.getServletContext().getAttribute("name3"));
21 %>
22 </body>
23 </html>
pageContext