gpt4 book ai didi

java - 在将请求从 servlet 分派(dispatch)到 jsp 后,我们能否以某种方式更改地址栏中的 url

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:18 24 4
gpt4 key购买 nike

我在这里遇到了一个奇怪的问题,我真的被困住了,需要好好完成这项工作。

所以我有一个页面说 index.jsp,链接说“a href=servlet?id=10”。当我单击此链接时,它将转到我的 servlet 上的 doGet(),这是我的 servlet 中的代码。

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("id");
// search database and create an arraylist
if(//user logged in)
address = "s/results.jsp";
else
address = "results.jsp";
// set arraylist in session object
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request,response);
}

所以上面的代码工作正常但是请求转发后,我的浏览器显示 url 为

http://localhost/project/servlet?id=10 .

我不想要上面的 url,因为我要根据用户登录状态转发到两个不同的 jsp,一个在“s”文件夹中,另一个在该文件夹之外。如果用户已登录,那么我将转发到“s/results.jsp”,如果用户未登录,我将转发到“results.jsp”。

在 s/results.jsp 的情况下,我通过在 results.jsp 中使用 ../从“s”文件夹外部访问图像和脚本等资源。

由于 url 没有更改为 s/results.jsp ,我无法使用“../”访问资源当我使用 jsp 分页时,当我单击下一步时,url 将更改为 s/results.jsp在这种情况下,我可以使用 ../

访问资源

我想到的一个解决方案是复制 s 文件夹中的所有资源,但这会增加冗余。

我想到的另一个解决方案是为两个 jsp 创建两个不同的 servlet但我不知道将 servlet 放在哪里,以便它可以使用 ../

访问 s 文件夹之外的资源

他们还有什么其他好的方法可以让我完成任务吗..

我曾尝试查找有关此的信息,但未能弄清楚。

非常感谢任何帮助。

最佳答案

您基本上已经指示您的网络浏览器向该 URL 发送请求。转发不会更改 URL。它完全是服务器端。除了使用 response.sendRedirect()相反 - 这会丢弃当前请求,包括其所有属性,并在给定的 URL 上创建一个全新的请求 -,您也可以将链接更改为 <a href="results?id=10"> ,或者当用户登录时,到 <a href="s/results?id=10"> .

<a href="${user.loggedin ? 's/' : ''}results?id=10">

最后相应地更改 servlet 映射,以便在这些 URL 上调用它。

<url-pattern>/results</url-pattern>
<url-pattern>/s/results</url-pattern>

您只会错过 JSP 扩展。但是调度员要使用的 JSP 属于 /WEB-INF文件夹,以便最终用户在不首先调用 servlet 的情况下无法直接查看它们。您最终还会得到更好的 URL。

关于java - 在将请求从 servlet 分派(dispatch)到 jsp 后,我们能否以某种方式更改地址栏中的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299389/

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