`

struts2 -- 在action中获取scope对象的4种方式

 
阅读更多

struts2中将action与servlet解耦合,故我们在action中的excute方法中无法直接使用request、session以及 application对象,为了操作这些对象,我们必须编写另外一些代码,现将在action中访问scope对象的方式总结如下,共四种。

方式一: 与Servlet解耦合的非IOC方式

 

特点:获取的scope对象与容器无关,通过ActionContext获取

 

import java.util.Map;
 
  import com.opensymphony.xwork2.ActionContext;
  import com.opensymphony.xwork2.ActionSupport;
 
  /**
  * @author waitingfortime
  *
  */
  public class test2Action extends ActionSupport {
     private String username;
     ActionContext context;
     Map request;
     Map session;
     Map application;
     public String execute() throws Exception {
         context=ActionContext.getContext();//从ActionContext中获得上下文对象,并从该对象中一次获得scope对象
         request=(Map) context.get("request");
         session=context.getSession();
         application=context.getApplication();
         
         request.put("req", "requst属性");
         session.put("ses", "sesion属性");
         application.put("app", "application属性");
         return SUCCESS;
     }
 }

 在jsp页面中有2种方式获得scope对象的值

${requestScope.req}
${sessionScope.ses}
${applicationScope.app}
<h4>以下使用scope.getAttribute的形式来接受</h4>
    request:    <%=request.getAttribute("req") %><br>
    session:    <%=session.getAttribute("ses") %><br>
    application:<%=application.getAttribute("app") %><br>

分析:通过ActionContext的getContext静态方法得到ActionContext对象,然后 ActionContext对象调用get方法来获取一个存储在request范围中的对象。我们使用el或通过 request.getAttribute这样的方式均可以获取对象值,这说明了这些Map request对象实际是存储在request范围内的对象。

方式二、与Servlet解耦合的IOC方式

public class test3Action extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {
    private String username;
    Map request;
    Map session;
    Map application;
    public String execute() throws Exception {
        request.put("req", "requst属性");
        session.put("ses", "sesion属性");
        application.put("app", "application属性");
        return SUCCESS;
    }
    public void setRequest(Map<String, Object> request) {
        this.request=request;
    }
    public void setSession(Map<String, Object> session) {
        this.session=session;
    }
    public void setApplication(Map<String, Object> application) {
        this.application=application;
    }
    ...省略username的get/set方法
}

 

在方式二中它是通过实现接口,在重写接口中的方法中完成对Map requset的赋值,所以称之IOC方式。

方式三、与Servlet耦合的非IOC方式

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
import org.apache.struts2.ServletActionContext;
 
import com.opensymphony.xwork2.ActionSupport;
 
/**
 * @author waitingfortime
 */
public class test2Action extends ActionSupport {
    private String username;
    HttpServletRequest request;
    HttpSession session;
    ServletContext application;
    public String execute() throws Exception {
        request = ServletActionContext.getRequest();
        session = request.getSession();
        application = ServletActionContext.getServletContext();
 
        request.setAttribute("req", "requst属性");
        session.setAttribute("ses", "sesion属性");
        application.setAttribute("app", "application属性");
        return SUCCESS;
    }

 

此方法获取的纯粹的Scope对象,它与容器相关,这些Scope对象操作更强。

方式四、与Servlet耦合的IOC方式

public class Login4Action extends ActionSupport implements ServletRequestAware,ServletContextAware{
    private String username;
    ActionContext context;
    HttpServletRequest request;
    HttpSession session;
    ServletContext application;
    public String execute() throws Exception {
        context=ActionContext.getContext();
        session=request.getSession();  
        request.setAttribute("req", "requst属性");
        session.setAttribute("ses", "sesion属性");
        application.setAttribute("app", "application属性");
        return SUCCESS;
    }
     
    public void setServletRequest(HttpServletRequest request) {
        System.out.println("测试:"+request);
        this.request=request;
    }
    public void setServletContext(ServletContext application) {
        System.out.println("测试:"+application);
        this.application=application;
    }
    ...省略username的get/set方法
}

 方式四则是实现了接口,来通过依赖注入得到对象。

 

分享到:
评论

相关推荐

    Struts2入门教程(全新完整版)

    三、在Action获取Scope对象 19 方式一、与Servlet解耦合的非IOC方式 20 方式二、与Servlet解耦合的IOC方式 21 方式三、与Servlet耦合的非IOC方式 21 方式四、与Servlet耦合的IOC方式 22 四、OGNL与ValueStack(VS) 22...

    Myeclipse开发struts+hibernate+spring新手入门--环境配置---项目开发示例

    同加载struts方式类似,选择Myeclipse后在弹出的二级菜单中选择Add spring in action in action Capabilities…后提示如下图所示: 选择所需要的spring in action in action包,然后默认下一步,直到完成。 到此...

    struts1 demo

    scope="request" input="/index.jsp"&gt; &lt;forward name="success" path="/success.jsp"&gt;&lt;/forward&gt; &lt;/action&gt; &lt;/action-mappings&gt; &lt;message-resources parameter=...

    struts基于mvc的开发代码

    type="com.yourcompany.struts.action.Test2Action" /&gt; &lt;action attribute="test3Form" input="/test3.jsp" name="test3Form" path="/test3" scope="request" type=...

    struts配置元素详解

    ”1.0” encoding=”ISO-8859-1”?&gt; &lt;!DOCTYPE struts-config PUBLIC "-//Apache Software ...scope="" validate="" input="" / &gt; &lt;/action-mappings&gt; &lt;message-resources / &gt; &lt;plug-in /&gt; &lt;/struts-config&gt;

    用Struts2新建一个应用的方法步骤

    3.在下在的struts2的解压包中的lib文件夹下,复制commons-logging-1.0.4.jar,freemarker-2.3.8.jar,ognl-2.6.11.jar,tiles-core-2.0.4.jar,xwork-2.0.5.jar,在MyEclipse中右击lib粘贴。 4.新建一个JSP页面。...

    struts2的入门开发

    struts2的入门开发,环境配置− &lt;struts-config&gt; &lt;data-sources/&gt; − &lt;form-beans&gt; &lt;form-bean name="loginForm" type="test.form.LoginForm"/&gt; &lt;/form-beans&gt; &lt;global-exceptions/&gt; &lt;global-forwards/&gt; − &lt;action-...

    使用Struts的Action来对数据库进行增、删、改、查四项操作(源码)

    使用Struts的Action来对数据库进行增、删、改、查四项操作 &lt;br/&gt;1、数据库MySQL,创建数据库 Pagination MySQL.sql用来创建表结构 &lt;br/&gt;连接方式有两种,一种直接JDBC,一种通过连接池,代码中有说明...

    maven3+struts2+spring+ibatis

    这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...

    基于SSH模拟当当网项目(电子商务平台)

    采用整合插件注入方式使用Spring容器中的Service或DAO. (默认按名称匹配规则) 4.配置信息的改造 Service和DAO需要交给Spring容器. struts.xml不需要改变,因为引入struts-spring-plugin.jar后,Action创建会交给...

    Struts原理、开发及项目实施

    Struts的工作原理,如下图2所示: &lt;br/&gt; 控制:通过图2大家可以看到有一个XML文件Struts-config.xml,与之相关联的是Controller,在Struts中,承担MVC中Controller角色的是一个Servlet,叫ActionServlet...

    maven3.0+struts+spring+hibernate

    这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...

    SSH开发纪要整合解决四大问题(中文、jar包冲突、延时加载、模块化)文档

    DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"&gt; &lt;struts-config&gt; &lt;data-sources /&gt; &lt;form-beans &gt; ...

    ssh(structs,spring,hibernate)框架中的上传下载

     此外lazy="true"说明地返回整个Tfile对象时,并不返回fileContent这个字段的数据,只有在显式调用tfile.getFileContent()方法时才真正从数据库中获取fileContent的数据。这是Hibernate3引入的新特性,对于包含重量...

    Struts in Action中文版

    2.6.2. Struts的强项........................................................................................................58 Struts in Action 中文版 Lastest Revised:10/14/2005 10:27:00 AM ...

    OA项目SSH整合框架

    一,集成 Spring 与 Hibernate 1,配置SessionFactory 1,配置 ---------------------- applicationContext.xml ------------------------ ... 2,在struts.xml中配置action时,在class属性中写bean的名称

    外文翻译 stus MVC

    Figure 4 displays the Web adaptation of MVC, also commonly known as MVC Model 2 or MVC 2. The ActionServlet class Do you remember the days of function mappings? You would map some input event to a...

    使用Struts的Action和Hibernate来对数据库进行增、删、改、查四项操作(源码)

    1、数据库MySQL,连接方式有两种,一种直接JDBC,一种通过连接池,代码中有说明 用户root 密码password 不同的进行相应的改变。 &lt;br/&gt;Tomcat数据库连接池配置: Server.xml 增加如下内容:...

    Struts_config.xml详解

    parameter="" //指定Actgion的配置参数,在Action类的execute()方法中,可以调用ActionMapping对象的getParameter()方法来读取该配置参数。(相当于初始化赋值) &gt;&gt;&gt; prefix=""// 指定填充当前 Action 关联 FormBean...

    struts in Action

    2. 深入STRUTS 架构..................................................................................37 2.1. 随便谈谈.......................................................................................

Global site tag (gtag.js) - Google Analytics