Struts标记库与JSTL标记库

Struts框架提供的自定义标记库包括Html、Bean、Logic和Nested。这些标记库本身就具有很高的重用性,视图中有意义的扩展也就在于对这些自定义标记库的扩展。标记符处理器都是常规的Java类,因此可以通过创建子类实现特定的功能。在Struts的标记库中对视图影响最大的是HTML标记库,HTML标记库也是最有可能被扩展的地方。当扩展了标记后,必须定义存放这些标记的标记库。尽管可以包自定义的标记加入到标准的Struts标记库中,但是这样会使应用程序升级到新的Struts版本变得非常麻烦。因此应该定义单独的标记库,来存放和具体应用相关的自定义标记。
一旦创建了一个用于扩展的.tld文件并用Web应用程序部署描述符(web.xml)进行注册,用户就可以在JSP页面中方便地使用这些标记。
另一种对视图层扩展的方式是引入JSP标准标记库JSTL。JSTL是JSP 1.2定制标记库集,它们为典型的表示层任务(例如数据格式化、迭代或条件内容显示)提供标准实现。表达式语言(EL)是JSTL定制标记支持另一种用于指定动态属性值的机制。EL提供了一些标识符、存取器和运算符,用来检索和操作驻留在JSP容器中的数据。
Struts框架已经考虑到与JSTL的整合问题,struts-el标记库便是Struts标记库的JSTL实现版本。struts-el标记库中的所有标记均扩展自Struts标准标记库,不同的是,struts-el采用了JSTL中的“表达式运算引擎”,而不是“运行时表达式(rtexprvalues)”。举例来说,使用bean:write标记输出一段消息文本时可能会采用如下的形式:
<bean:message key="<%= stringvar %>"/>
其中stringvar为JSP页面中的一个变量。如果采用strut-el标记库,将是下面的形式:
<bean-el:message key="${stringvar}"/>
struts-el标记库实现了绝大部分Struts标准标记库的标记,但是也有一些标记例外。其中Html标记全部实现,Bean标记和Logic标记未实现的部分及其应该对应JSTL标记见表12-1和表12-2。
表12-1 Bean标记库中未在struts-el中实现的标记

Struts标记
JSTL 标记
cookie
c:set, EL
define
c:set, EL
header
c:set, EL
include
c:import
parameter
c:set, EL
write
c:out

表12-2 Logic标记库中未在struts-el中实现的标记

Struts标记
JSTL 标记
empty
c:when, EL
equal
c:when, EL
greaterEqual
c:if, c:when, EL
greaterThan
c:if, c:when, EL
lessEqual
c:if, c:when, EL
lessThan
c:if, c:when, EL
notEmpty
c:if, c:when, EL
notEqual
c:if, c:when, EL

注意:使用struts-el标记的Web容器必须支持Servlet 2.3和JSP 1.2以上,并将jstl.jar置于应用程序的WEB-INF\lib目录下。另外,struts-el.jar包存在于Struts下载包中的contrib\lib目录中。
原文地址:https://www.cnblogs.com/fayf/p/1274249.html