亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

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

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

【聲明】

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

生命壹號:http://www.49028c.com/smyhvae/

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

聯系方式:smyhvae@163.com

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

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

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

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

【正文】

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

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

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

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

一、內置對象介紹

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

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

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

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

二、內置對象out

類型:Javax.servlet.jsp.JspWriter

作用:主要用來向客戶端輸出數據

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

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

舉例:

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對象進行封裝。注:客戶端和服務器的一次通信就是一次請求(發送請求或得到相應)。

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

重要方法:

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

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

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

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

新建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行:添加表單,在里面輸入用戶名密碼,然后將數據發送至request-receiver.jsp頁面來處理(第10行的action里面的內容)。

新建request-receiver.jsp文件:

 1 <% 2 //獲取請求數據 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

【亂碼問題的解決】

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

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

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

//設置請求方式的編碼

request.setCharacterEncoding("UTF-8");

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

此時,如果在控制臺輸出的用戶名還出現亂碼,是因為還涉及到了另外一個問題:在request.jsp中發送請求,默認是采用get方式,這個時候,參數就會作為url的一部分一起發給服務器(見上方圖片中的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 //獲取請求數據 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行,將獲取到的請求數據還原為UTF-8的方式。

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

我們現在往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行是添加的三個單選按鈕,構成了數組“likes”。

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

 1 <% 2 //獲取請求數據 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) 轉發(通過代碼的方式進行轉發)

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

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

現在的情形是,request.jsp負責發數據,request-receiver.jsp負責處理數據(判斷用戶名密碼的正確性),如果用戶名密碼正確,那我們就通過request.getRequestDispatcher(request-success.jsp),將請求轉發給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 //獲取請求數據 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行:如果用戶名密碼正確,就將這個請求轉發給"request-success.jsp"。forward(request, response)表示當前的請求對象和當前的響應對象。

11行:在轉發之前,我們可以給這個請求添加一些屬性,然后在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行:獲取獲取請求對象的屬性。

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

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

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

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

四、內置對象resonpse

類型:Javax.servlet.http. HttpServletResponse

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

作用域:page

重要方法:

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

注意,response.sendRedirect("頁面")這個方法,是實現頁面跳轉,而不是轉發。

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

request.jsp的代碼依然不變。

request-receiver.jsp的代碼如下:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3 <% 4 //獲取請求數據 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”,表示:指定服務器返回的數據類型。

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

a498dc2e-a856-4499-bd21-70245ac2c260

重定向和轉發:

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

五、session(會話)

類型:Javax.servlet.http.HttpSession

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

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

作用域:session。

如果是第一次接觸“會話”這個概念,需要重復一下。說白了,客戶端與服務器之間可能需要不斷地進行數據交互(請求與相應),這個過程就可以理解為一段回話。Tomcat默認的會話時間為30分鐘,這段時間內如果沒有交互,會話結束;下次客戶端一旦發送請求,重新創建會話。當客戶端第一次發送請求的時候,才會創建一個會話。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():初始化當前會話對象(一般在推出的時候使用,可以刪除當前會話的數據)

會話結束的條件之一:

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

【舉例】為保持用戶登錄的狀態,我們可以把用戶的數據信息保存在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 //獲取請求數據 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重新初始化,在系統退出時使用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

現在我們明白了,request中可以存數據,session中也可以存數據。如果是保存用戶名信息等,可以存到session中;如果只需要傳遞數據(從這個頁面傳到另一個頁面),就可以放在request中轉發出去,避免內存浪費。

六、內置對象pageContext

類型:javax.servlet.jsp.PageContext

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

作用域:page

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

我們先來回顧一下原始的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>

現在將上面的代碼改成下面的這個樣子:

 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

這個對象的生命周期是最長的。服務器啟動的時候就會創建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     //在服務器啟動時創建,到服務器關閉時銷毀15     //所有客戶端共享一份16     String serverPath = application.getContextPath();//獲取當前應用程序的路徑17     out.println(serverPath);18     //向application對象添加數據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

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

作用域:page

十、內置對象exception

類型:java.lang.Exception

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

作用域:page

JSP常見錯誤狀態碼:

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"指定此頁面為錯誤頁面,否則出現了第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,如果本頁面發生錯誤,就會跳到error.jsp頁面中去。

程序運行后,效果如下:

058343be-e396-4923-b402-307484dd016d

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线国产电影| 最近更新的2019中文字幕| 欧美高清自拍一区| 亚洲第一中文字幕在线观看| 日韩精品视频免费在线观看| 国产成人精品电影| 欧美色视频日本版| 国产成人免费av| 亚洲精品日韩欧美| 国产999精品久久久影片官网| 91免费在线视频网站| 51精品在线观看| 成人福利视频网| 国产91精品久久久| 91九色在线视频| 久久影视电视剧免费网站清宫辞电视| 永久免费精品影视网站| 日韩欧亚中文在线| 欧美日韩在线第一页| 91九色国产在线| 一区二区欧美日韩视频| 555www成人网| 国产欧美va欧美va香蕉在| 日韩色av导航| 国产人妖伪娘一区91| 国产日韩精品在线观看| 欧美另类极品videosbestfree| 日韩一区二区三区xxxx| 在线观看久久av| 亚洲午夜未满十八勿入免费观看全集| 亚洲最大的免费| 成人女保姆的销魂服务| 欧美激情亚洲综合一区| 国产精品激情av在线播放| 欧美性xxxx极品高清hd直播| 亚洲精品一区久久久久久| 亚洲国产天堂久久国产91| 日韩一区二区三区xxxx| www.久久久久| 日韩精品在线免费| 日韩高清电影免费观看完整版| 这里只有精品在线播放| 久久成人精品视频| 国产精品嫩草影院久久久| 久久久久久久久久久国产| 九九视频这里只有精品| 欧美成人性生活| y97精品国产97久久久久久| 国产精品久在线观看| 精品一区二区三区三区| 日韩成人在线视频网站| 国产精品狠色婷| 米奇精品一区二区三区在线观看| 欧美精品videofree1080p| 久久久久久一区二区三区| 亚洲人成免费电影| 日韩在线国产精品| 欧美日韩国产91| 国产精品福利在线观看网址| 日韩大片免费观看视频播放| 国产精品中文在线| 日韩av在线一区二区| 亚洲最大福利网站| 亚洲丝袜在线视频| 97在线视频国产| 亚洲欧美国产日韩天堂区| 亚洲国产精品999| 九九热精品视频| 久久久97精品| 久久精品国产91精品亚洲| 久久久久久69| 日韩美女在线播放| 欧美日韩性生活视频| 中文字幕精品国产| 疯狂做受xxxx高潮欧美日本| 欧美成人午夜免费视在线看片| 亚洲国产一区二区三区在线观看| 茄子视频成人在线| 成人乱色短篇合集| 欧美黑人一级爽快片淫片高清| 精品久久久久久久久久| 日韩一中文字幕| 国产欧美日韩综合精品| 欧美激情精品久久久久久久变态| 亚洲国产高清自拍| 国产91精品不卡视频| 91九色综合久久| 国产精品自在线| 国产精品女视频| 秋霞成人午夜鲁丝一区二区三区| 91亚洲精品在线观看| 亚洲毛片在线免费观看| 亚洲成人动漫在线播放| 亚洲成人在线视频播放| www.久久久久久.com| 欧美日韩免费在线观看| 亚洲天堂成人在线视频| 91高清免费在线观看| 国产精品视频专区| 亚洲午夜未满十八勿入免费观看全集| 91中文字幕在线观看| 成人国产精品久久久| 91精品国产成人www| 国产精品一区二区久久精品| 国产精品免费久久久| 国产精品老女人精品视频| 久久久久久成人精品| 国产一区二中文字幕在线看| 国产专区精品视频| 91夜夜未满十八勿入爽爽影院| 欧美亚洲视频在线观看| 国产日产欧美a一级在线| 国产精品成熟老女人| 欧美综合在线观看| 欧美丝袜美女中出在线| 97视频在线观看免费高清完整版在线观看| 亚洲跨种族黑人xxx| 亚洲欧美精品在线| 成人福利网站在线观看| 日韩欧美极品在线观看| 国产精品视频精品| 日韩精品视频在线观看免费| 97在线精品国自产拍中文| 午夜免费日韩视频| 日韩欧美国产一区二区| 日韩高清电影好看的电视剧电影| 91视频免费在线| 久久夜精品香蕉| 国产有码在线一区二区视频| 国产激情久久久| 亚洲视频欧美视频| 色噜噜亚洲精品中文字幕| 一区二区欧美日韩视频| 欧美床上激情在线观看| 日韩av影片在线观看| 欧美黄色三级网站| 国产精品影院在线观看| 国产日韩中文字幕| 日本欧美黄网站| 国产美女搞久久| 欧美黑人xxx| 亚洲女人天堂网| 国产精品久久久久久久久久小说| 国产精品美女久久久久久免费| 国产色综合天天综合网| 亚洲第一二三四五区| 国产日韩欧美视频在线| 日韩成人在线免费观看| 国产一区玩具在线观看| 欧美精品免费在线| 日韩中文字幕国产精品| 在线视频亚洲欧美| 欧洲精品久久久| 亚洲男人天堂2023| 久久精品国产久精国产思思| 久久久精品一区| 九九热r在线视频精品| 97精品视频在线| 久久久久久久香蕉网| 伊人一区二区三区久久精品| 亚洲影视九九影院在线观看| 永久免费看mv网站入口亚洲| 欧美精品久久久久久久久| 8x海外华人永久免费日韩内陆视频|