1. 程式人生 > >struts2---訪問WEB

struts2---訪問WEB

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