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

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的,以及使用中的一些优点和问题。

 

分享到:
评论
68 楼 walle1027 2010-07-25  
关于marco和taglib的争论
<#--
 | 画面共用头部部分
 | 创建者:杨涛 
 | 创建时间:2009-05-05 
 | 版本:1.0 
 -->
<#macro head>
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<script type="text/javascript" src="${path}/js/jquery-1.4.2.min.gzjs"></script>
	<script type="text/javascript" src="${path}/js/jquery-easyui/easyloader.js"></script>
	<script type="text/javascript" src="${path}/js/My97DatePicker/WdatePicker.js"></script>
	<script type="text/javascript" src="${path}/js/util.js"></script>
	<link rel="stylesheet" type="text/css" href="${path}/js/jquery-easyui/themes/icon.css" />
	<link rel="stylesheet" type="text/css" href="${path}/js/jquery-easyui/themes/default/pagination.css" />
	<link rel="stylesheet" type="text/css" href="${path}/css/yangtao.css" />
	<title>运输管理系统</title>
</head>
<script type="text/javascript">
using('linkbutton');
$(document).ready(function(){
	$.ajaxSetup({
	  cache:false,
	  dateType:'json'
	});
	$(document).bind('contextmenu',function(){return false;})
})

</script>
</#macro>

<#--
 | 通用的HTML模板宏,加入常用的js引用和公用的部分
 | 作者: 杨涛
 | 日期: 2010-06-09
 -->
<#macro html>
<html>
	<@head/>
	<body>
		<#nested>
	</body>
	<@footer/>
</html>
</#macro>
 
<#macro footer>
<P id=copyRight align=center>
	<TABLE>
		<TBODY>
			<TR align=middle>
				<TD>版权所有</TD>
			</TR>
			<TR align=middle>
				<TD><A target=_blank>联系我们</A></TD>
			</TR>
		</TBODY>
	</TABLE>
</#macro>

关于页面
<#include "/common/common.html"> <@html>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0>
	<tr>
		<td width="15%" valign="top">
			<table width="100%" class=queryTable>
				<tr>
					<th>
						常量列表
					</th>
				</tr>
				<tr>
					<td>
						<@select id="constantList" list=constantList size="30"
						style="width:220px;" onclick="changeSelection()"/>
					</td>
				</tr>
			</table>
		</td>
		<td width="85%" valign="top">
			<TABLE cellSpacing=0 cellPadding=0 height="100%" width="100%"
				align=center border=0>
				<tr>
					<td>
						<div id="context"></div>
					</td>
				</tr>
				<tr>
					<td align="right">
						<a class="easyui-linkbutton" icon="icon-add" id="btnAdd"
							onclick="addNew()">新增</a>
					</td>
				</tr>
				<tr>
					<td height="200" width="100%">
						<iframe id="updateifm" frameborder="0" width="100%" height="100%">
						</iframe>
					</td>
				</tr>
			</TABLE>
		</td>
	</tr>
</TABLE>
</@html>
<script language="javascript" type="text/javascript">
	function changeSelection() {
		var selectedValue = $("#constantList").val();
		$.ajax( {
			url :'constant.selectByType.do',
			data : {
				"type" :selectedValue
			},
			dataType :'html',
			success : function(html) {
				$('#context').html(html);
			}
		})
	}
	function addNew() {
		var i = document.getElementById('constantList').selectedIndex;
		var type = "", typeName = "";
		if (i >= 0) {
			type = document.getElementById('constantList').options[i].value;
			typeName = document.getElementById('constantList').options[i].text;
		}
		$('#updateifm').attr(
				'src',
				'constant.execute.do?target=ConstantAdd&type='
						+ encodeURI(type) + '&typeName=' + encodeURI(typeName));
	}
	function update(id) {
		$('#updateifm').attr('src',
				'constant.execute.do?target=ConstantUpdate&id=' + id);
	}
	function deleteRow(id, version) {
		$.post('constant.delete.do?id=' + id + "&version=" + version, showMsg,
				'json')
	}
</script>

去掉CSS,几乎可以让美工直接view
还有freemarker的function
<#--
 | 取得时间的function,省去了各种判断
 -->
<#function getTime time="">
<#if time?is_date>
<#return time?string("yyyy-MM-dd HH:mm:ss")>
<#else>
<#return time>
</#if>
</#function>

<#--
 | 取得日期的function,省去了各种判断
 -->
<#function getDate time="">
<#if time?is_date>
<#return time?string("yyyy-MM-dd")>
<#else>
<#return time>
</#if>
</#function>
67 楼 dingyaodanv1 2010-03-06  
holan 写道
case0079 写道
那么页面嵌入代码的好处是什么?

保持controller的纯洁。
我不相信有谁能完全把页面剥得没有逻辑。
比如假如我要输出一个客户列表,假如这个客户是90后,需要输出非主流
你把逻辑写在controller里?从hibernate拿到客户List,你再遍历这个List,遇到90后,在客户的某个域里写上非主流?
那你这个客户的Model是不是不纯粹了?多了一个字段叫 是否非主流?还多遍历了一次List
这种逻辑是不是只能在视图层面上做?
这个例子很简单,但是以此类推,肯定会有逻辑在视图上做。
不是所有的逻辑都放在controller里才是好的

为什么不用jstl标签库呢,非要用<%%>?
jstl一样可以做判断。只不过不让java在前台美工的眼里出现。
我感觉JSTL比在页面上写java代码好看的多。而且也方便,如果不会java的看到你写的页面会头疼的```

66 楼 javaonejcy 2010-03-05  
无意中看到这个贴,freemarker我倒是没用过,但也看过书和教程什么的,我的态度是对任何技术都不轻易进入,因为java领域这种噱头太多了。个人认为jsp作为视图模板是很不错的选择,其他模板技术没有好用到能替代他的程度。如果你用一种统一的风格就可以把事情做好,那就不要引入更多的技术。另外,由于ajax的出现,htm+js则可能是更好,更纯粹的选择。再有,就是BC/S结构,RIA会是主流,那么就会有客户端编程和服务器端编程的分工问题,已经不仅仅是技术和美工的分离了。 其实还有其他选择,比如flex,javafx,可以解决部分美工问题,不过就有点扯远了。
65 楼 lijie250 2010-02-02  
struts2的freemarker调试页面的时候不方便啊,freemarker一个小改动,就要重启tomcat,很麻烦啊,如果jsp就不用了,直接刷新项目,就可以看到改动的效果,你们怎么解决呢?
64 楼 zhoujian1027 2010-02-02  
看了这么多 受教了~~
63 楼 zhaoyta 2009-11-26  
  1,我感觉服务器批量生成静态文件挺方便的,不知道是不是个优点
  2,Data可以缓存
 
62 楼 key232323 2009-11-26  
还有个就是不必要把需要的Class import过来。。。

这个算scripty ??

无所谓了,萝卜白菜各有所爱,讨论讨论而已

最近用个groovy + freemarker做**还是挺不错的,jsp忘记了不少,尤其是taglib,jstl标准的都不会用了,555
=以后用到了再拾起来。

lz莫非要结贴?
61 楼 aws 2009-11-26  
key232323 写道
4.还是macro,jsp的include static / dyn实现方式,可重用性不如macro高。

一般情况下重用性只和设计有关,和技术无关。

这句话我觉得还是推荐老兄去用用macro为好,同是nested,

原始的include(page层面)和taglib(控件层面)的nested,不如tm的nested来的直接和明了

而且fm的配置相对简单,不需要<%@page 等,再者,做单元测试,不需要web容器,
还有就上有个老兄说的,错误提示更细,一看便知


tiles比这个强得多
60 楼 key232323 2009-11-25  
http://key232323.iteye.com/blog/526338


感兴趣的去看看
59 楼 蔡华江 2009-11-25  
只要逻辑清楚,不会要求页面中非得不能出现JAVA代码的吧。
如果是一个单独的页面,我经常把东西全放在里面,甚至连个action都不跳,直接拿service。
58 楼 key232323 2009-11-25  
Macro的确是相对方便,那和重用性有何关系?用taglib无法重用吗?

老兄…………没说taglib无法啊……

只是说taglib没有macro重用性高——别PS我自以为了(多数血人家的,好不容自己思考了下,变成自己的观点了,又不让拿出来晒,郁闷啊)

well,随便来个例子吧,要不然光有论点,没论据,汗
57 楼 archangel 2009-11-25  
刃之舞 写道
从第一条来看,哥们你可能入行时间不够长,或者就是对于mvc的理解太低,


就像你想不明白为什么,jsp中为什么不能放java代码,我同样也想不明白为什么还有这么多人不能理解在jsp不要放java代码的好处。

你提到页面显示逻辑,我想js和tag能不能解决你这方面的问题呢?jstl和struts的tag都不够的话,你自己不知道写自定义tag吗?

每层干每层的事情,不要以现行项目中的做法就认为,view层中写java代码就是合理的事。

国内的项目很多都是完全为了实现而实现的,很少有考虑到什么耦合性,维护性,可复用性等等

经历过很多电信级的项目也都是这样,但不是说这样做是合理的,只能说我们国内的实际使用技术太落后了


如果你觉得这个话题对你来说不是问题,你可以不参与,或者偷偷点下隐藏贴或者新手贴。轻易去judge别人没任何意义。

我们讨论不要总停留在不是对就是错的程度上。就像我帖子的主题说明的,我希望探讨的是FreeMarker和JSP的“应用范围”。任何技术都有他合适做的事情。也就是说,现在有一架天平,一边是FreeMarker,另一边是JSP,我们把自己的观点放在两边,最终可以看出他们各自的长处,以及在什么情况下适合用哪一个。

另外,View层历来是最麻烦的,情况最复杂。我的确对一刀切强制要求view层不能出现Java代码的方式表示质疑,干净的只是教程中的那几个简单例子。实际项目中情况要复杂得多。追求View层强制干净的结果可能是带来很多不必要的麻烦。这中间需要有一个尺度的把握。

最后,电信项目碰巧我也做过。这类项目的核心难度通常不在View层。甚至说,它的View层是相对简单的。
56 楼 archangel 2009-11-25  
key232323 写道
4.还是macro,jsp的include static / dyn实现方式,可重用性不如macro高。

一般情况下重用性只和设计有关,和技术无关。

这句话我觉得还是推荐老兄去用用macro为好,同是nested,

原始的include(page层面)和taglib(控件层面)的nested,不如tm的nested来的直接和明了

而且fm的配置相对简单,不需要<%@page 等,再者,做单元测试,不需要web容器,
还有就上有个老兄说的,错误提示更细,一看便知


Macro的确是相对方便,那和重用性有何关系?用taglib无法重用吗?

用FreeMarker做view层的单元测试,有几个人能做到?想想就是个不靠谱的事。更何况现在ajax大行其道,很多显示逻辑已经提前到了客户端。

咱们探讨的应用情况不是纯学术应用,而是对于一个真正的项目,一个view层足够复杂,而且需要长期维护,有着种种实际问题的项目。
55 楼 archangel 2009-11-25  
key232323 写道
吐血——在html中,markup tag不放在第一位放在哪(jsp taglib是compiled markup tag,不算)?

技术上再屏蔽html/js/css,比如**bean,**taglib,结果那些web uier只会增加更多的学习成本,如果做个改动?还要修改jsp tag source?多麻烦啊


又如何?所谓的第一位不第一位又解决了什么核心问题?

另,说句题外话。讨论的时候如果老是吐血容易晕倒。
54 楼 javasem# 2009-11-24  
<div class="quote_title">archangel 写道</div>
<div class="quote_div">
<p>最近要做新项目,想了解一下新的技术看看有没有可以改进的地方。于是学习了一下Struts2(之前一直用Struts1),接触到了FreeMarker,做了一些实验之后,对其功能很是疑惑。</p>
<p> </p>
<p><strong>从我自己测试以及看网上大家的评论可以得出FreeMarker具备以下优点:</strong><br><span style="color: #0000ff;">1、逻辑分离好,View层不出现逻辑代码,可维护性好<br>2、美工和技术的工作分离<br>3、速度快,省去了Jsp编译过程<br>4、可以在IDE中运行,换句话说是可以进行单元测试<br>5、可以制作Macro</span><br><br><strong>看完大量FreeMarker的资料以及大家对它的评论之后,依旧无法打消我心中的疑惑,针对以上5点我可以讲:</strong><br><br><span style="color: #993366;"><span style="color: #0000ff;"><strong>1、逻辑分离</strong></span><span style="color: #ff6600;">,无非是FreeMarker模版无法直接运行Java代码,强制要求所有数据必须预处理才能将结果传入View层做最终展现。我个人对这种过于纯粹的东西报以怀疑,实际工作中很多时候这种纯粹的逻辑分离很难实现。当一个长期维护的项目,不断增加显示逻辑之后,为了保持View层的这种强制的干净,而在Action层增加大量处理逻辑,我不觉得维护性会好(也许我理解错了,毕竟没有长期使用过)。就像前些年流行XML配置文件,分离了逻辑,后来发现太麻烦,又产生了Annotation消灭XML配置文件,无论分离还是聚合,逻辑是无法消灭的,总是要有一个地方放。所以到底是多写一些代码来保证View层看上去很美,还是把显示逻辑全写到View层,谁又能真正说清楚哪个更好。<br><br>我们到今天很多项目还在用最传统的Jsp,也还在用&lt;%%&gt;,也会有比较多的Java代码出现在Jsp页面上的情况,但是页面上的代码全都是显示相关的逻辑,都是最简单的Java代码,会Java的就能维护,学习成本基本为0,维护岂不是更好?更符合KISS原则。</span><br><br><span style="color: #0000ff;"><strong>2、美工和技术工作分离</strong></span><span style="color: #ff6600;">,我一直觉得这只是一个神话。到今天为止,我们公司美工和开发的合作方式基本是美工做界面原型图,把需要的图片切割出来,把需要的效果制作成CSS</span></span><span style="color: #ff6600;">交给技术</span><span style="color: #993366;"><span style="color: #ff6600;">,技术按照需要的效果进行编码制作HTML静态原型界面。因为,对于稍微复杂一点的页面,我相信没有哪个技术能忍受美工直接用DreamWeaver生成出来的代码。</span><br><br><span style="color: #0000ff;"><strong>3、速度快</strong></span><span style="color: #ff6600;">,算个优点吧,但是没有那么重要吧,对于现在的机器一般的Jsp编译也就一两秒钟的事情。多数的时间还是花在编写和测试上的。</span><br><span style="color: #0000ff;"><br><strong>4、可以在IDE中运行</strong></span><span style="color: #ff6600;">,这个也算个小优点,但是界面开发更多时候还是以最终显示效果来进行测试的,毕竟比较直观。直接从生成的HTML找需要的信息和刷新一下浏览器看结果哪个更高效?</span><br><br><span style="color: #0000ff;"><strong>5、Macro</strong></span><span style="color: #ff6600;">,这个没有太多使用经验,就不做评论了,但是可以确定Jsp一定也能实现。</span></span><br><br>就以上的这些问题,我无法看到在大范围Web开发中FreeMarker相对于Jsp的优势。</p>
<p> </p>
<p><strong>我认为FreeMarker可以应用在以下场景:</strong><br><br><span style="color: #339966;">1、AJAX请求的局部内容的生成,例如某个实时刷新的消息栏。可以称之为View层组件,干净,和主系统功能分离,可重用。<br><br>2、Javascript数据生成,甚至Javascript程序的生成。举例如Javascript中提示信息要做多语言处理,那么可以由FreeMarker动态生成,或生成多个静态Javascript文件。</span></p>
<p><span style="color: #339966;"><br></span></p>
<p><span style="color: #339966;">3、后台动态文档生成,如群发邮件模板生成个性邮件。</span></p>
<p> </p>
<p>任何技术都有他的适用范围,抛砖引玉,希望FreeMarker有丰富经验的兄弟多说说自己是如何使用FreeMarker的,以及使用中的一些优点和问题。</p>
<p> </p>
</div>
<p><br>个人的看法:</p>
<p>1.业务层分离的问题:Action层不见得很增加太多的代码,因为基本大部分的逻辑代码都提取出来到逻辑层里了,我使用FM比较依赖于Struts2,所以有时候会将Struts2得标签引入再配合FM制定义方法的特性,感觉的确带来了不少的方便,代码复用性很强。相对于JSP代码更容易阅读,因为页面都是简单的${}占位与标签。学习成本上,个人觉得FM半天就能学会,根本不存在学习成本的问题</p>
<p>2.美工和技术分离:关于这点我也比较认同分离的确是实现了,我自己本人平时就擅长DIV+CSS静态页面设计,使用Freemarker可以自由改变页面的设计,首先JSP里大量的&lt;%%&gt;是需要有一个处理J业务的位置来放置JAVA代码,这样在静态页面上就会占据一个大空间,撑坏了页面布局。而FM的标签与占位符小而易看,对整个页面布局不会造成影响</p>
<p>3.速度:FM速度不见得快,反射调用太多</p>
<p>4.在IDE执行测试:这一点,我也不认同FM,像Struts2-test之类的可以脱离容器启动测试,但是太慢,而且不好判断结果是否是自己想要的,不如使用浏览器直接看直观。</p>
<p>5.Macro ,优势不多说。。。。</p>
<p>附加:静态页面动态生成。。。而且可以直接作为CSS,JS以前文件的模板。。。。</p>
53 楼 moyue 2009-11-23  
我们首先应该明确web开发,到底是网站开发还是企业应用开发,这两种开发的差别还是很大的,在两种开发中view所用的技术个人都有不同的体会,解决的问题不一样,结论也就不一样了
52 楼 key232323 2009-11-23  
well,——fm也许更提倡让html ui designer去写所谓的tag

freemarker剥夺了写java代码的权利??汗,freemarker只怎么不能直接调用java对象的方法了?
51 楼 刃之舞 2009-11-23  
从第一条来看,哥们你可能入行时间不够长,或者就是对于mvc的理解太低,


就像你想不明白为什么,jsp中为什么不能放java代码,我同样也想不明白为什么还有这么多人不能理解在jsp不要放java代码的好处。

你提到页面显示逻辑,我想js和tag能不能解决你这方面的问题呢?jstl和struts的tag都不够的话,你自己不知道写自定义tag吗?

每层干每层的事情,不要以现行项目中的做法就认为,view层中写java代码就是合理的事。

国内的项目很多都是完全为了实现而实现的,很少有考虑到什么耦合性,维护性,可复用性等等

经历过很多电信级的项目也都是这样,但不是说这样做是合理的,只能说我们国内的实际使用技术太落后了
50 楼 holan 2009-11-23  
case0079 写道
这种需求和把20091120显示为2009年11月20日有本质区别吗?
如果你的需求变成:把中文变成拼音显示。你觉得应该怎么样实现呢?

ruby里面有个概念叫helper,如果要实现拼音转换,我在helper里写一个方法页面上马上就可以用。

推到jsp里,简单点,我就直接写个工具类,再引用进来,页面调用这个工具类的方法就是了,假如你用freemarker来做,你怎么做?你是不是必须写在controller里?多了一次遍历是吧?

我的观点就是,页面里写一些程序那是完全没有问题的事情,而freemarker把我们这种权利剥夺了。
49 楼 key232323 2009-11-22  
4.还是macro,jsp的include static / dyn实现方式,可重用性不如macro高。

一般情况下重用性只和设计有关,和技术无关。

这句话我觉得还是推荐老兄去用用macro为好,同是nested,

原始的include(page层面)和taglib(控件层面)的nested,不如tm的nested来的直接和明了

而且fm的配置相对简单,不需要<%@page 等,再者,做单元测试,不需要web容器,
还有就上有个老兄说的,错误提示更细,一看便知

相关推荐

    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