我部署了一场名为 test
的 war 在 JBoss AS 中。
当我进入浏览器并输入网址时 http://localhost:8080/test
, 我得到了 login.jsp
页面,这是欢迎页面。
当我点击提交按钮时,会调用一个 servlet 名称 CheckLoginServlet
( onSubmit
我已重定向到 /test/servlet/CheckLoginServlet
)。成功登录后,此 servlet 重定向到位于 MFrame.jsp
内的 jsp ( docroot/main/jsp
)。 .网址如下所示 http://localhost:8080/main/jsp/MFrame.jsp?sid=13045798560
,然后我收到 404 错误。
原因是 url 不包括上下文 test
,现在当我显式修改浏览器中的 url 以在其中包含测试时(现在 url 看起来像 http://localhost:8080/test/main/jsp/MFrame.jsp?sid=13045798560
),页面成功呈现。
我的问题是为什么上下文 test
不在 url 中,因为它是上下文根。
最佳答案
重定向是 Web 服务器的亲戚。所以如果你有 .sendRedirect("/main/jsp/MFrame.jsp")
,上下文路径将被省略。那是因为重定向是一个 HTTP 概念,它们发生在浏览器中(它们被称为客户端重定向)
你有几个选择:
req.getRequestDispatcher("/main/jsp/MFrame.jsp").forward(req, res);
- 这将触发服务器端重定向,并且它是上下文相关的 request.getContextPath()
) 关于java - Servlet 上下文 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895309/