【发布时间】:2014-12-18 11:00:23
【问题描述】:
我有一个必须将请求转发到特定 JSP 的控制器 Servlet。但是,每当我转发请求时,它都会加载 JSP,但浏览器中的 URL 会做一些很奇怪的事情。
例如:
通过index.jsp我点击:<a href="/login" />
在控制器中我有一个方法
if(request.getPathInfo().equals("/login"){
dispatcher = this.getServletContext().getRequestDispatcher("/login.jsp");
dispatcher.forward(request, response);
}
浏览器中的网址会显示:
http://mywebsite.com/my_work/do/login
而不是:
http://mywebsite.com/my_work/login.jsp
login.jsp 页面将显示,只是 URL 错误。这会导致问题,因为我必须在每个 JSP 中包含 2 x 对 Javascript 和 CSS 文件的引用,因为相对 URL 会发生变化,具体取决于我是通过在浏览器中键入 http://mywebsite.com/my_work/login.jsp 来手动访问该页面,还是通过转发访问该页面来自 Controller servlet。
我的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>controller.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/do/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<resource-ref>
<res-ref-name>jdbc/LessonDatabase</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
任何帮助都会很棒。我已经做好了一切工作,但我猜这是不正确的!
应该注意,任何转发都会发生这种情况。
【问题讨论】:
-
你正在寻找的是重定向。