struts2学习之何为action以及Action 类,如何访问WEB资源

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";
	}
}

  

    <form action="product-save.action" method="post"> 
        productName: <input type="text" name="productName"/>
        <br><br>
        productDesc: <input type="text" name="productDesc"/>
        <br><br>
        productPrice: <input type="text" name="productPrice"/> 
        <br><br>
        <input type="submit" name="Submit"/>
        <br><br>
    </form>
    • 必须要有一个无参的构造器:通过反射的方式创建实例。从下面的配置文件中可以发现,我们只是传入了一个类的名字,所以它是通过反射的方式创建的类对象。
        <action name="product-input"
             class="com.opensymphony.xwork2.ActionSupport"
             method="execute">
            <result name="success" type="dispatcher">/WEB-INF/pages/input.jsp</result>
        </action>
    • 至少有一个供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 接口

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

 

posted on 2016-06-05 20:16  我表情悠哉  阅读(336)  评论(0编辑  收藏  举报

导航