使用struts,怎麼用request.getAttribute()取得List

來源:互聯網
上載者:User

http://topic.csdn.net/t/20040202/13/2694890.html

 

問:

在action中,將List通過request.setAttribute()存放,在jsp中通過request.getAttribute卻得不到,怎麼解決?傳統的方式logic:iterator的方式怎麼實現在jsp中顯示集合元素

 

答:

這樣加入到Context裡:  
  List   list   =   new   List();  
  ServletContext   context   =   this.servlet.getServletContext();  
  context.setAttribute("list",   list);  
  這樣得到:  
  List   list   =   (List)getServlet().getServletContext().getAttribute("list");

另外,http://zhidao.baidu.com/question/57874470.html

getParameter()獲得的是url中傳遞的參數,當HTML的form表單為post時,這些參數會隱式的進行傳遞,其獲得的對象為String.

getAttribute()獲得的是Action或Servlet處理後返回給頁面的資訊,在頁面中可以用getAttribute()來獲得.正如樓上所說,獲得的是由setAttribute()方法賦的值,傳回值是Object.

在做具體項目時,每個項目都會有查詢功能,簡單來說:
在查詢頁面點擊查詢按紐時,將form表單資訊提交給處理類,處理類使用getParameter()獲得.然後處理類操作DB找到匹配的記錄結果集,然後使用request.setAttribute("list",list)方法將結果集暫存於request返回給查詢頁面,在查詢頁面中使用request.getAttribute("list")方法獲得結果集,然後迴圈List輸出結果到頁面.

 

總結 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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.