繁体   English   中英

Java Servlet RequestDispatcher没有转发url

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM