开发环境:
Eclipse IDE for Java EE Developers(下载地址)
struts-2.3.1.2(下载地址)
apache-tomcat-6.0.35(下载地址)
效果图:

(以下注释:来自《Struts2权威指南》)
struts2把所有的标签都定义在了一个s的标签库(prefix="s")
struts2可以将所有标签分成三类:
UI标签:主要用于生产HTML元素的标签
非UI标签:主要用于数据访问、逻辑控制等的标签
Ajax标签:用于Ajax支持的标签
UI标签又分为两类:
表单标签:主要用于生成HTML页面的form元素,以及普通表单元素的标签
非表单标签:用于生成页面上的树、Tab页等标签
非UI标签也可分为两类:
数据控制标签:主要包含用于实现分支、循环等流程控制的标签
数据访问标签:主要包含用于输出ValueStack中的值,完成国际化等功能的标签。
控制标签可以完成输出流程控制,例如分支、循环等操作,也可完成对集合的合并、排序等操作。
if:用于控制选择输出的标签;
elseif:与if标签结合使用,用于控制选择输出的标签;
else:与if标签结合使用,用于控制选择输出的标签;
append:用于将多个集合拼接成一个新的集合;
generator:它是一个字符串解析器,用于将一个字符串解析成一个集合;
iterator:迭代器,用于将集合迭代输出;
merge:用于将多个集合拼接成一个新的集合。但与append的拼接方式有所不同;
sort:这个标签用于对集合进行排序;
subset:这个标签用于截取集合的部分元素,形成新的子集合;
struts2可以将所有标签分成三类:
UI标签:主要用于生产HTML元素的标签
非UI标签:主要用于数据访问、逻辑控制等的标签
Ajax标签:用于Ajax支持的标签
UI标签又分为两类:
表单标签:主要用于生成HTML页面的form元素,以及普通表单元素的标签
非表单标签:用于生成页面上的树、Tab页等标签
非UI标签也可分为两类:
数据控制标签:主要包含用于实现分支、循环等流程控制的标签
数据访问标签:主要包含用于输出ValueStack中的值,完成国际化等功能的标签。
控制标签可以完成输出流程控制,例如分支、循环等操作,也可完成对集合的合并、排序等操作。
if:用于控制选择输出的标签;
elseif:与if标签结合使用,用于控制选择输出的标签;
else:与if标签结合使用,用于控制选择输出的标签;
append:用于将多个集合拼接成一个新的集合;
generator:它是一个字符串解析器,用于将一个字符串解析成一个集合;
iterator:迭代器,用于将集合迭代输出;
merge:用于将多个集合拼接成一个新的集合。但与append的拼接方式有所不同;
sort:这个标签用于对集合进行排序;
subset:这个标签用于截取集合的部分元素,形成新的子集合;
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>struts2_20120313_02</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.xml 本例是展示一个项目的列表,使用了一个ProjectsAction
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" extends="struts-default">
<action name="ProjectsAction" class="com.zeph.struts2.action.ProjectsAction">
<result name="success">/myProjects.jsp</result>
</action>
</package>
</struts>
本例中讲了两个Control Tag,iterator和if else。iterator的作用是将集合迭代输出,if的作用和Java中的If相同,条件选择判断。
ProjectsAction.java
package com.zeph.struts2.action;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.zeph.struts2.bean.Project;
public class ProjectsAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private List<Project> projects = new ArrayList<Project>();
public List<Project> getProjects() {
return projects;
}
public void setProjects(List<Project> projects) {
this.projects = projects;
}
@Override
public String execute() throws Exception {
projects.add(new Project("WebSite", "SSH", "A Java Web Project"));
projects.add(new Project("QR Decoder", "Android", "2D Code Decoder"));
projects.add(new Project("Rss Reader", "Android", "A News Reader"));
return SUCCESS;
}
}
Project.java JavaBean
package com.zeph.struts2.bean;
public class Project {
private String name;
private String type;
private String description;
public Project(String name, String type, String description) {
this.name = name;
this.type = type;
this.description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
index.jsp 使用了一个链接来调用Action
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>A link to my projects list</title>
</head>
<body>
<s:url action="ProjectsAction" var="ProjectsActionLink"></s:url>
<a href="${ProjectsActionLink}">My Projects List</a>
</body>
</html>
在myProjects.jsp中通过iterator和if 标签实现 List的迭代输出和条件选择
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My Projects List</title>
</head>
<body>
<table border="1">
<tr>
<th>Number</th>
<th>Project</th>
<th>Type</th>
<th>Description</th>
</tr>
<s:iterator value="projects" status="projectStatus">
<tr bgcolor='<s:if test="#projectStatus.first">Yellow</s:if>'>
<td><s:property value="#projectStatus.count" /></td>
<td><s:property value="name" /></td>
<td><s:property value="type" /></td>
<td><s:property value="description" /></td>
</tr>
</s:iterator>
</table>
</body>
</html>