總結JSP與servlet之間的傳值(轉載)

 

JSP與 servlet之間的傳值有兩種情況:JSP -> servlet, servlet -> JSP。
通過對象 request和 session (不考慮 application)完成傳值。

一、JSP -> servlet
JSP頁面有3種方法向 servlet傳值: form表單、URL 、其他

<!-- JSP page -->
...
<%......
       session.setAttribute(
"testSession","Hello session");
       reqeust.setAttribute(
"testRequest","Hello request");
%>
<a href="JspServlet?action=toServlet">click me</a>
<form action="JspServlet?action=toServlet" method="post" name="form">
      
<input name="username" type="test"
/>
      
<input type="submit" value="submit">
</form>
...



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裏的註冊內容,如


<servlet-name>JspServlet1</servlet-name>
        
<servlet-class>com.demo.JspServletDemo</servlet-class>
   
</servlet>
   
<servlet-mapping>
        
<servlet-name>JspServlet1</servlet-name>
        
<url-pattern>/JspServlet</url-pattern>
   
</servlet-mapping>

   
<servlet-name>JspServlet2</servlet-name>
        
<servlet-class>com.demo.JspServletDemo</servlet-class>
   
</servlet>
   
<servlet-mapping>
        
<servlet-name>JspServlet2</servlet-name>
        
<url-pattern>/admin/JspServlet</url-pattern>
   
</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是否過期,如下:

if(request.getSession(false)==null)
   System.out.println(
"Session has been invalidated!");
else
   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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章