簡體   English   中英

如何在具有超鏈接的JSP頁面中設置屬性(請求范圍)

[英]How to set an attribute in a jsp page with hyperlink (request scope)

我認為上面的標題有點令人困惑。 我想要達到的目標:

我有一個jps頁面(位於WEB-INF中),其中帶有超鏈接,該超鏈接將通過servlet調用另一個jsp(在WEB-INF中)。

我了解可以使用以下方法實現:

<a href="ServletName">Go to this page</a>

但是因為會有很多超鏈接,所以我的想法是要有一個通用的servlet(OpenPagesServlet)處理所有這些頁面。

像這樣:

JSP頁面:

<% request.setAttribute("page", "page1.jsp");%>
<a href="OpenPagesServlet">Page 1</a>

doGet方法中的OpenPagesServlet:

String page = (String) request.getAttribute("page");
request.getRequestDispatcher("/WEB-INF/" + page).forward(request, response);

我嘗試了上面的代碼,我得到:

HTTP狀態404-找不到

類型狀態報告

未找到信息

描述請求的資源不可用。

但是,如果我嘗試使用session.setAttribute / sesion.getAttribute,則代碼可以正常工作,但是我不想每次單擊超鏈接時都擁有會話。

我發現的另一種方法是使用:

<a href="OpenPagesServlet?value=page1">Page 1</a>

並在servlet中:

String page = (String)request.getParameter("value");
request.getRequestDispatcher("/WEB-INF/" + page).forward(request, response);

它有效,但是這種方法不好,因為然后可以使用url直接訪問頁面:

http:// localhost:8080 / WebApp / OpenPagesServlet?value = page1

所以...我的問題是為什么request.setAttribute / request.getAttribute返回404? 是否有其他方法可以實現我要完成的任務?

一個HttpServletRequest及其屬性僅在一個HTTP請求/響應周期內有效。 在JSP中設置屬性后,將呈現JSP並將其作為HTTP響應主體的一部分發送。 Servlet容器考慮已處理的請求並清除其屬性。 該屬性現在消失了。

因此,在用戶單擊鏈接后到達的下一個請求中不再可用。

會話屬性或請求參數很好。 考慮研究前端控制器模式

另外,請考慮使用core標記庫(尤其是url標記)代替腳本來構建鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM