Java 如何使用和不使用/在URL末尾访问我的web应用程序
在我看来,我有一个非常简单的问题,但我无法找到一个可行的解决方案 我一直在关注web.xmlJava 如何使用和不使用/在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
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/article/*</url-pattern>
</servlet-mapping>
Servlet
/文章/*
如果我从以下urlhttp://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是相对的
<link rel="stylesheet"
href="${pageContext.servletContext.contextPath}/css/foo.css">
现在,不管请求URL是什么,也不管应用程序上下文路径是什么;链接将被正确解析
表达式有点冗长,但您始终可以使用字符串的应用程序范围副本来缩短它。我认为,当您在
文章
之后添加/
时,它由servlet处理,但文章
没有/
不由servlet处理这两种情况都由servlet处理。我用调试器验证了它,还用文章
验证了jsp get insert的属性。哇-我被困在servlet解决方案中,忘记了这种可能性。非常感谢!