gpt4 book ai didi

java - 转发不会更改浏览器地址栏中的 URL

转载 作者:搜寻专家 更新时间:2023-10-30 21:18:27 25 4
gpt4 key购买 nike

我刚开始使用 Servlets/JSP/JSTL,我有这样的东西:

<html>
<body>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<jsp:directive.page contentType="text/html; charset=UTF-8" />

<c:choose>
<c:when test='${!empty login}'>
zalogowany
</c:when>
<c:otherwise>
<c:if test='${showWarning == "yes"}'>
<b>Wrong user/password</b>
</c:if>
<form action="Hai" method="post">
login<br/>
<input type="text" name="login"/><br/>
password<br/>
<input type="password" name="password"/>
<input type="submit"/>
</form>
</c:otherwise>
</c:choose>
</body>
</html>

在我的 doPost 方法中

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException
{
HttpSession session=request.getSession();
try
{
logUser(request);
}
catch(EmptyFieldException e)
{
session.setAttribute("showWarning", "yes");
} catch (WrongUserException e)
{
session.setAttribute("showWarning", "yes");
}
RequestDispatcher d=request.getRequestDispatcher("/index.jsp");
System.out.println("z");
d.forward(request, response);
}

但是有些东西不起作用,因为我想要这样的东西:

  1. 如果用户有 Activity session 并登录到系统“zalogowany”应该显示
  2. 否则记录表格

问题是无论我做什么,那些转发都不会把我带到 index.jsp,它位于我的项目的根文件夹中,我的地址栏中仍然有 Projekt/Hai。

最佳答案

如果那真的是你的唯一问题

the problem is whatever I do, those forwards don't put me to index.jsp, which is in root folder of my Project, I still have in my address bar Projekt/Hai.

那么我不得不让你失望了:这完全符合规范。转发基本上告诉服务器使用给定的 JSP 来显示结果。它不会告诉客户端在给定的 JSP 上发送新的 HTTP 请求。如果您希望客户端的地址栏发生变化,那么您必须告诉客户端发送一个新的 HTTP 请求。您可以通过发送重定向而不是转发来做到这一点。

所以,而不是

RequestDispatcher d=request.getRequestDispatcher("/index.jsp");
System.out.println("z");
d.forward(request, response);

response.sendRedirect(request.getContextPath() + "/index.jsp");

另一种方法是完全摆脱 /index.jsp URL 并始终使用 /Hai URL。您可以通过将 JSP 隐藏在 /WEB-INF 文件夹中(这样最终用户永远无法直接打开它并被迫为此使用 servlet 的 URL)并实现 doGet 来实现这一点() 的 servlet 以及显示 JSP:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
}

这样,你可以直接打开http://localhost:8080/Project/Hai看到JSP页面的输出,表单只会提交到同一个URL,所以浏览器地址栏中的URL基本不会改变。我可能只会将 /Hai 更改为更合理的内容,例如 /login

另见:

关于java - 转发不会更改浏览器地址栏中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9221650/

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