Java Servlet RequestDispatcher没有转发url - java

我在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容器无法返回a,则返回null
RequestDispatcher。

在代码中,您可以通过以下方式构建网址:

String url="WEB-INF/view/"+ view +".jsp";

因此,正如javadoc所说:

此方法与
ServletContext#getRequestDispatcher是此方法可以采用
相对路径。

因此,如果您的请求URI为"/admin/tambahArtikel",而您的转发URI并非以"/"开头,则它将是相对的,因此将转发转发给"/admin/" + "WEB-INF/view/"+ view +".jsp"
如果需要转发到WEB-INF目录中的资源,请以“/”开头URI,这样路径将相对于上下文根。

java.lang.ClassNotFoundException:javax.servlet.http.HttpSessionIdListener - java

我有两个独立运行的项目,但是当我在TradingFramework中包含MailSender时,出现此NoClassDefFoundError:Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/http/HttpSessionIdListene…

Java中的<<或>>>是什么意思? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…

jboss Web应用程序正在部署但未找到 - java

好的,尝试将War部署到JBoss 4.0.4.CR2(不,我不能升级),并且在启动过程中没有异常,但是每当尝试访问应用程序时,我都会得到404。我检查了每个日志而且我没有发现任何例外。以下是我的web.xml文件:<?xml version="1.0" encoding="UTF-8"?> <web…

菱形运算符<>是否等于<?> - java

我在util.TreeSet类中发现,其中一个构造函数正在使用具有空泛型类型的新TreeMap调用另一个构造函数。 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); } new TreeMap<>是什么意思…

在eclipse外部的Tomcat上部署时,springSecurityFilterChain的注册重复 - java

我对 Spring 有些陌生,但对所有配置仍然感到困惑。我看了几本不同的教程,似乎每个人的做法都不同。我有一个spring应用程序,可以使用tomcat插件在Eclipse上正常运行。但是,当将战争文件导出到tomcat本身时,tomcat不会启动并抛出严重:ContainerBase.addChild:启动org.apache.catalina.Lifec…