struts2---訪問WEB
阿新 • • 發佈:2017-10-25
ext.get 屬性 java put es2017 ted ner get 耦合
一:在Action中,可以通過以下方式訪問WEB的HttpSession,HttpServletRequest,HttpServletResponse等資源
與Servlet API解耦的訪問方式
通過 import com.opensymphony.xwork2.ActionContext;
通過實現XxxAware接口;
特點:只能訪問有限的servlet API對象。有限的方法(讀取請求參數,讀寫域對象的屬性,使session失效)
在主頁面中調用action到struts.xml文件中然後找到Action類。在Action類中處理完後到struts.xml,然後找到相對性的jsp頁面。展示信息
在struts.xml中找到Java類。
package com.struts2.action;
import java.util.Map;
import org.apache.struts2.dispatcher.SessionMap;
import com.opensymphony.xwork2.ActionContext;
public class TestActionContext {
public String execute(){
//一:application
//1:獲取ActionContext對象。 ActionContext是Action的上下文對象。可以從中獲取到當前Action需要的一切信息。
ActionContext actionContext=ActionContext.getContext();
//2:獲取application對應的MAP。
Map<String,Object> applicationMap =actionContext.getApplication();
applicationMap.put("applicationMapKey", "heluwei appllication");
//二:session
Map<String,Object> sessionMap=actionContext.getSession();
sessionMap.put("sessionKey", "heluwei session");
if(sessionMap instanceof SessionMap){
SessionMap sm = (SessionMap) sessionMap;
sm.invalidate();
System.out.println("session 失效了. ");
}
//3. request*
//ActionContext 中並沒有提供 getRequest 方法來獲取 request 對應的 Map
//需要手工調用 get() 方法, 傳入 request 字符串來獲取.
Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request");
requestMap.put("requestKey", "requestValue");
//4. 獲取請求參數對應的 Map, 並獲取指定的參數值.
//鍵: 請求參數的名字, 值: 請求參數的值對應的字符串數組
//註意: 1. getParameters 的返回值為在 Map<String, Object>, 而不是 Map<String, String[]>
// 2. parameters 這個 Map 只能讀, 不能寫入數據, 如果寫入, 但不出錯, 但也不起作用!
Map<String, Object> parameters = actionContext.getParameters();
System.out.println(((String[])parameters.get("name"))[0]);
parameters.put("age", 100);
return "success";
}
}
在頁面上顯示信息:
二:實現XxxAware接口
<package name="actionContext" extends="struts-default"> <action name="TestActionContext" class="com.struts2.action.TestActionContext"> <result name="success">/fangwenWEB/test-actionContext.jsp</result> </action> <action name="TestAware" class="com.struts2.action.TestAware"> <result name="success">/fangwenWEB/test-Aware.jsp</result> </action> </package>
package com.struts2.action; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware; public class TestAware implements ApplicationAware{ public String execute() { application.put("applicationkey2", "Aware applicationValue"); return "success"; } private Map<String,Object> application; public void setApplication(Map<String, Object> application) { this.application=application; } }
application Map註入到set方法中。然後定義一個application成員變量。
》session對應的Map實際上是SessionMap類型。強轉後調用invalidate()方法。可使session失效。
二:耦合的方式
就是多了一個Servlet。
》調用 org.apache.struts2.ServletActionContext;
package com.struts2.action; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; public class TestServletActionContext { public String execute(){ HttpServletRequest request=ServletActionContext.getRequest(); HttpSession session=request.getSession(); ServletContext context=ServletActionContext.getServletContext(); return "success"; } }
》實現ServletXxxAware接口
package com.struts2.action; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.util.ServletContextAware; public class TestServletAware implements ServletRequestAware,ServletContextAware{ public String execute(){ return "success"; } private ServletContext context; public void setServletContext(ServletContext context) { // TODO Auto-generated method stub this.context=context; } public void setServletRequest(HttpServletRequest request) { // TODO Auto-generated method stub } }
struts2---訪問WEB