Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用和不使用/在URL末尾访问我的web应用程序_Java_Jsp_Servlets - Fatal编程技术网

Java 如何使用和不使用/在URL末尾访问我的web应用程序

Java 如何使用和不使用/在URL末尾访问我的web应用程序,java,jsp,servlets,Java,Jsp,Servlets,在我看来,我有一个非常简单的问题,但我无法找到一个可行的解决方案 我一直在关注web.xml <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/article/*</url-pattern> </servlet-mapping> Servlet /文章/* 如果我从以下urlhttp://localhost/arti

在我看来,我有一个非常简单的问题,但我无法找到一个可行的解决方案

我一直在关注web.xml

<servlet-mapping>
    <servlet-name>Servlet</servlet-name>
    <url-pattern>/article/*</url-pattern>
</servlet-mapping>

Servlet
/文章/*
如果我从以下url
http://localhost/article
一切正常。如果在末尾添加斜杠,应用程序将运行到IFinite循环中

我知道这是由
getRequestDispatcher(“index.jsp”).forward(req,resp)
调用和web.xml配置条目
/article/*
生成的

如果我将
index.jsp
更改为
/index.jsp
,我将得到正确的转发,但所有资源都映射到错误的路径。例如,css文件映射到article/css而不是css。我认为这是因为getRequestDispatcher保留了contextPath

jsp被放置在根目录中

我如何访问
http://localhost/article
http://localhost/article/

我假设:

  • 静态资源是相对于文件系统上的JSP的
  • URL是相对的
浏览器将解析相对于当前URL的相对URL。您可以使用应用程序的上下文路径提供正确的路径:

<link rel="stylesheet"
  href="${pageContext.servletContext.contextPath}/css/foo.css">

现在,不管请求URL是什么,也不管应用程序上下文路径是什么;链接将被正确解析


表达式有点冗长,但您始终可以使用字符串的应用程序范围副本来缩短它。

我认为,当您在
文章
之后添加
/
时,它由servlet处理,但
文章
没有
/
不由servlet处理这两种情况都由servlet处理。我用调试器验证了它,还用
文章
验证了jsp get insert的属性。哇-我被困在servlet解决方案中,忘记了这种可能性。非常感谢!