Struts2傳值問題後臺如和獲取request response session等
阿新 • • 發佈:2018-12-01
- 從瀏覽器傳至後臺三種情況
/** * 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.傳統作用域向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"); }
- ServletRequestAware這個介面中的方法是setServletRequest(HttpServletRequest request) 可以獲得這次請求的request物件
2、RequestAware這個介面中的方法是setRequest(Map request) 它只能夠獲得這次請求中包含request物件中全部attributes的一個map
-
非注入式
高耦合使用方式直接可以獲得到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用法一樣
-
值棧傳值
-
//直接定義一個object 儲存值然後設定其getset方法即可 private Cal cal=new Cal(); private Object res; public Object getRes() { return res; } public void setRes(Object res) { this.res = res; }