Struts2 项目搭建

Struts2 作为一个应用开发框架,在项目中引入需要如下步骤

创建一个 Web Project 并添加默认的 web.xml 文件

  1. 这个好像没啥好说的

引入以下 jar 包到 lib 目录中

  • commons-fileupload-1.3.3.jar
  • commons-lang3-3.6.jar
  • freemarker-2.3.23.jar
  • javassist-3.20.0-GA.jar
  • log4j-api-2.8.2.jar
  • ognl-3.1.12.jar
  • struts2-core-2.5.12.jar

在 web.xml 中添加 filter 配置

1
2
3
4
5
6
7
8
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

在 src 目录下添加 struts.xml 文件

  1. 要让 Struts2 支持异步的 json 数据访问在 <package>extend 属性中添加 json-default
  2. 添加 struts2-json-plugin-2.5.12.jar
  3. 在对应的 <action> 请求的 <result> 中添加 type="json" 属性,并删除页面内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
	<package name="default-package" extends="struts-default, json-default">
		<!-- name 表示请求路径 -->
		<!-- class 表示请求路径对应的处理类 -->
		<!-- method 表示处理类中对应的方法 -->
		<action name="category" class="online.shixun.hpeu.action.GoodsCategoryAction" method="list">
			<result name="success">/WEB-INF/views/category.jsp</result>
		</action>
		
		<!-- 异步获取商品描述 -->
		<action name="description" class="online.shixun.hpeu.action.GoodsAction" method="description">
			<result name="success" type="json"></result>
		</action>
	</package>
</struts>

接收/显示数据

  1. Struts2 的特点在于对数据的接收/显示进行封装
  2. 要获取页面传递到 action 的参数,只需要在 action 中定义对应名称的私有属性,并提供 setter 方法即可
  3. 要将数据显示到页面中,只需要在 action 中定义对应名称的私有属性,并提供 getter 方法即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class GoodsAction {
	
	private GoodsServiceImpl goodsService = new GoodsServiceImpl();
	
	// 从页面接收商品类别id
	private Long categoryId;
	
	// 从页面接收商品id
	private Long goodsId;
	
	// 从DB获取商品列表,用于展示到页面上
	private List<GoodsModel> goods;
	
	// 从DB获取商品描述信息,用于展示到页面上
	private String description;
	
	/**
	 * 加载商品列表页
	 * @return
	 */
	public String list() {
		goods = goodsService.getGoodsByCategoryId(categoryId);
		
		return "success";
	}
	
	/**
	 * 获取商品描述信息
	 * @return
	 */
	public String description() {
		// 通过商品id获取商品描述信息
		description = goodsService.getGoodsById(goodsId).getDescription();
		
		return "success";
	}

	public void setCategoryId(Long categoryId) {
		this.categoryId = categoryId;
	}

	public void setGoodsId(Long goodsId) {
		this.goodsId = goodsId;
	}

	public String getDescription() {
		return description;
	}

	public List<GoodsModel> getGoods() {
		return goods;
	}

}