程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Servlet與JSP間的傳值問題

Servlet與JSP間的傳值問題

編輯:關於JSP

         Servlet與JSP 之間的傳值有兩種情況:JSP -> Servlet, Servlet -> JSP。

    通過對象 request和 session (不考慮 application)完成傳值。

    一、JSP -> servlet

    JSP頁面有3種方法向 servlet傳值: form表單、URL

    1. <!-- JSP page -->  
    2. ...  
    3. <%......  
    4. session.setAttribute("testSession","Hello session");  
    5. reqeust.setAttribute("testRequest","Hello request");  
    6. %>  
    7. <a href="JspServlet?action=toServlet">點擊</a>  
    8. <form action="JspServlet?action=toServlet" method="post" name="form">  
    9. <input name="username" type="test" />  
    10. <input type="submit" value="submit">  
    11. </form>  
    12. ... 

    1、對於該JSP頁面 form表單的內容,如 <input>標簽,在 servlet可用 request.getParameter("username");獲取。

    2、URL:比如這裡的 <a>標簽的 href屬性與 <form>標簽的 action屬性的值 "JspServlet?action=toServlet",在 servlet同樣用 request.getParameter("action")獲取;所要注意的是這裡的 url 要和 servlet在web.xml裡的 <url-pattern>標簽的路徑所對應。這部分後面會提到。

    3、java片段代碼,servlet只能接到 session.setAttribute("testSession","Hello session")的內容,而接不到 request的內容。在 servlet裡用 request.getSession().getAttribute("testSession")獲取 session內容。

    二、Servlet

    1、關於 servlet,首先要提到它在 web.xml裡的注冊內容,如

    1. <servlet-name>JspServlet1</servlet-name>  
    2. <servlet-class>com.demo.JspServletDemo</servlet-class>  
    3. </servlet>  
    4. <servlet-mapping>  
    5. <servlet-name>JspServlet1</servlet-name>  
    6. <url-pattern>/JspServlet</url-pattern>  
    7. </servlet-mapping>  
    8. <servlet-name>JspServlet2</servlet-name>  
    9. <servlet-class>com.demo.JspServletDemo</servlet-class>  
    10. </servlet>  
    11. <servlet-mapping>  
    12. <servlet-name>JspServlet2</servlet-name>  
    13. <url-pattern>/admin/JspServlet</url-pattern>  
    14. </servlet-mapping> 

    假如 project name 是 jsp2servlet,則該 project根目錄的 Context是 /jsp2servlet,在地址欄裡顯示是 http://localhost:8080/jsp2servlet/;

    在 project 根目錄下有 admin目錄,對應的 Context是/admin/jsp2servlet,在地址欄裡顯示是 http://localhost:8080/jsp2servlet/admin,

    在這兩個目錄下的 jsp 都想轉到 com.demo.JspServletDemo類做處理,這時的 url需要在 web.xml注冊兩次。

    1)在 http://localhost:8080/jsp2servlet/ 目錄下的 jsp 頁面 JspServlet1,


    url應寫為 "JspServlet"

     

    2)在 http://localhost:8080/jsp2servlet/admin/ 目錄下的 jsp 頁面訪問 JspServlet2,url應寫為 "admin/JspServlet"

    2、在 servlet直接用 request對象,得到發送來的請求內容;用 request.getSession(),得到 session對象,從而得到會話內容。
    這裡的 request.getSession()的參數為 boolean 類型,該方法意思可理解為:

    session可以認為是每一個IE進程對應一個會話(新開一個IE進程就可以對應兩個會話的),getSession都是返回當前用戶的會話對象,參數的區別在於:

    參數為true (默認),則如果“當前用戶的會話對象”為空(第一次訪問時)則創建一個新的會話對象返回;

    參數為false,則如果“當前用戶的會話對象”為空,則返回 null (即不自動創建會話對象)。

    利用這個方法可以判斷 session是否過期,如下:

    1. if(request.getSession(false)==null)  
    2. System.out.println("Session has been invalidated!");  
    3. else 
    4. System.out.println("Session is active!"); 

    三、Servlet -> JSP

    從 servlet轉到 jsp不外乎兩種方法,重定向 和 url轉發

    1、重定向 ( Redirect):是路徑的跳轉,內容和 url都改變。不允許帶 request參數( session參數可以),即不允許在 servlet裡給 request對象使用setAttribute方法傳給下一頁面。在 servlet裡使用 response.sendRedirect(url) 方法。注意這裡的 url前不帶斜線 /,如 response.sendRedirect(”test.jsp“)

    2、url轉發 ( Forward):是頁面的跳轉,頁面內容發生改變,url不變。可以帶 request和 session參數。在 servlet裡使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而這裡的 url前需要帶斜線 /,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)

    1. String fr="good well";  
    2. request.setAttribute("test", fr);  
    3. RequestDispatcher de=request.getRequestDispatcher("/test.jsp");  
    4. de.forward(request, response); 
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved