1. 程式人生 > >Struts2傳值問題後臺如和獲取request response session等

Struts2傳值問題後臺如和獲取request response session等

  1. 從瀏覽器傳至後臺三種情況
    /**
    	 * 1.ModelDriven介面傳值
    	 * 2.set  get 方法傳值
    	 * 3.物件導航傳值
    	 */
    private Cal cal=new Cal();
    private  String num1;
    private Cal cal2=new Cal();
    
    	public String getNum1() {
    	return num1;
    }
    
    public void setNum1(String num1) {
    	this.num1 = num1;
    }
    
    public Cal getCal2() {
    	return cal2;
    }
    
    public void setCal2(Cal cal2) {
    	this.cal2 = cal2;
    }
    public  String execute() {
    	System.out.println("ModelDriven傳值:"+"num1"+cal.getNum1()+"  num2:"+cal.getNum2());
    	System.out.println("get set傳值:"+this.num1);
    	System.out.println("物件導航傳值:"+"num1"+cal2.getNum1()+"  num2:"+cal2.getNum2());
    	return null;
    
    }
    	@Override
    	public Cal getModel() {
    		// TODO Auto-generated method stub
    		return cal;
    	}

 請求資料:

結果:

 

如果modeldriven和get  set 同時使用 而屬性名重複的話會造成  get  set

賦值為空的情況因為ModelDriven中優先順序更高

  1. 從後臺傳至瀏覽器傳值

 *1.傳統作用域向jsp傳值

 * 與j2ee容器互動

 * 1.非注入

 * 耦合

 * 解耦

 * 2.注入式

 *耦合

 * 解耦

 * 2.值棧傳值

 

1注入式需要實現ServletRequestAware,RequestAware,ServletResponseAware等介面

ServletRequestAware等介面是高耦合的方式

private HttpServletRequest req;
	@Override
	public void setServletRequest(HttpServletRequest arg0) {
   //使用此request將值放置此作用域中
	this.req=arg0;
	}

 

RequestAware等介面是低耦合方式

@Override

public void setRequest(Map<String, Object> map) {

//可以直接將值存放於此集合中  和request.setattribute是一樣的

 map.put("rs", "4567890");

}
  1. ServletRequestAware這個介面中的方法是setServletRequest(HttpServletRequest request) 可以獲得這次請求的request物件
    2、RequestAware這個介面中的方法是setRequest(Map request) 它只能夠獲得這次請求中包含request物件中全部attributes的一個map

 

  1. 非注入式

高耦合使用方式直接可以獲得到request物件

 ServletActionContext.getRequest()

低耦合的使用方式(推薦使用)

//	獲取request:
   Map request = ActionContext.getContext().get("request");
//
//   往request裡封裝資料
//
   request.put("name", value);

//   在前臺就可以用request.getAttribute("name");

 獲取session

 Map session = ActionContext.getContext().getSession();
  //  將資料封裝到session中
    session.put("name", value);
    //在前臺頁面上用sessionScope.getAttribute("name");得到session裡面封裝的值。

得到session、request有點區別,得到request用的是get("reqeust"),得到session用的是getSession()

然後還可以這麼使用

	ActionContext ctx = ActionContext.getContext();       
	  HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
	  HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);

	//用法就和Servlet中的request、response用法一樣
  1. 值棧傳值

  2. //直接定義一個object 儲存值然後設定其getset方法即可
    private   Cal cal=new Cal();
    private Object res;
    public Object getRes() {
    	return res;
    }
    public void setRes(Object res) {
    	this.res = res;
    }