![](/img/trans.png)
[英]Why does servlet name stay in url after RequestDispatcher.forward?
[英]Java Servlet RequestDispatcher didn't forward the url
我在Java Servlet中遇到RequestDispatcher的问题,如果servlet路径不在根路径中,它没有转发到特定的url
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userPath=request.getServletPath();
String view = null;
if(userPath.equals("/admin")) //it's okay, forwarded
{
view="admin";
}
else if(userPath.equals("/admin/tambahArtikel")) //it's not forwarded
{
view="tambahArtikel";
}
else if(userPath.equals("/kategori")) //it's okay, forwarded
{
view="kategori";
}
String url="WEB-INF/view/"+ view +".jsp";
request.getRequestDispatcher(url).forward(request, response);
}
这是我的web.xml
<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>ServletController</servlet-name>
<servlet-class>com.agung.webhakakses.servlet.ServletController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletController</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletController</servlet-name>
<url-pattern>/admin/tambahArtikel</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletController</servlet-name>
<url-pattern>/kategori</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
我认为问题出在路上,但我不确定
来自ServletRequest#getRequestDispatcher javadoc :
指定的路径名可能是相对的,但它不能扩展到当前的servlet上下文之外。 如果路径以“/”开头,则将其解释为相对于当前上下文根。 如果servlet容器无法返回RequestDispatcher,则此方法返回null。
在您的代码中,您以这种方式构建URL:
String url="WEB-INF/view/"+ view +".jsp";
所以,正如javadoc所说:
此方法与ServletContext#getRequestDispatcher之间的区别在于此方法可以采用相对路径。
因此,如果您的请求URI是"/admin/tambahArtikel"
并且您的转发URI不是以"/"
开头那么它将是相对的,因此转发被发送到"/admin/" + "WEB-INF/view/"+ view +".jsp"
如果需要转发到WEB-INF
目录中的资源,请使用“/”启动URI,以使路径相对于上下文根。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.