struts2學習之何爲action以及Action 類,如何訪問WEB資源

1. 搭建struts2 的步驟: 3個步驟java

2. action VS Action shell

  • 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:session

  • 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
相關文章
相關標籤/搜索