gpt4 book ai didi

java - 如何在带有超链接的jsp页面中设置属性(请求范围)

转载 作者:行者123 更新时间:2023-12-01 23:04:50 26 4
gpt4 key购买 nike

我觉得上面的标题有点困惑。我想要实现的目标:

我有一个 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 Status 404 - Not Found

type Status report

messageNot Found

descriptionThe requested resource is not available.

但是如果我尝试使用 session.setAttribute/session.getAttribute 代码工作正常,但我不想每次单击超链接时都有 session 。

我发现的另一种方法是使用:

<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 容器认为请求已处理并清除其属性。该属性现已消失。

因此,在用户单击链接后到达的下一个请求中,它不再可用。

session 属性或请求参数没问题。考虑查看 Front Controller pattern .

此外,请考虑使用 core 标记库(特别是 url 标记)而不是 scriptlet 来构建链接。

关于java - 如何在带有超链接的jsp页面中设置属性(请求范围),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22946430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com