簡體   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