用于Spring MVC视图层的JSP的替代方法
我正在从头开始创build一个新的应用程序,可能会使用Spring MVC和可能的Spring Web Flow。 Spring Roo创build的项目使用Spring MVC和Web Flow。 视图技术有什么好的替代方法,或者JSP是使用Spring和JSTL taglibs和jQuery的方式吗?
在标准的Java EE API中,JSP的唯一替代方法是Facelets 。 到目前为止(2010) JSF是本地支持Facelets的唯一的MVC框架。
Spring MVC只支持开箱即用的JSP,但是它有一个可configuration的视图parsing器 ,允许你使用Facelets 。 其他可选scheme是第三方模板框架,如Velocity , Freemarker和Thymeleaf ,可以将其configuration为Spring MVC的视图技术。 Spring文档具有Velocity和Freemarker的集成示例 。
我最近发现了Thymeleaf 。
它看起来完全取代了JSP,并且与Spring MVC集成。 模板方法看起来更像HTML,可能更适合您的UIdevise者。 他们有一个小的写法,并排比较两种解决scheme 。
我最近开始用纯HTML和jQuery来与Spring MVC进行演示,只创build一个JSON视图。
到目前为止,这一切都进行得很顺利,尽pipe我必须做JavaScript工作,但是当他有变化时,它使得与我的devise者更容易的交互和更快的周转时间,因为我不必将他的HTML转换成我的JSP。 评审团在整体网站可维护性方面仍然不足。
斯普林斯文件也build议Freemarker 。 Freemarker是(据我所知)快速,并具有一些像绑定的Springfunction的集成。
您可以在Spring MVC上拥有尽可能多的视图技术。 我有freemarker和JSP视图parsing器。 当我遇到这样一个观点,那就是在Freemarker中太复杂(或者在JSP中更简单),我创build了一个JSP视图。 例如,Spring JSLT在处理表单方面做得很好。 为此,我使用JSP视图,但几乎所有我有freemarker视图。
看看Spring MVC文档,看看如何configuration几个视图parsing器,基本上:
<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>
Spring MVC提供了与许多不同视图技术的集成。 我会推荐使用FreeMarker或者Velocity 。
虽然这是一个古老的问题,我想我会提供一个即将到来的替代品,这是斯卡拉特 。
Scalate是模板选项中的强者。 唯一的可能是Scalate需要大量的依赖(虽然它需要Scala,它不需要你在Scala中编写)。
我目前最喜欢的是有Spring集成的Handlebars.java 。
(我之前的回答在这里变得很糟糕。)Freemarker至less和Velocity一样好。 但是Thymeleaf看起来更加引人注目,与布局方言一样,它可能会使sitemesh和tile等模板框架变得不必要。 对于JSF来说, Thesetworks的批评似乎是正确的:
我们继续看到使用JSF – JavaServer Faces遇到麻烦,并且build议您避免使用这种技术。 团队似乎selectJSF是因为它是一个Java EE标准,而没有真正评估编程模型是否适合他们。 我们认为JSF是有缺陷的,因为它的编程模型鼓励使用自己的抽象,而不是完全支持底层Web模型。 像ASP.NET webforms一样,JSF尝试在顶级HTML标记和无状态HTTP协议上创build有状态的组件树。 JSF 2.0和2.2的改进,比如引入无状态的视图和GET的提升,都是朝着正确的方向迈进的,也许甚至承认原来的模型是有缺陷的,但我们觉得这太迟了。 我们build议团队不要处理JSF的复杂性,而要使用简单的框架,并与包括HTTP,HTML和CSS在内的Web技术密切合作。
我一起使用Stripes和Spring。 Stripe在大多数情况下都不会出现,但是当你需要的时候可以很好的补充Spring。
我正在使用velocity和Spring MVC。 另外,我在谷歌应用程序引擎上托pipe我的应用程序,我没有任何问题。
我的build议是不要看上面大多数上面描述的视图框架,这些框架不是在Spring MVC之上写的,因为你最终会遇到像回发这样的问题,这意味着你将无法从这个视图技术提交数据并从服务器取回响应。 例如validation,编辑数据提交刷新与服务器的数据将无法正常工作。
这是因为在视图技术上面的java bean不使用Spring容器生命周期。 您将只能使用它们作为纯视图示例无状态请求。 JSF的例子,你将无法使用回发,因为jsf回发只有在使用jsf生命周期,如果你使用spring框架的JSF视图parsing器与springmvc你将无法做回发,所以你需要更换jsf servlet控制器而不是spring的mvc控制器。
再次,因为你的整个项目的要求不明确,如果你不想要回发的要求,你可以使用上面的一些select。
一个写在顶部弹簧mvc上的示例视图技术是基于zk框架的zk mvc,其中您可以从ZK GenericForwardComposer扩展您的弹簧mvc控制器来处理事件。 你总是可以使用Spring来处理使用Spring框架的这些控制器的生命周期。
你可以谷歌find类似的其他产品。
这个评论是基于框架生命周期的高级devise。
祝一切顺利 !!!
我认为瓷砖可以帮助你。
你可以定义模板并在里面使用JSTL。
您也可以在Spring MVC中使用Angular(客户端框架)进行View,这使得您的应用程序更像SOA。
你可以运行Spring Webflow的Facelets ontop
那么phpj呢?
它可以用作视图模板,也可以从头开始构buildWeb服务器系统
我做了phpj,因为我不喜欢不得不更新我的应用程序和加载与tomcat所有的时间,所以在这个我可以使用静态位置为我的web应用程序使用类似Apache的configuration
Apache Velocity是Java Server Pages的一个很好的替代品。