【问题标题】:Problem returning views from multiple URLs从多个 URL 返回视图的问题
【发布时间】:2011-03-15 21:31:20
【问题描述】:

我正在使用 Spring MVC 构建一个 Web 应用程序,但遇到了问题。

目前,如果我登录并转到 web 应用程序的主页,那么它会正确显示用户主页(正常的资料图片、详细信息等)——这一切都很好。

但是,我正在尝试构建该功能,以便如果有人使用 url /user/username 访问该站点,那么它将重定向到控制器并尝试使用用户名“username”查找用户 - 如果有的话找到,然后加载所选用户配置文件的视图。

到目前为止一切正常-但我想检查一下,如果您已登录并导航到 /user/mycurrentusername 然后不要加载正常的个人资料页面,只需加载您第一次登录时看到的页面..问题是当我返回与主页相同的视图时,因为我现在在 url /user/* 找不到任何页面资源(图像/css)所以我得到了页面但没有格式/图像..

解决这个问题的最佳方法是什么?有没有更好的方法来处理这个问题?

(我也有问题,因为它在 /url/images 上查找图像/css .. 它再次向我的用户控制器发出请求:()

非常感谢您的帮助!

【问题讨论】:

    标签: java model-view-controller spring web-applications


    【解决方案1】:

    您为样式表等创建的 url 在理想情况下应该使用某种 url 重写标签来创建,以确保它们与根应用程序上下文相关,而不是当前 url。您使用的是什么视图技术? JSP?如果是这样,你会想要这样的东西<link rel="stylesheet" href="<c:url value='/css/styles.css'/>" type="text/css"/><c:url/> 标签将创建一个有效的恒定 URL,不会随着您当前的页面请求而改变。

    至于您的控制器在请求 css/图像等时受到打击,请查看 this question。简而言之,理想情况下,您希望使用 Tuckey 的 Url Rewrite 过滤器之类的东西来确保不会为静态内容请求调用 DispatcherServlet。

    编辑:实际上看起来 Spring 3.04 现在比 Tuckey 的过滤器有更好的解决方案。 <mvc:resources/> 看起来设置起来要简单得多。

    【讨论】:

      【解决方案2】:

      对于第一个问题,您可能将图像和 css 源指定为相对路径。由于视图是从不同的路径呈现的,因此该相对路径也不同。请参阅 Melv 的回答,了解如何正确指定它们。

      关于第二个问题,请查看spring mvc docs 中的第 15.12.4 节,了解如何让静态请求通过 Dispatcher Servlet。

      【讨论】:

        【解决方案3】:

        你基本上有三个选择:

        1. 不要更改您的网络环境。将您的所有 URL 设为 http://myapp/myrequest?par1=val1。我以前做过这种应用程序,但是当有很多可能的操作时,URL就不会被组织起来。 “REST 风格”的 URL 更漂亮,并且是一段时间前世界的发展方向。

        2. 在所有内部 URL 中使用 <c:url>。我认为这不是一个糟糕的选择,但是有很多样板代码,比乍一看要多。如果您使用 javascript 调用 URL,则必须知道哪个是正确的 URL,并且可能很笨拙。

        3. 在我目前的开发中,我使用了<BASE> 标签。您必须在所有页面的标题中包含<base href="http://myhost:8080/myapp/" />。然后,您可以使所有 URL 都相对于应用程序的基本路径。有一些缺点,但这是我的首选。

        编辑:回答您的问题。您可以通过以下方式获取应用程序的根 URL,而不是参数化您的应用程序:

        <base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/" />
        

        【讨论】:

        • 感谢 Sinuhe - 使用第 3 个选项,您将如何满足将应用程序部署到不同服务器的需求? oyu 是否只需对其进行参数化并有一个构建/部署来处理它?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-11
        • 1970-01-01
        相关资源
        最近更新 更多