国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

JavaWeb學習----JSP內置對象詳解

2019-11-14 21:42:26
字體:
來源:轉載
供稿:網友
javaWeb學習----jsp內置對象詳解

【聲明】

歡迎轉載,但請保留文章原始出處→_→

生命壹號:http://www.survivalescaperooms.com/smyhvae/

文章來源:http://www.survivalescaperooms.com/smyhvae/p/4065790.html

聯(lián)系方式:smyhvae@163.com

【系列】JSP學習系列文章:(持續(xù)更新)

JavaWeb學習(一)----JSP簡介及入門(含Tomcat的使用)

JavaWeb學習(二)----JSP腳本元素、指令元素、動作元素

JavaWeb學習(三)----JSP內置對象詳解

【正文】

呼~~~花了一下午的時間,終于把JSP的內置對象的內容學完了,并做好了筆記,方便以后回顧。

今天是10月的最后一天,小小地總結一下吧,這個月共發(fā)表博客25篇(排版好麻煩的說),所有內容均由生命壹號本人敲鍵盤碼起。基本是一天一篇,包括國慶的時候也是獨霸教研室在學習,學習的大致內容也是和數(shù)據庫、JavaWeb有關。畢竟以后搞開發(fā)不可能是單機吧,網絡的部分是多么的重要。下個月要提高學習效率,學習任務要加大,爭取早日進入工程實踐,嘿嘿~~~

菜鳥加油,恩,說我自己呢!

騷年矜持,恩,在說你咧!

一、內置對象介紹

JSP內置對象:可以不用聲明和創(chuàng)建,就可以直接在JSP頁面腳本(Java程序片和Java表達式)中使用的成員變量。

那為什么不用生命和創(chuàng)建就可以直接使用呢?這是因為,內置對象必須由支持JSP的容器去創(chuàng)建。例如Tomcat就是一個容器。

JSP共有以下9大內置對象:

前四個是重點,后五個了解即可。這九個內置對象中,有四個作用域:request、session、application、page。作用域即這個對象的生命周期的范圍。

二、內置對象out

類型:Javax.servlet.jsp.JspWriter

作用:主要用來向客戶端輸出數(shù)據

作用域:page。也就是說,每個頁面都有一個自己的out對象。

重要方法:PRint()/println()/write() 向客戶端頁面輸出數(shù)據

舉例:

out.write("文字內容");

我們再到D:/apache-tomcat-8.0.14/work/Catalina/localhost目錄中去看一下生成的Java源代碼:

1ae8844c-13fa-4c89-96c2-67476d279f4f

完整版代碼如下:

/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/8.0.14 * Generated at: 2014-10-31 11:14:54 UTC * Note: The last modified time of this file was set to *       the last modified time of the source file after *       generation to assist with modification tracking. */package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase    implements org.apache.jasper.runtime.JspSourceDependent {  private static final javax.servlet.jsp.JspFactory _jspxFactory =          javax.servlet.jsp.JspFactory.getDefaultFactory();  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;  private javax.el.ExpressionFactory _el_expressionfactory;  private org.apache.tomcat.InstanceManager _jsp_instancemanager;  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {    return _jspx_dependants;  }  public void _jspInit() {    _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();    _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());  }  public void _jspDestroy() {  }  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)        throws java.io.IOException, javax.servlet.ServletException {final java.lang.String _jspx_method = request.getMethod();if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");return;}    final javax.servlet.jsp.PageContext pageContext;    javax.servlet.http.HttpSession session = null;    final javax.servlet.ServletContext application;    final javax.servlet.ServletConfig config;    javax.servlet.jsp.JspWriter out = null;    final java.lang.Object page = this;    javax.servlet.jsp.JspWriter _jspx_out = null;    javax.servlet.jsp.PageContext _jspx_page_context = null;    try {      response.setContentType("text/html; charset=UTF-8");      pageContext = _jspxFactory.getPageContext(this, request, response,                  null, true, 8192, true);      _jspx_page_context = pageContext;      application = pageContext.getServletContext();      config = pageContext.getServletConfig();      session = pageContext.getSession();      out = pageContext.getOut();      _jspx_out = out;      out.write("/r/n");      out.write("<!DOCTYPE html PUBLIC /"-//W3C//DTD HTML 4.01 Transitional//EN/" /"http://www.w3.org/TR/html4/loose.dtd/">/r/n");      out.write("<html>/r/n");      out.write("<head>/r/n");      out.write("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=UTF-8/">/r/n");      out.write("<title>Insert title here</title>/r/n");      out.write("</head>/r/n");      out.write("<body>/r/n");    out.println("文字內容");      out.write("/r/n");      out.write("</body>/r/n");      out.write("</html>");    } catch (java.lang.Throwable t) {      if (!(t instanceof javax.servlet.jsp.SkipPageException)){        out = _jspx_out;        if (out != null && out.getBufferSize() != 0)          try {            if (response.isCommitted()) {              out.flush();            } else {              out.clearBuffer();            }          } catch (java.io.IOException e) {}        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);        else throw new ServletException(t);      }    } finally {      _jspxFactory.releasePageContext(_jspx_page_context);    }  }}
View Code

在這里,我們可以這樣理解,一個Jsp文件編譯之后就是一個類,而out就對應一個頁面對象。

三、內置對象request

類型:Javax.servlet.http.HttpServletRequest

描述:來自客戶端的請求經Servlet容器處理后,由request對象進行封裝。注:客戶端和服務器的一次通信就是一次請求(發(fā)送請求或得到相應)。

作用域:request。說明,這次請求結束后,它的生命周期 就結束了。

重要方法:

getParameter(key) 獲取提交表單的數(shù)據getParameterValues(key) 獲取提交表單的一組數(shù)據request.getRequestDispatcher("list.jsp").forward(request,response) 轉發(fā)(通過代碼的方式進行轉發(fā))request.setAttribute(key,object) 設置請求對象的屬性request.gettAttribute(key) 獲取請求對象的屬性request.setCharacterEncoding("UTF-8") 對請求數(shù)據重新編碼

我們接下來將每個方法都介紹一下。

(1)getParameterValues(key) 獲取提交表單的數(shù)據

舉例:輸入用戶名密碼,并驗證正確性。

新建JavaWeb工程Test04,新建request.jsp文件,代碼如下:

 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>Insert title here</title> 8 </head> 9 <body>10     <form action="request-receiver.jsp">11         username:<input  type="text" name="user"/><br/>12         passWord:<input  type="password" name="pwd"/><br/>13         14         <input type="submit" name="登陸"/>        15     </form>16 </body>17 </html>

10至15行:添加表單,在里面輸入用戶名密碼,然后將數(shù)據發(fā)送至request-receiver.jsp頁面來處理(第10行的action里面的內容)。

新建request-receiver.jsp文件:

 1 <% 2 //獲取請求數(shù)據 3 String name = request.getParameter("user"); 4 String pwd = request.getParameter("pwd"); 5 System.out.println(name+","+pwd); 6  7 if("smyh".equals(name) && "007".equals(pwd)) { 8     out.println("登陸成功");     9 }else{10     out.println("errors");11 }12 %>

像request-receiver.jsp這樣的頁面,如果不需要顯示在網頁上,可以把自動生成的html代碼全部刪除。

整個過程是這樣的:

QQ圖片20141031112038

運行程序,當我們在網頁輸入正確的用戶名之后,效果如下:

dc4eab30-df18-4375-8993-6dd32ca2f965

然后點擊“提交”,效果如下:

c21d473e-cb21-4e15-8e2e-592424799dcc

【亂碼問題的解決】

顯然我們已經登錄成功了,但是這里出現(xiàn)了亂碼。原因是:Tomcat默認編碼為:iso8859-1。request.jsp頁面發(fā)出去的數(shù)據是UTF-8編碼,經過tomcat服務器后,變成了iso8859-1編碼,所以需要在request-receiver.jsp將數(shù)據再轉回來,變成UTF-8編碼(這個問題涉及到另外一個內置對象,稍后再講)。

另外一個問題是,如果我們輸入的是中文的用戶名,也可能出現(xiàn)亂碼,可以在request-receiver.jsp文件里,加一句代碼讓用戶名、密碼在控制臺輸出顯示,看一下就知道了。

為解決亂碼的問題,我們需要在request-receiver.jsp文件中加一句話:

//設置請求方式的編碼

request.setCharacterEncoding("UTF-8");

這樣的話,就將獲取到的數(shù)據改為了UTF-8編碼。

此時,如果在控制臺輸出的用戶名還出現(xiàn)亂碼,是因為還涉及到了另外一個問題:在request.jsp中發(fā)送請求,默認是采用get方式,這個時候,參數(shù)就會作為url的一部分一起發(fā)給服務器(見上方圖片中的url地址),而url的編碼很顯然不是UTF-8。所以,我們需要將其改為post方式。總而言之,完整版代碼如下:

request.jsp:輸入用戶名密碼,并提交給request-receiver.jsp:

 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>Insert title here</title> 8 </head> 9 <body>10     <form action="request-receiver.jsp" method="post">11         username:<input  type="text" name="user"/><br/>12         password:<input  type="password" name="pwd"/><br/>13         14         <input  type="submit" name="登陸"/>        15     16     </form>17 </body>18 </html>

第10行,將提交方式改為post,而非默認的get方式。

request-receiver.jsp:驗證用戶名、密碼的正確性

 1 <% 2 //獲取請求數(shù)據 3 //設置請求方式的編碼 4 request.setCharacterEncoding("UTF-8"); 5 String name = request.getParameter("user"); 6 String pwd = request.getParameter("pwd"); 7 System.out.println(name+","+pwd); 8  9 if("smyh".equals(name) && "007".equals(pwd)) {10     out.println("登陸成功");    11 }else{12     out.println("errors");13 }14 %>

第4行,將獲取到的請求數(shù)據還原為UTF-8的方式。

(2)getParameterValues(key) 獲取提交表單的一組數(shù)據

我們現(xiàn)在往request.jsp中添加一組單選按鈕:

 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>Insert title here</title> 8 </head> 9 <body>10     <form action="request-receiver.jsp" method="post">11         username:<input  type="text" name="user"/><br/>12         password:<input  type="password" name="pwd"/><br/>13         <input type="checkbox" name="likes" value="羽毛球">羽毛球14         <input type="checkbox" name="likes" value="攝影">攝影15         <input type="checkbox" name="likes" value="音樂">音樂16         <br/>17                 18         <input  type="submit" name="登陸"/>        19     20     </form>21 </body>22 </html>

13至15行是添加的三個單選按鈕,構成了數(shù)組“likes”。

然后在request-receiver.jsp中獲取這個數(shù)組,并在控制臺輸出:

 1 <% 2 //獲取請求數(shù)據 3 //設置請求方式的編碼 4 request.setCharacterEncoding("UTF-8"); 5 String name = request.getParameter("user"); 6 String pwd = request.getParameter("pwd"); 7 System.out.println(name+","+pwd); 8  9 String[] likes = request.getParameterValues("likes");10 for(int i =0;i<likes.length;i++) {11     System.out.println(likes[i]);12 }13 14 if("smyh".equals(name) && "007".equals(pwd)) {15     out.println("登陸成功");    16 }else{17     out.println("errors");18 }19 %>

運行后,輸入對應值:

fd1c9edc-350f-435d-9308-5fd2ef423866

后臺輸出如下:

aaa17a7b-111d-4528-b59e-1f499038534c

(3)request.getRequestDispatcher("list.jsp").forward(request,response) 轉發(fā)(通過代碼的方式進行轉發(fā))

(4)request.setAttribute(key,object) 設置請求對象的屬性

(5)request.gettAttribute(key) 獲取請求對象的屬性

現(xiàn)在的情形是,request.jsp負責發(fā)數(shù)據,request-receiver.jsp負責處理數(shù)據(判斷用戶名密碼的正確性),如果用戶名密碼正確,那我們就通過request.getRequestDispatcher(request-success.jsp),將請求轉發(fā)給request-success.jsp頁面,顯示出“登陸成功”的效果。

request.jsp代碼不變:

 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>Insert title here</title> 8 </head> 9 <body>10     <form action="request-receiver.jsp" method="post">11         username:<input  type="text" name="user"/><br/>12         password:<input  type="password" name="pwd"/><br/>13                 14         <input  type="submit" name="登陸"/>        15     16     </form>17 </body>18 </html>

request-receiver.jsp代碼如下:

 1 <% 2 //獲取請求數(shù)據 3 //設置請求方式的編碼 4 request.setCharacterEncoding("UTF-8"); 5 String name = request.getParameter("user"); 6 String pwd = request.getParameter("pwd"); 7 System.out.println(name+","+pwd); 8  9 if("smyh".equals(name) && "007".equals(pwd)) {10     out.println("登陸成功");    11     request.setAttribute("age", "22");12     request.getRequestDispatcher("request-success.jsp").forward(request, response);13     14 }else{15     out.println("errors");16 }17 %>

12行:如果用戶名密碼正確,就將這個請求轉發(fā)給"request-success.jsp"。forward(request, response)表示當前的請求對象和當前的響應對象。

11行:在轉發(fā)之前,我們可以給這個請求添加一些屬性,然后在request-success.jsp頁面中接收。

新建request-success.jsp,代碼如下:

 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>Insert title here</title> 8 </head> 9 <body>10     歡迎你,<%=request.getParameter("user") %> <br/>11     年齡:<%=request.getAttribute("age") %>    12     13 </body>14 </html>

10行:獲取之前的用戶名,顯示“歡迎你”,表示登陸成功。

11行:獲取獲取請求對象的屬性。

運行程序,輸入用戶名密碼后,提交,出現(xiàn)如下界面:(注意url)

84efb2a7-b3c3-42bd-b54a-773abfa8cba1

如果在request-receiver.jsp中沒有加入第01、02行的編碼方式(即頁面的編碼方式),最終顯示的頁面將會出現(xiàn)亂碼:

b65b31de-24b8-4173-9def-764f6392fc2a

四、內置對象resonpse

類型:Javax.servlet.http. HttpServletResponse

描述:它封閉了JSP 的響應,然后被發(fā)送到客戶端以響應客戶的請求。

作用域:page

重要方法:

response.sendRedirect("頁面"):頁面跳轉。注意,之前的forward是轉發(fā),這里是跳轉,注意區(qū)分。response.setCharacterEncoding("gbk"):設置響應編碼

注意,response.sendRedirect("頁面")這個方法,是實現(xiàn)頁面跳轉,而不是轉發(fā)

【舉例】現(xiàn)在需要做的是,如果登陸失敗,我們就跳到另外一個界面,而不再是轉發(fā)了。

request.jsp的代碼依然不變。

request-receiver.jsp的代碼如下:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <% 4 //獲取請求數(shù)據 5 //設置請求方式的編碼 6 request.setCharacterEncoding("UTF-8"); 7 String name = request.getParameter("user"); 8 String pwd = request.getParameter("pwd"); 9 System.out.println(name+","+pwd);10 11 12 if("smyh".equals(name) && "007".equals(pwd)) {13     out.println("登陸成功");    14     request.setAttribute("age", "22歲");15     request.getRequestDispatcher("request-success.jsp").forward(request, response);16     17 }else{18     //out.println("errors");19     response.setCharacterEncoding("UTF-8"); //設置響應的編碼20     //設置響應內容的類型21     response.setContentType("text/html;charset=UTF-8");22     response.sendRedirect("response.jsp");23 }24 %>

19行至22行是添加的代碼:如果用戶名、密碼錯誤,就調到response.jsp頁面去。

新建response.jsp,代碼如下:

 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>Insert title here</title> 8 </head> 9 <body>10     不好意思,登陸失敗。11 </body>12 </html>

注意第06行的“content=text/html”,表示:指定服務器返回的數(shù)據類型。

運行程序,當輸入的用戶名、密碼錯誤后,效果如下:(注意url)

a498dc2e-a856-4499-bd21-70245ac2c260

重定向和轉發(fā):

重定向的意思是說,當頁面進行跳轉之后,request和response的生命周期已經結束,完全交給下一個頁面去處理了(連url都變了);而轉發(fā)的時候,還可以往request里面添加攜帶參數(shù)(url不變)。

五、session(會話)

類型:Javax.servlet.http.HttpSession

描述:表示一個會話,用來保存用戶信息,以便跟蹤每個用戶的狀態(tài)。(不要用來保存業(yè)務數(shù)據,request)

定義:是指在一段時間內客戶端和服務器之間的一連串的相關的交互過程。

作用域:session。

如果是第一次接觸“會話”這個概念,需要重復一下。說白了,客戶端與服務器之間可能需要不斷地進行數(shù)據交互(請求與相應),這個過程就可以理解為一段回話。Tomcat默認的會話時間為30分鐘,這段時間內如果沒有交互,會話結束;下次客戶端一旦發(fā)送請求,重新創(chuàng)建會話。當客戶端第一次發(fā)送請求的時候,才會創(chuàng)建一個會話。session的生命周期比request長

重要方法:

session.getid():取得session的id號.id由tomcat自動分配。session.isnew():判斷session時候是新建的session.setAttribute(key,object):往當前會話中設置一個屬性session.getAttribute(key):獲取當前會話中的一個屬性session.removeAttribute(key):刪除當前會話中的屬性session.setMaxInactiveInterval(1000*60*30):設置當前會話失效時間(ms) 。Tomcat默認的會話時間為30分鐘。session.invalidate():初始化當前會話對象(一般在推出的時候使用,可以刪除當前會話的數(shù)據)

會話結束的條件之一:

  • 服務器關閉
  • 會話過期(一段會話時間默認為30分鐘)
  • 手動終止會話

【舉例】為保持用戶登錄的狀態(tài),我們可以把用戶的數(shù)據信息保存在session中。

request.jsp登錄表單的代碼如下:用戶登錄界面

 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>Insert title here</title> 8 </head> 9 <body>10     <form action="session.jsp" method="post">11         username:<input  type="text" name="user"/><br/>12         password:<input  type="password" name="pwd"/><br/>13                 14         <input  type="submit" name="登陸"/>            15     </form>16 </body>17 </html>

session.jsp代碼如下:(核心代碼)

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <% 4 //獲取請求數(shù)據 5 //設置請求方式的編碼 6 request.setCharacterEncoding("UTF-8"); 7 String name = request.getParameter("user"); 8 String pwd = request.getParameter("pwd"); 9 10 if("smyh".equals(name) && "007".equals(pwd)) {11     //將用戶名、密碼保存到當前會話當中12     session.setAttribute("name", name);13     session.setAttribute("pwd", pwd);14     //如果登陸成功,就跳到session-success.jsp頁面15     response.sendRedirect("session-success.jsp");    16     17     System.out.println(session.getId()); //獲取當前回話的id18     //session.setMaxInactiveInterval(1000*60*30); //設置當前session的有效時間19     //session.invalidate()  //設置session重新初始化,在系統(tǒng)退出時使用20 }else{21     response.sendRedirect("fail.jsp");22 }23 %>

12、13行:將用戶名、密碼保存到當前會話當中,只要這段會話沒有結束,就可以從session中獲取值。

15行:如果用戶名密碼正確,就跳到session-success.jsp界面

18行:設置當前session的會話時間,不過一般不在代碼里設置,而是在web.index里設置:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 3   <display-name>Test04</display-name> 4   <welcome-file-list> 5     <welcome-file>index.html</welcome-file> 6     <welcome-file>index.htm</welcome-file> 7     <welcome-file>index.jsp</welcome-file> 8     <welcome-file>default.html</welcome-file> 9     <welcome-file>default.htm</welcome-file>10     <welcome-file>default.jsp</welcome-file>11   </welcome-file-list>12   13   <!-- 設置當前sessionn的有效時間(分鐘) -->14   <session-config>15      <session-timeout>30</session-timeout>     16   </session-config>17 </web-app>

14行至16行是我設置的會話時間,單位為min。

session-success.jsp代碼如下:

 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>Insert title here</title> 8 </head> 9 <body>10     <%11         String name = (String)session.getAttribute("name");12         String pwd = (String)session.getAttribute("pwd"); 13         out.println("登陸成功");14         out.println(name+","+pwd);15         System.out.println(session.getId()); //獲取當前回話的id16     %>17 18 </body>19 </html>

15行:獲取當前會話的id,這個id和session.jsp中18行的id應該是同一個。

登錄失敗的界面fail.jsp的代碼我就不寫了。

運行程序,輸入用戶名密碼,提交,會跳到session-success.jsp:

54f76bf2-d96c-44d8-b6f8-f64317ff2376

因為是同一個會話,所以后臺輸出的id也是同一個:

029df7e0-3dc8-4615-bb95-6459ff545891

現(xiàn)在我們明白了,request中可以存數(shù)據,session中也可以存數(shù)據。如果是保存用戶名信息等,可以存到session中;如果只需要傳遞數(shù)據(從這個頁面?zhèn)鞯搅硪粋€頁面),就可以放在request中轉發(fā)出去,避免內存浪費。

六、內置對象pageContext

類型:javax.servlet.jsp.PageContext

描述:本JSP的頁面上下文。

作用域:page

注:上下文的理解:上下文可以聯(lián)系到當前頁面所有的信息。

我們先來回顧一下原始的request.jsp代碼:

 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>Insert title here</title> 8 </head> 9 <body>10     <form action="session.jsp" method="post">11         username:<input  type="text" name="user"/><br/>12         password:<input  type="password" name="pwd"/><br/>13                 14         <input  type="submit" name="登陸"/>            15     </form>16 17 </body>18 </html>

現(xiàn)在將上面的代碼改成下面的這個樣子:

 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>Insert title here</title> 8 </head> 9 <body>10     <form action="<%=request.getContextPath()%>/session.jsp" method="post">11         username:<input  type="text" name="user"/><br/>12         password:<input  type="password" name="pwd"/><br/>13                 14         <input  type="submit" name="登陸"/>            15     </form>16 17     <h2>pageContext對象</h2>18     <%19     //通過PageContext上下文對象獲取當前頁面的其他內置對象20     pageContext.getRequest();21     pageContext.getResponse();22     pageContext.getSession();23     pageContext.getOut();24     String path = request.getContextPath();25     out.println("當前上下文的絕對路徑:"+path);    26     %>27 28 </body>29 </html>

20至23行:通過PageContext上下文對象獲取當前頁面的其他內置對象

24行:通過request.getContextPath()獲取當前文件的絕對路徑。此時,可以在第10行寫上session.jsp文件的絕對路徑(),以前都是用相對路徑寫的,是因為文件都在同一目錄下。如果jsp文件在其他的文件夾,通過request.getContextPath()來獲取路徑就相當方便了,避免書寫錯誤。程序運行后,效果如下:

4df0238c-d2d7-4936-a89b-8dc180fe43de

七、內置對象application

類型:javax.servlet.ServletContext

描述:從servlet配置對象獲得的servlet上下文

作用域:application

這個對象的生命周期是最長的。服務器啟動的時候就會創(chuàng)建application對象。從服務器存在到服務器終止,都一直存在,且只保留一個對象,所有用戶共享一個application。不是很常用。

舉例:

 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>Insert title here</title> 8 </head> 9 <body>10 11     <h2>application對象</h2>12     <%13     //一個應用程序只有一個application對象14     //在服務器啟動時創(chuàng)建,到服務器關閉時銷毀15     //所有客戶端共享一份16     String serverPath = application.getContextPath();//獲取當前應用程序的路徑17     out.println(serverPath);18     //向application對象添加數(shù)據19     application.setAttribute("", "");20     21     %>22 23 </body>24 </html>

d0c2451d-79c4-4a81-951c-2b5ed1bb0f08

八、內置對象config

類型:javax.servlet.ServletConfig

描述:本JSP的 ServletConfig

作用域:page

注:代表配置對象,基本用不到。

九、內置對象page

類型:java.1ang.Object

描述:實現(xiàn)處理本頁當前請求的類的實例(javax.servlet.jsp.HttpJspPage),轉換后的Servlet類本身

作用域:page

十、內置對象exception

類型:java.lang.Exception

描述:本JSP頁面的異常對象

作用域:page

JSP常見錯誤狀態(tài)碼:

403:禁止訪問。比如IP地址被拒絕,站點訪問被拒絕等

404:找不到。沒有找到文件或目錄

500:服務器由于遇到錯誤而不能完成該請求,Web服務器太忙

舉例:

新建一個錯誤頁面error.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8" isErrorPage="true"%>  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>Insert title here</title> 8 </head> 9 <body>10     <h2>錯誤信息</h2>11     錯誤信息為:<%=exception%>12 </body>13 </html>

第02行:必須通過isErrorPage="true"指定此頁面為錯誤頁面,否則出現(xiàn)了第11行的exception,程序就會報錯。

新建另外一個頁面use-eception.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8" errorPage="error.jsp" %> 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>Insert title here</title> 8 </head> 9 <body>10 <%11     int[] num = {9,2,3,2,8};12     for(int i =0;i<=num.length;i++){13         out.println(num[i]);14     }15 %>16 17 </body>18 </html>

我們故意在11至14行寫一段錯誤的代碼;

02行:命令 errorPage="error.jsp",表示指定錯誤頁面為error.jsp,如果本頁面發(fā)生錯誤,就會跳到error.jsp頁面中去。

程序運行后,效果如下:

058343be-e396-4923-b402-307484dd016d

不過,實際程序中,一般不這么寫,因為業(yè)務是寫在類里,如果發(fā)生錯誤,將采取其他的辦法來處理,那就以后再說咯~~~


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泽普县| 潮州市| 永嘉县| 治多县| 澄城县| 长宁县| 丰城市| 延吉市| 苏尼特右旗| 读书| 张家港市| 扬中市| 上犹县| 安国市| 兰溪市| 建德市| 旬阳县| 平遥县| 翁牛特旗| 嫩江县| 唐山市| 西安市| 肇庆市| 常熟市| 措勤县| 桐乡市| 如皋市| 清丰县| 乐都县| 新民市| 鄢陵县| 濮阳市| 桐城市| 长泰县| 泰兴市| 罗平县| 柘荣县| 济阳县| 礼泉县| 泾源县| 吉安县|