Struts 是 Apache Jakarta 的一个著名的开源项目,目标是为构建基于 Java 的 web 应用程序提供一个框架。Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了四个标签库中:
n Bean Tags:该标签库包含的标签可以用来创建 bean、访问 bean 和访问 bean 的属性。同时提供了依据 cookies、headers 和 parameters 的值创建相关 bean 的能力。
n HTML Tags:该标签库包含的标签可以用来创建 Struts 输入表单。
n Logic Tags:该标签库包含的标签可以用来进行逻辑判断、集合迭代和流程控制。
n Nested Tags:该标签库建立在前三个标签库的基础上,具有前三个标签库的所有功
能,只是允许标签间的嵌套。
1、自定义标签(最早出现)
2、JSTL
3、Struts标签
PS:Struts很多功能和JSTL差不多,可以混合使用Struts标签和JSTL标签。在使用MVC基本结构时,一般使用JSTL做页面,使用了Struts框架之后,一般Struts标签和JSTL标签混合使用。因为这两种标签可以相互补充使用。
1、导入相应Struts包,这个在Struts入门有相应下载链接。
2、在struts-taglib-x.jar包下面的/META-INF/tld中的struts-xxx.tld文件中找到相应的uri地址。
3、引入标签库<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
4、通过这样的形式使用:<html:img src="" />
PS:User类是测试标签对对象操作所使用的类。
package com.pc.domain; /** * * @author Switch * @function 用户类 * @description User的一个实例是一个domain对象/同时也可以视为一个javabean */ public class User { private String username; public User() { } public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String password; }
struts的html标签本质上还是普通的html标签,Struts设计者主要是为了和Struts框架统一,对普通的html标签做了封装。
PS:如果需要使用表单内元素必须对应的表单类,以及被form标签包含。注意:表单类一定会对应一个action,这需要在struts-config.xml中配置
package com.pc.struts.form; import org.apache.struts.action.ActionForm; /** * 表单对应的表单类 * @struts.form name="userForm" */ public class UserForm extends ActionForm { private String username; private String password; private String fruit; public String getFruit() { return fruit; } public void setFruit(String fruit) { this.fruit = fruit; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%-- 引入struts的html标签库 --%> <%@ taglib prefix="html" uri="http://struts.apache.org/tags-html"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>My JSP 'html.jsp' starting page</title> </head> <body> <%-- property:是HTML中button的name --%> <html:button property="button1" value="提交"></html:button> <%-- base:指超链接没有指定连接时,默认到ref属性的链接 --%> <%-- <html:base ref="http://www.baidu.com "/> --%> <%-- 普通的image标签 --%> <html:img src="" /> <%-- image按钮 --%> <html:image src="" /> <%-- html:form struts的html标签涉及到输入信息,struts框架就会有一定的要求 1、要求和一个表单类对应,而且应当放在一个<html:form>中 2、每一个property应该对应于form类中的一个属性 --%> <html:form action="login.do" method="post"> <html:text property="username" /> <html:password property="password" /> <html:checkbox property="fruit" value="apple">apple</html:checkbox> <html:checkbox property="fruit" value="orange">orange</html:checkbox> </html:form> </body> </html>
PS:img和image的区别在于img对应于<img>标签,image对应于<input type=”image” />标签。
Bean Tags:该标签库包含的标签可以用来创建 bean、访问 bean 和访问 bean 的属性。
<%@ page language="java" import="java.util.*,com.pc.domain.*" pageEncoding="UTF-8"%> <%-- 引入struts的bean标签库 --%> <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>My JSP 'struts_bean.jsp' starting page</title> </head> <body> <p>bean标签的使用</p> <% /* 不推荐这么使用 */ request.setAttribute("name", "zs"); User user = new User("张三", "123456"); request.setAttribute("user", user); %> <%-- bean:write用于输出信息 --%> <p>bean:write的使用</p> <p>变量的使用</p> <bean:write name="name" /> <p>对象属性值的使用</p> <bean:write name="user" property="username" /> <bean:write name="user" property="password" /> <p>bean:message的使用</p> <%-- bean:message 标签用来从指定的 locale 中取回国际化的消息并输出, 在这个过程中可以传递五个以内的参数。 通过该方法,可以更方便的输出信息,要在struts-config.xml中配置这样 <message-resources parameter="com.pc.struts.ApplicationResources" />的信息 --%> <%-- key指定调用资源文件的哪个资源 --%> <%-- arg[0-4]代表传入的参数 --%> <bean:message key="key1" arg0="zs" /> <br /> <bean:message key="err1" arg0="用户名为空" arg1="密码错误" /> <p>bean:define的使用</p> <bean:define id="username" value="zs"></bean:define> <%-- 定义一个JavaBean --%> <p>jsp:useBean的使用</p> <jsp:useBean id="user2" class="com.pc.domain.User"></jsp:useBean> <jsp:setProperty name="user2" property="username" value="zs" /> <jsp:setProperty name="user2" property="password" value="123456" /> <%--<% /* 等价于下面的语句 */ User user2 = new User(); user2.setUsername("zs"); user2.setPassword("123456"); %--%> 用户名:${user2.username } 密码:${user2.password } </body> </html>
PS:message所对应的资源文件:
ApplicationResources.properties # Resources for parameter 'com.pc.struts.ApplicationResources' # Project StrutsTag key1 = welcome {0} # 在实际开发中,可以把错误号统一,在需要显示的时候,直接使用。 err1 =\u4F60\u7684\u9519\u8BEF\u662F {0} and {1}
PS:JavaBean的属性应该是它的setXxx和getXxx,struts标签这类的标签和EL语言这类的语言都是使用JavaBean的属性其底层都是调用了相应的setXxx或者是getXxx方法。
PS:在使用bean:message时,如果属性文件有中文,须在MyEclipse里面将文件编码设置为UTF-8,然后再用jdk的bin目录下native2ascii工具转换成ascii码。
Logic Tags:该标签库包含的标签可以用来进行逻辑判断、集合迭代和流程控制。
<%@ page language="java" import="java.util.*,com.pc.domain.*" pageEncoding="UTF-8"%> <%-- 引入struts的logic标签 --%> <%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic"%> <%-- 引入struts的bean标签 --%> <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>My JSP 'struts_logic.jsp' starting page</title> </head> <body> <p>logic标签的使用</p> <% /* 不推荐这么使用 */ User user1 = new User("zs", "123456"); User user2 = new User("ls", "234567"); User user3 = new User("ww", "345678"); List<User> users = new ArrayList<User>(); users.add(user1); users.add(user2); users.add(user3); request.setAttribute("users", users); %> <p>logic:iterate的使用</p> <%-- 迭代器 --%> <logic:iterate id="user" name="users"> bean输出 <%-- <bean:write name="user" property="username" /> <bean:write name="user" property="password" /> --%> <%-- EL输出 --%> ${user.username } ${user.password } <br /> </logic:iterate> <p>logic:empty的使用</p> <%-- 判断是否为空 --%> <logic:empty name="name"> name属性不存在<br /> </logic:empty> <p>logic:notempty的使用</p> <%-- 判断是否不为空 --%> <logic:notEmpty name="users"> users属性存在 </logic:notEmpty> <p>logic:greaterThan的使用</p> <%-- 判断是否大于 --%> <logic:iterate id="user" name="users"> <logic:greaterThan value="10000" name="user" property="password"> <bean:write name="user" property="password" />大于10000<br /> </logic:greaterThan> </logic:iterate> </body> </html>