【问题标题】:How to create view resolver for html in Spring?如何在 Spring 中为 html 创建视图解析器?
【发布时间】:2014-01-29 03:42:14
【问题描述】:

当我决定创建一个没有 JSP 的网络应用程序时,我遇到了这个问题,但只使用目录 WEB-INF/pages 下的 HTML 页面。

我已经制作了视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="WEB-INF/pages/"/>
    <property name="suffix" value=""/>
</bean>

我还导入了 WEB-INF/pages 中的所有资源:

<mvc:resources mapping="/**" location="WEB-INF/pages/"/>

我的控制器有以下视图:

@PreAuthorize("isAuthenticated()")
@RequestMapping("/")
public String indexPage() {
    return "redirect:/index.html";
}

它可以很好地映射“/”(如果未经过身份验证,则重定向到登录页面),但由于将此页面作为静态资源导入,因此对于 url“/index.html”不安全(但它不适用于所有如果不导入它)。

【问题讨论】:

    标签: java spring spring-mvc model-view-controller spring-security


    【解决方案1】:

    最后,我找到了解决方案。也许,这对任何人来说都会很有趣。我拥有的主要 servlet 映射具有 url-pattern: /** 那是我的问题。据我了解,主 servlet 以某种方式拦截了 viewResolver,即使它具有这样的配置:<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".html"/> </bean>

    当我将 servlet make 配置为下一个时:

      <servlet-mapping>
        <servlet-name>main</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>
    

    一切都好了。

    【讨论】:

    • /app 模式(或类似模式)帮助我们将 Dispatcher-Servlet 提供的内容与其他类型的内容区分开来。但是我们在 URL 中公开了一个实现细节(特别是 /app 路径)。这会导致复杂的 URL 重写策略来隐藏 /app 路径。 Spring in Action 第 3 版第 192 页
    【解决方案2】:

    我不知道你为什么要这样做......因为将页面放在 web-inf 下是错误的做法......

    容器也无法访问 web-inf 文件夹下的静态内容。我遇到了完全相同的问题,请参阅resource problem post

    我从谷歌搜索中发现,您可以访问 web-inf 文件夹下的动态资源,但不能访问静态资源。我什至首先尝试在 xml 中重新生成所有静态内容(即 css、js、html 等),但没有任何效果。最后我把我的页面移了出来,它没有配置就可以工作....

    所以尝试将资源移出 web-infwebcontent

    告诉我你是否对此有一些补充。

    谢谢。

    【讨论】:

    • 实际上最好将仅用作视图的文件放在 WEB-INF 下,以隐藏它们以防止直接访问
    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 2017-03-16
    • 2011-01-14
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多