`

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-junit-plugin-2.1.8.1.jar

    请注意,由于Struts2的生命周期和依赖注入特性,可能需要在测试中对某些对象(如Session、Request、Response)进行模拟或配置。此外,如果你的应用使用了Spring等依赖注入框架,可能还需要额外的配置来使Struts2 ...

    配置struts--config.xml详解

    在 Struts 应用程序中,`struts-config.xml` 文件是核心配置文件,它定义了应用的行为、控制器(Actions)、数据源(Form Beans)以及视图(JSP 页面)之间的关系。本文将深入探讨 `struts-config.xml` 的主要元素和...

    Struts1-标签

    在Struts的配置文件中,需要有相应的&lt;action&gt;标签与之对应,并指定form-bean的名称。 11. 标签与FormBean的关联: 在Struts 1中,表单与FormBean有紧密的关联。表单内的输入标签如、等必须对应FormBean中定义的属性...

    struts和spring整合的2种方式

    在第一种整合方式中,Struts的`struts-config.xml`配置文件中,我们将`type`属性设置为`org.springframework.web.struts.DelegatingActionProxy`,这表示Struts的Action将由Spring来创建和管理。例如: ```xml ...

    struts2学习心得

    9. **全局类型转换配置**:为了统一管理不同类型转换的规则,Struts2允许在`struts.xml`配置文件或`xwork-conversion.properties`文件中定义全局的类型转换策略,从而避免在每个Action中重复配置相同的转换规则。...

    Struts2开发实例总结

    例如,在JSP页面中,若要访问session中的值,可以通过`&lt;%@ page isELIgnored="false" %&gt;`开启EL表达式支持,然后使用`${requestScope.count}`来获取值。 显示Action数据通常分为四步:创建Action类,配置struts.xml...

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

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

    Spring 和struts 整合的三种方式

    Struts 2会通过Spring ObjectFactory获取Action实例。 ```java @ManagedBean(name = "myAction") public class MyAction { @Inject private MyService myService; // 业务逻辑代码 } ``` 总结来说,Spring与...

    struts2 向结果传参数

    你可以在Action中将参数放入ActionContext,然后在结果页面中通过HttpServletRequest对象获取: ```java public String execute() { ActionContext context = ActionContext.getContext(); context.put("myParam...

    在struts1中使用拦截器——saif-0.1.jar

    2. **创建拦截器**:在saif-0.1.jar中,开发者可能已经定义了一些继承自`org.apache.struts.interceptor.Interceptor`接口的类。这些类实现了拦截器的逻辑,如`doIntercept()`方法。 3. **配置拦截器**:在struts-...

    Struts-config-xml

    ActionForm对象在请求处理过程中被创建、填充并传递给Action类。配置通常包括表单名称、类名以及其他属性。这些配置允许Struts在业务逻辑中使用用户输入的数据。 3. **&lt;global-exception&gt;**: 全局异常处理配置...

    struts2综合复习习题

    - OGNL(对象图导航语言)是一种强大的表达式语言,用于在Struts2中访问和操作对象。OGNL的根对象是`ValueStack`,它是Struts2框架内部用于存储请求作用域中的所有对象的容器。 #### 九、在jsp页面中可以通过Struts2...

    struts2+spring整合

    这样,Struts2在处理请求时会从Spring容器中获取Action实例。 2. **使用Struts2-Spring插件**: - 不需要在Struts2配置文件中显式指定Action类,而是利用插件自动扫描Spring容器中的Bean,找到标记为Action的类...

    maven项目中struts的整合

    在Java Web开发中,Maven和Struts2是两个重要的工具。Maven是一个项目管理和综合工具,它帮助开发者管理项目的构建、报告和文档,而Struts2则是一个基于MVC设计模式的Java Web框架,用于简化开发过程。下面将详细...

    Struts2开发总结

    在Struts2中,可以通过以下两种方式在超链接中传递参数: 1. **直接在URL中添加参数**: ```jsp &lt;a href="newdetail2.action?nid=&lt;s:property value="nid"/&gt;"&gt;&lt;s:property value="ntitle"/&gt;&lt;/a&gt; ``` 这种方式...

    java struts2开发总结

    Java Struts2是一种基于Model-View-Controller (MVC)设计模式的Web应用程序框架,它极大地简化了Java Web开发流程。以下是对Struts2开发的一些关键知识点的详细说明: 1. **依赖库**:在使用Struts2进行开发时,...

    Struts2页面取值总结

    本文将深度解析Struts2框架中页面取值的多种方式及核心标签的使用技巧,帮助开发者更高效地进行页面与后台交互。 #### 页面取值的四种常见方法 1. **`&lt;s:property&gt;` 标签**: 此标签用于展示模型中的属性值。如`...

    学习OGNL在Struts2中工作原理

    4. **配置文件**:OGNL也可以用在Struts2的配置文件中,例如定义结果类型时可以通过OGNL表达式来动态指定视图。 #### OGNL与ValueStack 在Struts2中,OGNL的执行环境由ValueStack提供。ValueStack是一个特殊的对象...

    Myeclipse下整合springstruts2

    在`struts.xml`文件中,我们需要指定使用Spring作为对象工厂,这允许Struts2从Spring容器中获取Action实例。添加以下关键代码: ```xml &lt;constant name="struts.objectFactory" value="spring" /&gt; ...

Global site tag (gtag.js) - Google Analytics