1. 搭建struts2 的步骤: 3个步骤
2. action VS Action
- action: 代表一个Struts2 的请求.
- Action 类: 能够处理Struts2 请求的类. 先前写的Product 类就是这样一个类
- 属性的名字必须遵守与JavaBeans (就是一个java类,格式是含有属性,以及get,set方法的类)属性名相同的命名规则,属性的类型可以是任意类型。从字符串到非字符串(基本数据类型)数据类型转换可以自动发生. 下面例子中的函数方法名 setProductName 必须和JSP 页面中productName 的名字一致( 途中标红色的地方,其值必须一致):
package strutshelloworld;public class Product { private Integer productId; private String productName; private String productDesc; private double productPrice; public Integer getProductId() { return productId; } public void setProductId(Integer productId) { this.productId = productId; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public String getProductDesc() { return productDesc; } public void setProductDesc(String productDesc) { this.productDesc = productDesc; } public double getProductPrice() { return productPrice; } public void setProductPrice(double productPrice) { this.productPrice = productPrice; } @Override public String toString() { return "Product [productId=" + productId + ", productName=" + productName + ", productDesc=" + productDesc + ", productPrice=" + productPrice + "]"; } public String save(){ System.out.println("save: " + this); return "details"; }}
-
- 必须要有一个无参的构造器:通过反射的方式创建实例。从下面的配置文件中可以发现,我们只是传入了一个类的名字,所以它是通过反射的方式创建的类对象。
/WEB-INF/pages/input.jsp
-
- 至少有一个供struts 在执行这个action 时调用的方法 如Product 中的save() 方法
- 同一个Action 类可以包含多个action 方法,Struts2 会为每一个HTTP 请求创建一个新的Action实例,即Action 不是单例的,不存在线程安全的问题
3. 在Action 中访问WEB 资源:
- 什么是WEB 资源?
- HttpServletRequest, HttpSession, ServletContext 等原生的Servlet API
- 为什么访问WEB 资源?
- B\S 应用的Controller 中必然要访问WEB 资源: 向域对象中读写属性,读写Cookie, 获取realPath...
- 如何访问WEB 资源?
- 和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问有限的方法(读取请求参数,读写域对象的属性, 使session 失效)
- 使用ActionContext
- 实现XxxAware 接口
- 和Servlet API 耦合的方式:可以访问更多的Servlet API对象,且可以调用其原生的方法
- 使用ServletActionContext
- 实现ServletXxxAware 接口
- 和Servlet API解耦的方式:只能访问有限的Servlet API对象,且只能访问有限的方法(读取请求参数,读写域对象的属性, 使session 失效)
5. result:
- result 是action 节点的子节点
- result 代表action 方法执行后,可能去的目的地
- 一个action 节点可以配置多个result 子节点
- result 的name 属性值对应的action 方法可能有的一个返回值
- result 一共有2个属性,还有一个是type: 表示结果的响应类型
- result 的type属性值在struts-default 包的result-types 节点的name属性中定义:常用的有:
- dispatcher(默认的):转发,同servlet 中的转发一样
- redirect: 重定向
- redirectAction: 重定向到一个Action
- chain: 转发到一个action