程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> Struts2中訪問web元素

Struts2中訪問web元素

編輯:關於JSP

取得Map類型request,session,application,真實類型 HttpServletRequest, HttpSession, ServletContext的引用:

前三者:依賴於容器

前三者:IOC (只用這種)

後三者:依賴於容器

後三者:IOC

一、          方法一:ActionContext方式

一般在Action類的構造方法、或execute()方法中獲取。

[java]
public class LoginAction1 extends ActionSupport { 
     
    private Map request; 
    private Map session; 
    private Map application; 
     
    public LoginAction1() { 
        request = (Map)ActionContext.getContext().get("request"); 
        session = ActionContext.getContext().getSession(); 
        application = ActionContext.getContext().getApplication(); 
    } 
     
    public String execute() { 
        request.put("r1", "r1"); 
        session.put("s1", "s1"); 
        application.put("a1", "a1"); 
        return SUCCESS;  
    } 

public class LoginAction1 extends ActionSupport {
 
 private Map request;
 private Map session;
 private Map application;
 
 public LoginAction1() {
  request = (Map)ActionContext.getContext().get("request");
  session = ActionContext.getContext().getSession();
  application = ActionContext.getContext().getApplication();
 }
 
 public String execute() {
  request.put("r1", "r1");
  session.put("s1", "s1");
  application.put("a1", "a1");
  return SUCCESS;
 }
}

然後在Jsp頁面中獲取相關web元素。

[html]
<body> 
    User Login Success! 
    <br /> 
    <s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br /> 
    <s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br /> 
    <s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br /> 
    <s:property value="#attr.a1"/><br /> 
    <s:property value="#attr.s1"/><br /> 
    <s:property value="#attr.r1"/><br /> 
    <s:debug></s:debug> 
    <br /> 
</body> 

<body>
 User Login Success!
 <br />
 <s:property value="#request.r1"/> | <%=request.getAttribute("r1") %> <br />
 <s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br />
 <s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br />
 <s:property value="#attr.a1"/><br />
 <s:property value="#attr.s1"/><br />
 <s:property value="#attr.r1"/><br />
 <s:debug></s:debug>
 <br />
</body>
注:因為request、session、application對象Struts2將在放入到Action Context中,

   因此需要使用#key來訪問對象們。

後面的是java腳本代碼的訪問方式。

一、          方式二:Ioc(控制反轉)—推薦使用

讓Action類實現RequestAware、SessionAware、ApplicationAware接口,然後重寫他們的set方法(setRequest、setSession、setApplication),通過依賴注入、控制反轉(原來自己控制,現在由別人來控制值。)

[java]
import org.apache.struts2.interceptor.ApplicationAware; 
import org.apache.struts2.interceptor.RequestAware; 
import org.apache.struts2.interceptor.SessionAware; 
import com.opensymphony.xwork2.ActionSupport; 
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware { 
    private Map<String, Object> request; 
    private Map<String, Object> session; 
    private Map<String, Object> application; 
     
    //DI dependency injection依賴注入  
    //IoC inverse of control控制反轉  
    public String execute() { 
        request.put("r1", "r1"); 
        session.put("s1", "s1"); 
        application.put("a1", "a1"); 
        return SUCCESS;  
    } 
    @Override 
    public void setRequest(Map<String, Object> request) { 
        this.request = request; 
    } 
    @Override 
    public void setSession(Map<String, Object> session) { 
        this.session = session; 
    } 
    @Override 
    public void setApplication(Map<String, Object> application) { 
        this.application = application; 
    } 

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
 private Map<String, Object> request;
 private Map<String, Object> session;
 private Map<String, Object> application;
 
 //DI dependency injection依賴注入
 //IoC inverse of control控制反轉
 public String execute() {
  request.put("r1", "r1");
  session.put("s1", "s1");
  application.put("a1", "a1");
  return SUCCESS;
 }
 @Override
 public void setRequest(Map<String, Object> request) {
  this.request = request;
 }
 @Override
 public void setSession(Map<String, Object> session) {
  this.session = session;
 }
 @Override
 public void setApplication(Map<String, Object> application) {
  this.application = application;
 }
}
在視圖(JSP)頁面中獲取相關對象,同方式一。

一、          方式三:獲取原類型

獲取是的HttpServletRequest/HttpSession/ServletContext

[java]
public class LoginAction3 extends ActionSupport { 
     
    private HttpServletRequest request; 
    private HttpSession session; 
    private ServletContext application; 
    public LoginAction3() { 
        request = ServletActionContext.getRequest(); 
        session = request.getSession(); 
        application = session.getServletContext(); 
    } 
    public String execute() { 
        request.setAttribute("r1", "r1"); 
        session.setAttribute("s1", "s1"); 
        application.setAttribute("a1", "a1"); 
        return SUCCESS;  
    } 

public class LoginAction3 extends ActionSupport {
 
 private HttpServletRequest request;
 private HttpSession session;
 private ServletContext application;
 public LoginAction3() {
  request = ServletActionContext.getRequest();
  session = request.getSession();
  application = session.getServletContext();
 }
 public String execute() {
  request.setAttribute("r1", "r1");
  session.setAttribute("s1", "s1");
  application.setAttribute("a1", "a1");
  return SUCCESS;
 }
}


一、          方式四:獲取原類型-控制反轉

首先需要Action實現org.apache.struts2.interceptor.ServletRequestAware接口,然後重寫setServletRequest()方法,獲取HttpServletRequest對象,再通過HttpServletRequest對象取昨HttpSession和ServletContext對象。


[java]
import javax.servlet.ServletContext; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpSession; 
 
import org.apache.struts2.interceptor.ServletRequestAware; 
import com.opensymphony.xwork2.ActionSupport; 
public class LoginAction4 extends ActionSupport implements ServletRequestAware { 
    private HttpServletRequest request; 
    private HttpSession session; 
    private ServletContext application; 
    public String execute() { 
        request.setAttribute("r1", "r1"); 
        session.setAttribute("s1", "s1"); 
        application.setAttribute("a1", "a1"); 
        return SUCCESS;  
    } 
    @Override 
    public void setServletRequest(HttpServletRequest request) { 
        this.request = request; 
        this.session = request.getSession(); 
        this.application = session.getServletContext(); 
    } 

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction4 extends ActionSupport implements ServletRequestAware {
 private HttpServletRequest request;
 private HttpSession session;
 private ServletContext application;
 public String execute() {
  request.setAttribute("r1", "r1");
  session.setAttribute("s1", "s1");
  application.setAttribute("a1", "a1");
  return SUCCESS;
 }
 @Override
 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
  this.session = request.getSession();
  this.application = session.getServletContext();
 }
}

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved