【发布时间】:2013-04-16 18:24:46
【问题描述】:
我正在开发一个 GAE/J 应用程序,我的结构如下:
- war
|
- mobile
| |
| - assets
| | |
| | + a.jpg
| | + b.gif
| | + c.js
| + a.jsp
| + b.jsp
| + index.jsp
| + d.css
| + e.css
|
+ landing.jsp
现在在 web.xml 中,我有一个 /mobile 指向 <jsp-file>/mobile/index.jsp<jsp-file> 的 URL 映射。在我的index.jsp 中,我使用相对寻址来引用所有必需的资源,例如 JS 文件、CSS 文件和图像;如果我在浏览器中输入our_domain/mobile/index.jsp,这效果很好。但是当我输入our_domain/mobile 时,它会提供正确的文件(index.jsp),但是每个相对地址都会中断,这意味着没有 CSS、没有 JS、没有图像。
根据我的调查,web.xml 似乎实际上并没有重定向,而是调用指定的 JSP/Servlet 来响应特定的 URL 模式。这不适用于相对寻址,因为对于真正的重定向来说是正确的路径信息会留在根目录中。在这种情况下,如何确保相对地址按预期工作?
[编辑]
我尝试了几种配置。现在/mobile URL 可以正常工作,我的所有 CSS 都已加载,但 /mobile/ 没有加载我的 CSS。这是我的映射:
<servlet> <description>Landing page on mobile site</description>
<display-name>MobileIndex</display-name>
<servlet-name>MobileIndex</servlet-name>
<jsp-file>/mobile/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>MobileIndex</servlet-name>
<url-pattern>/mobile/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>MobileIndex</servlet-name>
<url-pattern>/mobile</url-pattern>
</servlet-mapping>
【问题讨论】:
-
你的映射是什么样的?
-
<servlet-mapping> <servlet-name>MobileIndex</servlet-name> <url-pattern>/mobile</url-pattern> </servlet-mapping>其中MobileIndex也在web.xml中声明为指向/mobile/index.jsp文件的servlet 名称。当 dis 不起作用时,我什至将MobileIndex指向另一个 JSP,其唯一目的是执行response.sendRedirect("/mobile/index.jsp");但 dat 也不起作用。然后我更改了重定向 JSP 2 的标准 servlet 实现了相同的目的,但它也没有按预期工作。他们都重定向了,但我的 CSS 和 JS 文件仍然找不到。 -
为什么要使用 web.xml 将 jsp 映射到它所在的路径?你真的需要一个servlet吗?无论如何,这只是一个误解,而不是你的问题。您如何引用您的资源文件(例如 CSS/JS/IMG)?
-
相对寻址,例如
<link href="d.css" rel="stylesheet" />我这样映射的原因是我希望我的用户能够在他们的浏览器中输入my_domain/mobile而不是my_domain/mobile/index.jsp -
@SayoOladeji,是有效为您提出的解决方案。如果是这样,您对上面显示的映射做了哪些具体更改?
标签: java google-app-engine jsp servlets