用于 Spring MVC 视图层的 JSP 替代品

我希望从头开始创建一个新的应用程序,可能会使用 SpringMVC,也可能会使用 SpringWebFlow。SpringRoo 创建的项目使用 SpringMVC 和可选的 Web Flow。对于视图技术有哪些好的替代方案,或者带有 Spring 和 JSTL 标签库以及 jQuery 的 JSP 是否可行?

63963 次浏览

我同时使用 条纹和 Spring。条纹在大多数情况下不会妨碍你,但是我发现当你需要它的时候,它可以很好地增强 Spring。

我使用的是 速度和 Spring MVC。此外,我托管我的应用程序在谷歌应用程序引擎,我没有问题。

在标准 JavaEEAPI 中,JSP 的唯一替代方案是 脸谱。到目前为止(2010) JSF是唯一一个本地支持 Faclets 的 MVC 框架。

Spring MVC 只支持开箱即用的 JSP,但是它有一个可配置的 视图解析器视图解析器,它允许您使用 脸谱。其他候选者是第三方模板框架,如 速度Freemarker百里香叶,它们可以配置为 Spring MVC 的视图技术。Spring 文档有带 Velocity 和 Freemarker 的 集成例子

(我之前的回答在这里有点过时了。)Freemarker 至少和 Velocity 一样好。但是 Thymeleaf 看起来更加引人注目,加上布局方言,它可能使得 sitemesh 和 tiles 这样的模板框架变得不必要。 对于 JSF 来说,思想工厂的批评似乎是有效的:

我们继续看到团队在使用 JSF (JavaServer Faces)时遇到麻烦,并建议你避免使用这种技术。团队似乎选择了 JSF,因为它是 JavaEE 标准,而没有真正评估编程模型是否适合他们。我们认为 JSF 是有缺陷的,因为它的编程模型鼓励使用自己的抽象,而不是完全接受底层的 Web 模型。与 ASP.NET webform 一样,JSF 尝试在顶部 HTML 标记和无状态 HTTP 协议上创建有状态组件树。JSF 2.0和2.2的改进,比如引入无状态视图和推广 GET,是朝着正确方向迈出的一步,甚至可能承认了原始模型的缺陷,但是我们觉得这太少太晚了。我们建议团队使用简单的框架,并与包括 HTTP、 HTML 和 CSS 在内的 Web 技术密切合作,而不是处理 JSF 的复杂性。

Spring MVC 提供了与许多不同 视图技术的集成。 我建议使用 FreeMarker速度

Springs 3文档 也建议使用 FreeMarker。Freemarker (据我所知)很快,并且集成了一些 Spring 特性,比如绑定。

在 SpringMVC 上,您可以拥有任意多种视图技术。我有 FreeMarker和 JSP 视图解析器。当我遇到一个在 FreeMarker 中太复杂的视图(或者在 JSP 中更方便)时,我创建一个 JSP 视图。例如,使用 JSTL 的 Spring 可以很好地处理表单。为此,我使用 JSP 视图,但对于其他几乎所有内容,我都使用 FreeMarker 视图。

查看 Spring MVC 文档,看看如何配置几个视图解析器,基本上:

<bean name="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value=""/>
<property name="suffix" value=".ftl"/>
<property name="order" value="1"/> <!--NOTICE THE ORDER-->
</bean>


<bean id="jspViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="order" value="2"/> <!--NOTICE THE ORDER-->
</bean>

虽然这是一个老问题,我认为我会提供一个新兴的选择,即 缩放

Scalate 在模板选项方面非常强大。唯一的问题是 Scalate 需要大量的依赖关系(当它需要 Scala 时,它不需要你用 Scala 编写)。

不过,我目前最喜欢的是 < strong > Handlebars.java ,它确实具有 Spring 集成。

我最近开始使用纯 HTML 和 jQuery 来表示,Spring MVC 只创建了一个 JSON 视图。

到目前为止一切都很顺利,即使我必须做 javascript 的工作,它使得与我的设计师的交互更加容易,当他有变化时,周转时间也更快,因为我不必将他的 HTML 转换成我的 JSP。整个网站的可维护性还没有定论。

我认为 瓷砖可以帮助你。
您可以定义模板并在其中使用 JSTL。

我最近发现了 百里香叶

它看起来是 JSP 的完全替代品,并且与 Spring MVC 集成。模板方法看起来更像 HTML,可能对 UI 设计人员更加合适。他们有一个小的写作,比较两个 解决方案并排。

我的建议是不要看上面大部分描述的视图框架,因为它不是在 Spring MVC 之上编写的,因为你最终会遇到回发之类的问题,这意味着你不能通过这种视图技术提交数据,也不能从 server 获得响应。例如验证,编辑数据提交刷新回来的数据服务器将不工作。

这是因为以上视图技术中的 java bean 不使用 Spring 容器生命周期。您只能将它们用于纯视图示例无状态请求。例如,在 JSF 中你不能使用回发,因为 JSF 回发只有在你使用 JSF 生命周期时才能工作,如果你使用 Spring 框架 JSF 视图解析器和 spring mvc,你就不能回发,所以你需要替换 JSF servlet 控制器而不是 spring mvc 控制器。

同样,由于您的完整项目需求并不清楚,如果您不想要回发需求,您可以使用上面的一些选择。

在 top og spring mvc 上编写的一个视图技术示例是基于 ZK mvc 的 ZK 框架,在这个框架中,您可以从 ZK GenericForwardComposer 扩展 Spring mvc 控制器来处理事件。您总是可以使用 Spring 框架来处理这些控制器的生命周期。

你可以谷歌找到类似的其他产品。

这篇综述是基于框架生命周期的高层次设计。

一切顺利! ! !

您可以在 Spring Webflow 之上运行 Faclets

Phpj呢?

它可以用作视图模板,也可以从头开始制作 Web 服务器系统

我做 phpj 是因为我不喜欢一直用 tomcat 来更新我的应用程序,所以我可以使用类似 apache 的配置来为我的 web 应用程序使用静态位置

你也可以在 SpringMVC 中使用 Angular (客户端框架)作为你的视图层。

ApacheVelocity 是 Java 服务器页面的一个很好的替代品。