【问题标题】:How to redirect in web.xml如何在 web.xml 中重定向
【发布时间】: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>

【问题讨论】:

  • 你的映射是什么样的?
  • &lt;servlet-mapping&gt; &lt;servlet-name&gt;MobileIndex&lt;/servlet-name&gt; &lt;url-pattern&gt;/mobile&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; 其中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)?
  • 相对寻址,例如&lt;link href="d.css" rel="stylesheet" /&gt; 我这样映射的原因是我希望我的用户能够在他们的浏览器中输入my_domain/mobile 而不是my_domain/mobile/index.jsp
  • @SayoOladeji,是有效为您提出的解决方案。如果是这样,您对上面显示的映射做了哪些具体更改?

标签: java google-app-engine jsp servlets


【解决方案1】:

我不确定重定向是您真正想要的。您的应用的良好组织是:

myapp/ pom.xml src/ main/ java/ ... Your Source Code ... webapp landing.jsp assets/ a.jpg b.gif c.js mobile/ index.jsp a.jsp b.jsp 当然,您可以使用appengine-web.xml&lt;public-root&gt;&lt;static-files&gt; 元素更改资产的位置。

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多