`
archangel
  • 浏览: 12408 次
文章分类
社区版块
存档分类
最新评论

FreeMarker和Jsp的应用范围

    博客分类:
  • java
阅读更多

最近要做新项目,想了解一下新的技术看看有没有可以改进的地方。于是学习了一下Struts2(之前一直用Struts1),接触到了FreeMarker,做了一些实验之后,对其功能很是疑惑。

 

从我自己测试以及看网上大家的评论可以得出FreeMarker具备以下优点:
1、逻辑分离好,View层不出现逻辑代码,可维护性好
2、美工和技术的工作分离
3、速度快,省去了Jsp编译过程
4、可以在IDE中运行,换句话说是可以进行单元测试
5、可以制作Macro


看完大量FreeMarker的资料以及大家对它的评论之后,依旧无法打消我心中的疑惑,针对以上5点我可以讲:

1、逻辑分离,无非是FreeMarker模版无法直接运行Java代码,强制要求所有数据必须预处理才能将结果传入View层做最终展现。我个人对这种过于纯粹的东西报以怀疑,实际工作中很多时候这种纯粹的逻辑分离很难实现。当一个长期维护的项目,不断增加显示逻辑之后,为了保持View层的这种强制的干净,而在Action层增加大量处理逻辑,我不觉得维护性会好(也许我理解错了,毕竟没有长期使用过)。就像前些年流行XML配置文件,分离了逻辑,后来发现太麻烦,又产生了Annotation消灭XML配置文件,无论分离还是聚合,逻辑是无法消灭的,总是要有一个地方放。所以到底是多写一些代码来保证View层看上去很美,还是把显示逻辑全写到View层,谁又能真正说清楚哪个更好。

我们到今天很多项目还在用最传统的Jsp,也还在用<%%>,也会有比较多的Java代码出现在Jsp页面上的情况,但是页面上的代码全都是显示相关的逻辑,都是最简单的Java代码,会Java的就能维护,学习成本基本为0,维护岂不是更好?更符合KISS原则。


2、美工和技术工作分离,我一直觉得这只是一个神话。到今天为止,我们公司美工和开发的合作方式基本是美工做界面原型图,把需要的图片切割出来,把需要的效果制作成CSS
交给技术,技术按照需要的效果进行编码制作HTML静态原型界面。因为,对于稍微复杂一点的页面,我相信没有哪个技术能忍受美工直接用DreamWeaver生成出来的代码。

3、速度快,算个优点吧,但是没有那么重要吧,对于现在的机器一般的Jsp编译也就一两秒钟的事情。多数的时间还是花在编写和测试上的。

4、可以在IDE中运行
,这个也算个小优点,但是界面开发更多时候还是以最终显示效果来进行测试的,毕竟比较直观。直接从生成的HTML找需要的信息和刷新一下浏览器看结果哪个更高效?

5、Macro,这个没有太多使用经验,就不做评论了,但是可以确定Jsp一定也能实现。


就以上的这些问题,我无法看到在大范围Web开发中FreeMarker相对于Jsp的优势。

 

我认为FreeMarker可以应用在以下场景:

1、AJAX请求的局部内容的生成,例如某个实时刷新的消息栏。可以称之为View层组件,干净,和主系统功能分离,可重用。

2、Javascript数据生成,甚至Javascript程序的生成。举例如Javascript中提示信息要做多语言处理,那么可以由FreeMarker动态生成,或生成多个静态Javascript文件。


3、后台动态文档生成,如群发邮件模板生成个性邮件。

 

任何技术都有他的适用范围,抛砖引玉,希望FreeMarker有丰富经验的兄弟多说说自己是如何使用FreeMarker的,以及使用中的一些优点和问题。

 

分享到:
评论
8 楼 phoenixup 2009-11-19  
引用

1、逻辑分离,无非是FreeMarker模版无法直接运行Java代码,强制要求所有数据必须预处理才能将结果传入View层做最终展现。我个人对这种过于纯粹的东西报以怀疑,实际工作中很多时候这种纯粹的逻辑分离很难实现。当一个长期维护的项目,不断增加显示逻辑之后,为了保持View层的这种强制的干净,而在Action层增加大量处理逻辑,我不觉得维护性会好(也许我理解错了,毕竟没有长期使用过)。就像前些年流行XML配置文件,分离了逻辑,后来发现太麻烦,又产生了Annotation消灭XML配置文件,无论分离还是聚合,逻辑是无法消灭的,总是要有一个地方放。所以到底是多写一些代码来保证View层看上去很美,还是把显示逻辑全写到View层,谁又能真正说清楚哪个更好。

我们到今天很多项目还在用最传统的Jsp,也还在用<%%>,也会有比较多的Java代码出现在Jsp页面上的情况,但是页面上的代码全都是显示相关的逻辑,都是最简单的Java代码,会Java的就能维护,学习成本基本为0,维护岂不是更好?更符合KISS原则。

业务逻辑与视图展示分离思维在目前来讲,是大家比较认可和赞成的。如果你认为在JSP写<%%>是一种很HAPPY的事情,恐怕同意你的兄台不是太多,J2EE的开发中分层的目的就是减少开发、维护的成本,使系统的结构更加清晰优美,这点你同意吗?
引用

2、美工和技术工作分离,我一直觉得这只是一个神话。到今天为止,我们公司美工和开发的合作方式基本是美工做界面原型图,把需要的图片切割出来,把需要的效果制作成CSS交给技术,技术按照需要的效果进行编码制作HTML静态原型界面。因为,对于稍微复杂一点的页面,我相信没有哪个技术能忍受美工直接用DreamWeaver生成出来的代码。

这个不是神话,很多公司都可以做到,在多种视图技术(JSP(Sitmesh,Tiles)、Freemarker、Velocity、Facelets等等)的支持下,已经可以做到美工就是改改Css和Image,程序员只顾着自己垒垒砖头就OK~~但是完全不交互是不可能的~
引用

3、速度快,算个优点吧,但是没有那么重要吧,对于现在的机器一般的Jsp编译也就一两秒钟的事情。多数的时间还是花在编写和测试上的。

速度吗,其实不是很快,我的测试没有JSP快,但是慢的也不多。
引用

4、可以在IDE中运行,这个也算个小优点,但是界面开发更多时候还是以最终显示效果来进行测试的,毕竟比较直观。直接从生成的HTML找需要的信息和刷新一下浏览器看结果哪个更高效?

支持Freemarker的IDE很成熟,比如Intellij IDEA、Eclipse,不过自定义的宏需要一些额外的修改,在IDEA中修改Template Files可以让Freemarker的提示更高效。

引用

5、Macro,这个没有太多使用经验,就不做评论了,但是可以确定Jsp一定也能实现。

这个嘛。就是谁用谁知道了,不包治百病但是绝对有效!=.=
7 楼 jansel 2009-11-19  
相比之下,FM的优点:

FM的macro很强大,类似Method。LZ试着在JSP里面写一个Method试试。

FM是一种模板语言,而生成的文本是用来UI展示呢,还是本身就生成文本文件,FM是不理会的;但是JSP不同,需要Sevlet容器,并且只能用于Web。

FM的错误提示很强大,不像JSP一样,还需要看编译成Servlet的代码才能看出是什么错误。

FM的缺点:

没有好的IDE支持,JBoss的FreemarkerIDE提示有限,而且不能预览

至于性能,估计FM和JSP应该差不多。
6 楼 case0079 2009-11-19  
需要考虑几个问题。
1。view层真的需要调用JAVA程序吗?
   首先view不应该调用business代码,最多是调用一些格式化的代码。那么只要能实现一个格式化的框架就能使view完全和java无关。

2.如果技术要看美工的DreamWeaver代码那还叫技术和美工分离吗?

3。4。5。是不相上下的。
5 楼 蔡华江 2009-11-19  
对于通常的SSH框架来说,选择freemarker还是jsp是同样的方便。
freemarker和jsp不是逻辑分离的原因,还只不过是个手段。我通常是在生成html页面中使用jsp,而生成xml时使用freemarker,这样感觉思路清淅点,jsp代表着一个页面,而freemarker通常用于生成请求的数据。但是,两者是共通的,jsp也可以生成xml文件,freemarker也可以生成html页面。不过,jsp的IDE作为页面展示时,IDE的支持会好点。
还有个很大不同之处,在于freemarker的表达式语法很适合用于数据展示,而jsp做为数据处理时通常要借用jstl等标签库。
4 楼 whaosoft 2009-11-19  
lz还要多加研究啊~ 在多用用会有新的体会 我每次都是一段时间以后推到我以前的想法 可能是我太初级了吧
3 楼 yongboy 2009-11-19  
<p>servlet 一样可以很容易的和Freemarker结合在一起,比如下面的:</p>
<h3 class="type_original" title="原创"><a href="http://yongboy.iteye.com/blog/513764">很轻的,Servlet + Freemarker 组合体,没有那么硬~</a></h3>
<p>url:</p>
<p>http://yongboy.iteye.com/blog/513764</p>
<p> </p>
<p>Servlet代码没有变化,Freemarker轻易的取代了JSP。这是一种组合方式,没有显示在程序代码里面声明使用了Freemarker。</p>
<p> </p>
2 楼 karlmax 2009-11-19  
不是所有的数据处理都需要放在Action中的,引入ViewBean层接收Action传过来的数据,处理后发给显示层。另外我对所谓的速度快也持怀疑态度,大量反射的应用不可能比原生jsp快的。
1 楼 archangel 2009-11-19  
没有兄弟想讨论一下这个问题么?还是我放错了版面..

相关推荐

    freemarker概述

    #### 三、FreeMarker的适用范围 1. **Web开发**: FreeMarker非常适合与MVC架构的Web应用框架(如Struts)结合使用,作为视图组件。 2. **非Web应用**: 由于FreeMarker与容器无关,它可以被轻松地应用于桌面应用或...

    freemarker 中午手册

    - **架构兼容性**:Freemarker 与容器无关,这意味着它不仅可以在 Web 环境下运行,还可以在任何 Java 应用环境中使用,这极大地增强了它的灵活性和适用范围。 - **成本优势**:Freemarker 是开源且免费的,这使得它...

    freemarker中文手册.pdf

    - **适用场景**:虽然最初设计用于生成HTML网页,尤其是配合MVC架构的应用程序,但其应用范围广泛,不仅限于Web开发领域。 - **特点**: - **与容器无关**:FreeMarker不依赖于任何特定的Web容器,如Tomcat或Jetty...

    FreeMarker

    ### FreeMarker概述 FreeMarker是一种基于模板的引擎技术,它主要负责将...综上所述,FreeMarker作为一个强大的模板引擎,在Web开发和其他应用场景中都表现出色,其丰富的特性和灵活性使其成为一个不可或缺的工具。

    JSP应用开发详解

    在这个"JSP应用开发详解"的主题中,我们将深入探讨JSP的核心概念、工作原理以及实际应用。 1. JSP核心概念 - JSP页面:JSP页面由HTML或XML标记和嵌入的Java代码组成,服务器负责解析并执行这些Java代码。 - JSP...

    freemarker中文手册

    同时,它的应用范围不仅限于Web环境,也适用于非Web场景,如桌面应用或命令行工具中的文本生成任务。 #### 二、Freemarker的关键特性 1. **通用性与灵活性**:Freemarker的设计理念之一是高度通用,能适应多种文本...

    JSP网页模板

    例如FreeMarker、Velocity和Thymeleaf。 2. **使用模板引擎的优势**: - 更好的前后端分离:模板引擎处理动态内容,HTML设计师无需关心Java代码。 - 提高开发效率:模板语法简洁,易于理解和编写。 - 优化性能:...

    JSP转换HTML

    2. **模板引擎**:为了更有效地管理JSP页面,开发者经常使用模板引擎,如FreeMarker或Velocity。这些模板引擎允许开发者将HTML结构与Java代码分离,便于转换。转换时,模板引擎会解析JSP文件,执行Java表达式,并...

    freemarker中文API手册.pdf

    - **适用范围**:FreeMarker不仅仅是一个Web应用框架,更适合作为其组成部分,例如作为Model2框架(如Struts)中的视图组件。同时,它还支持在非Web环境中应用,比如用于桌面应用或其他非Web项目。 #### 二、核心...

    jsp小程序案例分析

    EL提供了一种简洁的方式来访问页面范围内的对象和其属性,简化了JSP中的数据绑定。 6. **JSTL(JavaServer Pages Standard Tag Library)** JSTL是一组标准标签库,用于增强JSP的功能,例如处理XML、查询数据库、...

    JSP速成教程书籍下载

    4. **application**:全局应用程序范围的对象,适用于所有用户共享数据。 5. **pageContext**:提供对当前页面所有作用域的访问。 6. **out**:用于向客户端输出内容。 7. **exception**:捕获并处理页面中的异常。 ...

    freemarker 中文手册

    - **适用范围**: - 不是 Web 应用框架,但可以作为 Web 应用框架的一个组成部分使用,如 Model2 架构中的视图组件。 - 与容器无关,因此既适用于 Web 应用程序环境,也适用于非 Web 的应用程序环境。 - **许可证*...

    springboot整合jsp

    而JSP(JavaServer Pages)作为传统的动态网页技术,虽然在现代Web应用中逐渐被更先进的视图技术如Thymeleaf、Freemarker等取代,但在很多项目中仍有其应用场景。本篇文章将深入探讨如何在Spring Boot项目中整合JSP...

    Freemarker开发指南

    - **适用范围**: 不仅仅用于 Web 开发,也可以应用于非 Web 的应用程序环境中。 - **与其他框架的关系**: 可以作为 Model2 架构(例如 Struts)的视图组件。此外,尽管 Freemarker 是一个独立的组件,但也可以与 JSP...

    JSP项目+Struts框架实现

    除了JSP和Struts,项目可能还涉及到了其他技术,如Servlet、JDBC用于数据库连接,以及可能的模板引擎如FreeMarker或Velocity来生成更复杂的动态视图。此外,为了提高用户体验,可能还应用了AJAX进行异步通信,以及...

    JSP由浅入深(CHM)

    随着Web开发的进步,虽然JSP仍被广泛使用,但很多现代Web框架如Spring MVC、Struts2等已经提供了更高级的视图技术,如Thymeleaf和FreeMarker。这些技术在复杂应用中提供了更好的性能和灵活性。 综上所述,"JSP...

    JSP 技术大全(PDG)

    JSP技术大全(PDG)涵盖的范围广泛,包括JSP的基础概念、语法、生命周期、内置对象、指令、表达式、脚本元素、EL(Expression Language)、JSTL(JSP Standard Tag Library)以及MVC设计模式在JSP中的应用等。...

    JSP博客系统(论文)

    《JSP博客系统》 本项目是一篇关于JSP博客系统的详细论文,涵盖了从系统设计到实现的全过程,旨在探讨如何运用Java...通过学习和理解这篇论文,读者不仅可以掌握JSP的实战技巧,还能对Web应用开发流程有更深入的理解。

Global site tag (gtag.js) - Google Analytics