Struts2中訪問web元素的四種方式(訪問requst、session、application)

Struts2中訪問web元素的四種方式(訪問requst、session、application)
 
四種方式:
1. 通過ActionContext來訪問request,session,application對象
2. 通過實現RequestAware、SessionAware、ApplicationAware接口來訪問request,session,application對象
3. 通過ServletActionContext來訪問request,session,application對象
4. 通過實現ServletRequestAware接口來訪問request,session,application對象
 

演示代碼:
方式一:  1. 通過ActionContext來訪問request,session,application對象
view plaincopy to clipboardprint?
 
public class UserAction1 extends ActionSupport{  
     
    private static final long serialVersionUID = 1L;  
     
    private Map <String,Object>request;  
     
    private Map <String,Object>session;  
     
    private Map <String,Object>application;  
     
    @SuppressWarnings("unchecked")  
    @Override 
    public String execute(){  
        System.out.println("通過ActionContext來訪問request,session,application對象");  
        // 初始化  
        request = (Map<String,Object>)ActionContext.getContext().get("request");  
        session = ActionContext.getContext().getSession();  
        application = ActionContext.getContext().getApplication();  
        // 賦值  
        request.put("requestKey", "requestValue");  
        session.put("sessionKey", "sessionValue");  
        application.put("applicationKey", "applicationValue");  
        return "success";  
    }  

在前臺jsp頁面中通過下面三種方式獲取後臺提供的session中的數據(requeste、application中的獲取值得方式類似)

      用struts標籤: <s:property value="#session.key"  />
 用EL表達式:${session.key}/${key}
   用java代碼:<%=session.getAttribute("key")%>



方式二:2. 通過實現RequestAware、SessionAware、ApplicationAware接口來訪問request,session,application對象


 public class UserAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{  
     
    private static final long serialVersionUID = 1L;  
     
    private Map <String,Object>request;  
     
    private Map <String,Object>session;  
     
    private Map <String,Object>application;  
     
    @SuppressWarnings("unchecked")  
    @Override 
    public String execute(){  
        System.out.println("通過實現RequestAware、SessionAware、ApplicationAware接口來訪問request,session,application對象");  
        // 賦值  
        request.put("requestKey", "requestValue");  
        session.put("sessionKey", "sessionValue");  
        application.put("applicationKey", "applicationValue");  
        return "success";  
    }  
     
    @Override 
    public void setRequest(Map<String, Object> request) {  
        this.request = request;  
    }  
     
    @Override 
    public void setApplication(Map<String, Object> application) {  
        this.application = application;  
    }  
     
    @Override 
    public void setSession(Map<String, Object> session) {  
        this.session = session;  
    }  



方式三:3. 通過ServletActionContext來訪問request,session,application對象
view plaincopy to clipboardprint?
 
public class UserAction3 extends ActionSupport{  
     
    private static final long serialVersionUID = 1L;  
     
    private HttpServletRequest request;  
     
    private HttpSession session;  
     
    private ServletContext application;  
     
    @SuppressWarnings("unchecked")  
    @Override 
    public String execute(){  
        System.out.println("通過ServletActionContext來訪問request,session,application對象");  
        // 初始化  
        request = ServletActionContext.getRequest();  
        session = request.getSession();  
        application = session.getServletContext();  
        // 賦值  
        request.setAttribute("requestKey", "requestValue");  
        session.setAttribute("sessionKey", "sessionValue");  
        application.setAttribute("applicationKey", "applicationValue");  
        return "success";  
    }  




方式四:4. 通過實現ServletRequestAware接口來訪問request,session,application對象
public class UserAction4 extends ActionSupport implements ServletRequestAware{
 
 private static final long serialVersionUID = 1L;
 
 private HttpServletRequest request;
 
 private HttpSession session;
 
 private ServletContext application;
 
 @SuppressWarnings("unchecked")
 @Override
 public String execute(){
  System.out.println("通過實現ServletRequestAware接口來訪問request,session,application對象");
  // 賦值
  request.setAttribute("requestKey", "requestValue");
  session.setAttribute("sessionKey", "sessionValue");
  application.setAttribute("applicationKey", "applicationValue");
  return "success";
 }
 
 @Override
 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
  this.session = request.getSession();
  this.application = session.getServletContext();
 }

}


上面的action配套的struts.xml及jsp頁面
struts.xml
view plaincopy to clipboardprint?
<struts> 
 <!-- 配置開發模式:修改不用重啓服務器 -->
 <constant name="struts.devMode" value="true"/>
    <package name="" namespace="/login" extends="struts-default">
        <action name="login*" class="com.wj.struts2.action.UserAction{1}">
         <result name="success">/success.jsp</result>
         <result name="failure">/failure.jsp</result>
        </action>
    </package>

</struts>


index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@taglib uri="/struts-tags" prefix="s" %> 
<%  
    String path = request.getContextPath();  
    String basePath = request.getScheme() + "://"  
            + request.getServerName() + ":" + request.getServerPort()  
            + path + "/";  
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
        <base href="<%=basePath%>"> 
 
        <title>Struts2_AccessWebElements</title> 
        <meta http-equiv="pragma" content="no-cache"> 
        <meta http-equiv="cache-control" content="no-cache"> 
        <meta http-equiv="expires" content="0"> 
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
        <meta http-equiv="description" content="This is my page"> 
        <!-- 
        <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
        --> 
        <mce:script language="javascript"><!--  
            function sub(str){  
                document.form1.action = str;  
                document.form1.submit();  
            }  
          
// --></mce:script> 
    </head> 
 
    <body> 
        <form name="form1"> 
            <div> 
                Struts2中訪問web元素的四種方式<br> 
                方式一:<input type="button" value="submit1" οnclick="sub('<%=basePath%>login/login1')"><br>    
                方式二:<input type="button" value="submit2" οnclick="sub('<%=basePath%>login/login2')"><br> 
                方式三:<input type="button" value="submit3" οnclick="sub('<%=basePath%>login/login3')"><br> 
                方式四:<input type="button" value="submit4" οnclick="sub('<%=basePath%>login/login4')"><br> 
            </div> 
        </form> 
    </body> 
</html> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
        <base href="<%=basePath%>"> 
        <title>Struts2_AccessWebElements</title> 
        <meta http-equiv="pragma" content="no-cache"> 
        <meta http-equiv="cache-control" content="no-cache"> 
        <meta http-equiv="expires" content="0"> 
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
        <meta http-equiv="description" content="This is my page"> 
        <!-- 
        <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> 
        --> 
    </head> 
 
    <body> 
        requestKey---<s:property value="#request.requestKey"/>|<%=request.getAttribute("requestKey")%><br> 
        sessionKey---<s:property value="#session.sessionKey"/>|<%=session.getAttribute("sessionKey")%><br> 
        applicationKey---<s:property value="#application.applicationKey"/>|<%=application.getAttribute("applicationKey")%><br> 
        --------------------------------------------  
        <s:debug></s:debug> 
    </body> 

</html> 

 
 
前臺jsp頁面獲取後臺值的方式
<s:property value="#request.requestKey"/>|<%=request.getAttribute("requestKey")%>
<s:property value="#session.sessionKey"/>|<%=session.getAttribute("sessionKey")%>
<s:property value="#application.applicationKey"/>|<%=application.getAttribute("applicationKey")%>
發佈了112 篇原創文章 · 獲贊 16 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章