如何使用 REST-ful URL 创建 Spring 3 + Tiles 2 webapp?

Posted

技术标签:

【中文标题】如何使用 REST-ful URL 创建 Spring 3 + Tiles 2 webapp?【英文标题】:How do I create a Spring 3 + Tiles 2 webapp using REST-ful URLs? 【发布时间】:2010-04-20 23:59:34 【问题描述】:

我正忙着用 Spring 3.0 MVC 解析 URL。我只是在构建一个 HelloWorld 来尝试如何在 Spring 中构建一个 RESTful webapp,理论上没有什么复杂的。

我能找到的所有示例都基于注意文件扩展名(“*.htm”或“*.do”)的配置,包括人工目录名称前缀(“/foo”)甚至用点前缀路径(丑陋),所有使用一些人工正则表达式模式作为解析器信号的方法。对于 REST 方法,我想避免所有这些垃圾,只使用我的应用程序的自然 URL 模式。我会假设(可能是错误的)在 web.xml 中我会设置一个“/*”的 url 模式并将所有内容传递给 DispatcherServlet 进行解析,然后只依赖我控制器中的 URL 模式。

我无法可靠地让我的解析器捕获 URL 模式,并且在我的所有试验中,这都会导致资源未找到错误、堆栈溢出(循环)或某种不透明的 Spring 3 ServletException 堆栈跟踪——我对 Spring 的持续不满之一通常是错误消息通常不是很有帮助。

我想使用 Tiles 2 解析器。我在 WEB-INF/views/ 中找到了我的 *.jsp 文件,并在应用程序根目录中有一个单行 index.jsp 文件,该文件重定向到我的 layout.xml(Tiles 2 配置器)设置的索引文件。

我做了所有正常的 Spring 3 高级配置:

<mvc:annotation-driven />

<mvc:view-controller path="/" view-name="index"/>

<context:component-scan base-package="com.acme.web.controller" />

...其次是 UrlBasedViewResolver、InternalResourceViewResolver、UrlFilenameViewController 等的各种组合和配置,以及我的 Tiles 2 配置文件中的各种变体。然后在我的控制器中,我试图获取我的 URL 模式。问题是,我什至无法可靠地让解析器捕获要发送到我的控制器的模式。

现在已经持续了好几天,我认为很容易实现的东西没有真正的进展。我可能试图一次做太多事情,尽管我认为这应该是一个简单的(几乎是默认的)配置。我只是想创建一个简单的 HelloWorld 类型的应用程序,我没想到这是火箭科学。

除了我发布我自己的配置(遍布地图)之外,有谁知道一个在线示例:显示一个使用 REST-ful URL 的简单 Spring 3 MVC + Tiles 2 Web 应用程序(即,避免强制 URL 模式(例如文件扩展名、添加的目录名称或点)并仅依赖 Spring 3 代码/注释(即,Spring MVC 本身之外的任何内容)来完成此操作? 有没有简单的方法可以做到这一点?

非常感谢您的帮助。

【问题讨论】:

我也在尝试通过 Spring 的 RESTful URL 将 Spring 3 Web MVC 与 Apache Tiles 结合使用。我可以得到一个要渲染的页面,但是我从 Tomcat 获得了无限递归,我怀疑这是来自根 servlet 映射 &lt;url-pattern&gt;/&lt;/url-pattern&gt; 【参考方案1】:
<bean id="tilesviewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver" 
            p:order="0"/>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles-defs/tilesConfig.xml</value>
            </list>
        </property>
</bean> 

见TilesViewResolver

【讨论】:

【参考方案2】:

您可以尝试 MVC-AJAX Spring 3 示例。

https://src.springframework.org/svn/spring-samples/

【讨论】:

链接的示例不使用 Apache Tiles。【参考方案3】:

spring 示例应用程序:petcare 具有以宁静的方式定义的链接。 您可以从以下地址下载:https://src.springframework.org/svn/spring-samples/ 步骤是: 1.定义tiles配置bean(配置xml文件)

<!-- Initializes the Apache Tiles CompositeView system -->
    <beans:bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
        <beans:property name="definitions">
            <beans:value>
                /WEB-INF/**/tiles.xml
            </beans:value>
        </beans:property>
        <beans:property name="checkRefresh" value="true" />
    </beans:bean>

    定义嵌套在 UrlBasedViewResolver 中的瓦片视图类解析器

    value="org.springframework.web.servlet.view.tiles2.TilesView" />

    为每个布局/页面等定义tiles.xml定义文件

【讨论】:

以上是关于如何使用 REST-ful URL 创建 Spring 3 + Tiles 2 webapp?的主要内容,如果未能解决你的问题,请参考以下文章

在邮件程序中使用 REST-ful link_to 时出现问题

在 REST-ful api 中序列化外键字段的最佳实践是啥

面试问题记录

springboot中使用spring security,登录url就出现403错误

如何在 SAMLEntryPoint 中设置 RelayState

trove design