我要注意 /
用于重定向。
正斜杠开头的意思是“相对于这个web容器的根-头优先的jsp和servlet
我以为我能理解,直到我试过。我将用超级简单的代码来演示:
以index.html开头:
<html><body>
<form action="GenericServlet" method="POST">
Enter name: <input type="text" name="name">
<button>Submit name</button>
</form>
</body></html>
然后转到genericservlet.class:
@WebServlet("/GenericServlet")
public class GenericServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("test.jsp");
}
}
,重定向到test.jsp:
<html><body>
hellooooo
</body></html>
在我运行它之后,我得到了 hellooo
信息。但一旦我改变方向 /test.jsp
而不是 test.jsp
,我没有找到错误。
我还注意到,当我使用redirect(test.jsp)时,我发现http://localhost:8080/testproject/index.html。但是,当我使用redirect(/test.jsp)时,我得到:http://localhost:8080/test.jsp
如果海德先告诉我的话 /
代表 root
,为什么我没有得到第一种情况下相同的网址?root=testproject,对吗?谁能看出我说错了什么?
1条答案
按热度按时间pu3pd22g1#
根=测试项目?不!
根路径是没有任何路径的域部分,即http://localhost:8080在您的上下文中。
例如,假设当前请求url是
http://localhost:8080/a/b
,如果你打电话resp.sendRedirect("c");
,下一个请求url是http://localhost:8080/a/c
. 如果你打电话resp.sendRedirect("/c");
,下一个请求url将是http://localhost:8080/c
.