Java Servlet请求调度程序';不要转发url

Java Servlet请求调度程序';不要转发url,java,servlets,requestdispatcher,Java,Servlets,Requestdispatcher,我对Javaservlet中的RequestDispatcher有问题,如果Servlet路径不在根路径中,它就不会转发到特定的url protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userPath=request.getServletPath(); Strin

我对Javaservlet中的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>

服务器控制器
com.agung.webhakakses.servlet.ServletController
服务器控制器
/管理员
服务器控制器
/行政/塔姆巴亚蒂克尔
服务器控制器
/卡泰戈里
30

我认为问题出在路径上,但我不确定ServletRequest#getRequestDispatcher:

指定的路径名可能是相对的,但不能扩展 在当前servlet上下文之外。如果路径以“/”开头,它将 被解释为相对于当前上下文根。这种方法 如果servlet容器无法返回 请求调度器

在代码中,以以下方式构建url:

String url="WEB-INF/view/"+ view +".jsp";
因此,正如javadoc所说:

这种方法与传统方法的区别 ServletContext#getRequestDispatcher是指此方法可以 相对路径

因此,如果您的请求URI是
“/admin/tambahArtikel”
,并且您的转发URI不是以
“/”
开头,那么它将是相对的,因此转发将发送到
“/admin/”+“WEB-INF/view/“+view+”.jsp”


如果您需要转发到
WEB-INF
目录中的资源,请用“/”启动URI,这样路径将相对于上下文根。

当您尝试此操作时会发生什么?当我尝试此操作时,它会提供我想要的页面,但给我404错误信息:“我的意思是根是什么?”