转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/01/15/251411.html

Struts的整个视图层(就是MVC模式中的View层)是由Struts的定制标签(或者称为定制动作)和客户端代码(Javascript、HTML等)实现的。这些Struts标签被写在JSP页面中,用于生成客户端代码、进行逻辑判断等工作,使用Struts标签可以尽量避免直接在JSP页面中直接使用Java代码,以使得JSP页面更容易编写和维护。

一、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标签

由于在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" %>

在上面的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"%>

其中WEB-INF前面的“/”表示Web根目录。感兴趣的读者也可以打开这些.tld文件,查看其中的内容。也可以将这些.tld文件中的<uri>标签的内容改为其他的内容,如将struts-bean.tld文件中的<uri>标签的内容改为struts-bean,那么就可以使用如下的语句来声明Bean标签库了:

<%@ taglib uri="struts-bean" prefix="bean"%>

但要注意,要想使修改生效,需要重启Tomcat或是重新发布当前的Web应用程序。

【转】Struts1.x系列教程(4):标签库概述与安装的更多相关文章

  1. 【转】Struts1.x系列教程(7):Logic标签库

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...

  2. 【转】Struts1.x系列教程(6):Bean标签库

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...

  3. 【转】Struts1.x系列教程(5):HTML标签库

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...

  4. [转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法, ...

  5. 【转】Struts1.x系列教程(2):简单的数据验证

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/13/251197.html 简单验证从本质上说就是在服务端 ...

  6. 【转】Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道

    转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/14/251244.html ...

  7. 转:Java NIO系列教程(一)Java NIO 概述

    Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Sel ...

  8. Cobalt Strike系列教程第一章:简介与安装

    Cobalt Strike是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等多种功能.同时,Cobalt St ...

  9. RabbitMQ消息队列系列教程(二)Windows下安装和部署RabbitMQ

    摘要 本篇经验将和大家介绍Windows下安装和部署RabbitMQ消息队列服务器,希望对大家的工作和学习有所帮助! 目录 一.Erlang语言环境的搭建 二.RabbitMQ服务环境的搭建 三.Ra ...

随机推荐

  1. Excel和datatable相互操作

    /// <summary> /// Excel文档 /// </summary> /// <param name="table"></pa ...

  2. centos重启不能自动联网的解决方法

    在命令行下输入 下面的ifcfg-eth0,eth0为我的网卡名字.机器之间不同,请先查看自己网卡的名字 vi /etc/sysconfig/network-scripts/ifcfg-eth0 进行 ...

  3. original.txt和提交的页面输出的文字的混合文件

    如果从准确的角度来说,那PHP文档是最准确的,因为它很简练的列出了实现文本类文件触发下载所需要的三条语句,以PDF为例就是: 代码如下:// We'll be outputting a PDF hea ...

  4. heroku空间部署步骤

    一,下载安装heroku toolbelt 二,在dos窗口运行 heroku login 进行身份验证 三,heroku create appName --buildpack heroku/php ...

  5. 利用Columnal网格系统快速搭建网站的基本布局结构

    1.下面是一些对响应式设计提供了不同程度支持的CSS框架: (1)Semantic(http://semantic.gs); (2)Skeleton(http://getskeleton.com); ...

  6. 【iCore3 双核心板】例程八:定时器PWM实验——呼吸灯

    实验指导书及代码包下载: http://pan.baidu.com/s/1dEnH5dB iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  7. 临床试验中PI、CI、SI、COI是指哪些人?

    今天为大家介绍的是临床试验的研究者的类型.临床试验的研究者是指在试验所在地负责实施临床试验的人员. 如果一项试验在试验场所由一组人员实施,研究者则为该组人员的负责人或领导者,也称之为主要研究者(Pri ...

  8. SQL优化 1

    SQL_ID:fvdwtfv18yy0m 先看看sql的预估执行计划 select * from table(dbms_xplan.display_awr('fvdwtfv18yy0m')); sql ...

  9. Linux搭建QT环境笔记

    *** [../../../../lib/libQtWebKit.so.4.7.4] Error 1make[1]: Leaving directory `/home/cloverbox/qt-eve ...

  10. Flink - RocksDBStateBackend

    如果要考虑易用性和效率,使用rocksDB来替代普通内存的kv是有必要的 有了rocksdb,可以range查询,可以支持columnfamily,可以各种压缩 但是rocksdb本身是一个库,是跑在 ...