Struts
的整个视图层(就是
MVC
模式中的
View
层)是由
Struts
的定制标签(或者称为定制动作)和客户端代码
(Javascript
、
HTML
等
)
实现的。这些
Struts
标签被写在
JSP
页面中,用于生成客户端代码、进行逻辑判断等工作,使用
Struts
标签可以尽量避免直接在
JSP
页面中直接使用
Java
代码,以使得
JSP
页面更容易编写和维护。
Struts 的标签库分为如下五类:
由于在MyEclipse 中已经带了Struts 相应的jar 包,因此,使用MyEclipse 来开发基于Struts 的Web 应用程序就无需再安装Struts 了。如果读者想使用其他的Struts 版本,可以到http://struts.apache.org/ 去下载。
一、
Struts1.x
标签库概述
Struts 的标签库分为如下五类:
1. HTML
标签库
在HTML
标签库中的定制标签一般和HTML
中的tag
是一一对应。如HTML
中的<form>
、各种类型的<input>
在HTML
标签库中都有定制标签和其对应。HTML
标签库的目的是将视图层的组件和控制层连接起来(事实上,不使用HTML
标签库中的定制标签也可以完成同样的工作,只是需要写更多的代码)。
2. Bean
标签库
Bean
标签库中的定制标签主要用来向客户端输出文本信息。那么Struts
为什么要单独提供一个标签库来向客户端输出文本信息呢?原因有两个:
1.
为Struts
提供国际化支持(也就是说可以从属性文件中读取文本信息,并将其输出到客户端)。
2.
为了避免直接使用Java
代码获得存储在request
和session
对象中的内容。
3. Logic
标签库
为了避免在JSP
页面中直接使用Java
代码进行逻辑判断和循环操作。Logic
标签库提供了一组标签用于在不使用Java
代码的情况下也可以完成同样的工作。而且使用标签进行逻辑判断和循环操作要比使用Java
代码更容易理解和维护。
4. Nested
标签库
这个标签库中的标签有来显示form
或对象中的“nested
”属性。
5. Tiles
标签库
这个标签库的标签允许我们为视图层建立布局(layout
)。
在Struts 的标签库中有一些标签和JSTL 有一定的重合,如Logic 标签库的逻辑判断标签。但是JSTL 要求Servlet 容器要符合JSP 2.0 规范,否则JSTL 无法正常工作。这对于那么运行在较低版本的Servleet 容器中的程序就无法享受JSTL 给我们带来的强大的功能。但Struts 标签却没这个要求。因此,如果我们的Web 程序中使用了Struts ,建议尽量使用Struts 标签库中的标签,除非能保证Web 应用程序的运行环境都支持JSP 2.0 规范。
在Struts 的标签库中有一些标签和JSTL 有一定的重合,如Logic 标签库的逻辑判断标签。但是JSTL 要求Servlet 容器要符合JSP 2.0 规范,否则JSTL 无法正常工作。这对于那么运行在较低版本的Servleet 容器中的程序就无法享受JSTL 给我们带来的强大的功能。但Struts 标签却没这个要求。因此,如果我们的Web 程序中使用了Struts ,建议尽量使用Struts 标签库中的标签,除非能保证Web 应用程序的运行环境都支持JSP 2.0 规范。
二、安装和声明
Struts
标签
由于在MyEclipse 中已经带了Struts 相应的jar 包,因此,使用MyEclipse 来开发基于Struts 的Web 应用程序就无需再安装Struts 了。如果读者想使用其他的Struts 版本,可以到http://struts.apache.org/ 去下载。
Struts
标签库的声明和JSTL
类似,它们都需要使用taglib
指令。其实在MyEclipse
中我们根本不需要记忆如何来声明Struts
标签,因此,如果使用MyEclipse
的高级JSP
模板建立JSP
页面,MyEclipse
就会自动将声明Struts
标签的语句加到了JSP
页面中。在打开高级JSP
模板后,在“Template to use
”下拉列表框中选择“Standard JSP using Struts 1.2/1.3
”,然后点击“Finish
”按钮建立一个JSP
页面。打开这个刚建立的JSP
页面,我们会在page
指令的下面看到四条tablib
指令,其中Nested
标签库并未自动加入,如果JSP
页面中使用了Nested
标签库中的标签,就需要我们手工加入Nested
标签库的定义,Struts
标签库的声明代码如下:
<
%@ taglib
uri
="http://struts.apache.org/tags-bean"
prefix
="bean"
%
>
< %@ taglib uri ="http://struts.apache.org/tags-html" prefix ="html" % >
< %@ taglib uri ="http://struts.apache.org/tags-logic" prefix ="logic" % >
< %@ taglib uri ="http://struts.apache.org/tags-tiles" prefix ="tiles" % >
< %-- JSP高级模板并未加入Nested标签库声明,需要手工加入--% >
< %@ taglib uri ="http://struts.apache.org/tags-nested" prefix ="nested" % >
< %@ taglib uri ="http://struts.apache.org/tags-html" prefix ="html" % >
< %@ taglib uri ="http://struts.apache.org/tags-logic" prefix ="logic" % >
< %@ taglib uri ="http://struts.apache.org/tags-tiles" prefix ="tiles" % >
< %-- JSP高级模板并未加入Nested标签库声明,需要手工加入--% >
< %@ taglib uri ="http://struts.apache.org/tags-nested" prefix ="nested" % >
在上面的Struts
标签库的声明中,taglib
标签的prefix
属性值可以是任何字符串(但不同的标签库的prefix
的值不同相同),但建议按着上面代码的声明语句中的prefix
属性值来声明相应的Struts
标签库。
还有一点需要注意,taglib
指令的uri
属性除了使用在.tld
文件中定义的uri
值来定位标签库外,还可以直接使用.tld
文件的相对路径来定位。在使用MyEclipse
将一个Web
工程加入Struts
特性后,会自动在WEB-INF
目录中加入如下五个文件:
1. struts-bean.tld
:用于声明Bean
标签库中标签的tld
文件。
2. struts-html.tld
:用于声明HTML
标签库中标签的tld
文件。
3. struts-logic.tld
:用于声明Logic
标签库中标签的tld
文件。
4. struts-tiles.tld
:用于声明Tiles
标签库中标签的tld
文件。
5. struts-nested.tld
:用于声明Nested
标签库中标签的tld
文件。
因此,也可以使用如下的代码来声明
Struts
标签。
<
%@ taglib
uri
="/WEB-INF/struts-bean.tld"
prefix
="bean"
%
>
< %@ taglib uri ="/WEB-INF/struts-html.tld" prefix ="html" % >
< %@ taglib uri ="/WEB-INF/struts-logic.tld" prefix ="logic" % >
< %@ taglib uri ="/WEB-INF/struts-tiles.tld" prefix ="tiles" % >
< %-- JSP高级模板并未加入Nested标签库声明,需要手工加入--% >
< %@ taglib uri ="/WEB-INF/struts-nested.tld" prefix ="nested" % >
< %@ taglib uri ="/WEB-INF/struts-html.tld" prefix ="html" % >
< %@ taglib uri ="/WEB-INF/struts-logic.tld" prefix ="logic" % >
< %@ taglib uri ="/WEB-INF/struts-tiles.tld" prefix ="tiles" % >
< %-- JSP高级模板并未加入Nested标签库声明,需要手工加入--% >
< %@ taglib uri ="/WEB-INF/struts-nested.tld" prefix ="nested" % >
其中WEB-INF
前面的“/
”表示Web
根目录。感兴趣的读者也可以打开这些.tld
文件,查看其中的内容。也可以将这些.tld
文件中的<uri>
标签的内容改为其他的内容,如将struts-bean.tld
文件中的<uri>
标签的内容改为struts-bean
,那么就可以使用如下的语句来声明Bean
标签库了:
<
%@ taglib
uri
="struts-bean"
prefix
="bean"
%
>
但要注意,要想使修改生效,需要重启Tomcat
或是重新发布当前的Web
应用程序。
本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215242,如需转载请自行联系原作者