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的生命周期和依赖注入特性,可能需要在测试中对某些对象(如Session、Request、Response)进行模拟或配置。此外,如果你的应用使用了Spring等依赖注入框架,可能还需要额外的配置来使Struts2 ...
在 Struts 应用程序中,`struts-config.xml` 文件是核心配置文件,它定义了应用的行为、控制器(Actions)、数据源(Form Beans)以及视图(JSP 页面)之间的关系。本文将深入探讨 `struts-config.xml` 的主要元素和...
在Struts的配置文件中,需要有相应的<action>标签与之对应,并指定form-bean的名称。 11. 标签与FormBean的关联: 在Struts 1中,表单与FormBean有紧密的关联。表单内的输入标签如、等必须对应FormBean中定义的属性...
在第一种整合方式中,Struts的`struts-config.xml`配置文件中,我们将`type`属性设置为`org.springframework.web.struts.DelegatingActionProxy`,这表示Struts的Action将由Spring来创建和管理。例如: ```xml ...
9. **全局类型转换配置**:为了统一管理不同类型转换的规则,Struts2允许在`struts.xml`配置文件或`xwork-conversion.properties`文件中定义全局的类型转换策略,从而避免在每个Action中重复配置相同的转换规则。...
例如,在JSP页面中,若要访问session中的值,可以通过`<%@ page isELIgnored="false" %>`开启EL表达式支持,然后使用`${requestScope.count}`来获取值。 显示Action数据通常分为四步:创建Action类,配置struts.xml...
三、在Action获取Scope对象 19 方式一、与Servlet解耦合的非IOC方式 20 方式二、与Servlet解耦合的IOC方式 21 方式三、与Servlet耦合的非IOC方式 21 方式四、与Servlet耦合的IOC方式 22 四、OGNL与ValueStack(VS) 22...
Struts 2会通过Spring ObjectFactory获取Action实例。 ```java @ManagedBean(name = "myAction") public class MyAction { @Inject private MyService myService; // 业务逻辑代码 } ``` 总结来说,Spring与...
你可以在Action中将参数放入ActionContext,然后在结果页面中通过HttpServletRequest对象获取: ```java public String execute() { ActionContext context = ActionContext.getContext(); context.put("myParam...
2. **创建拦截器**:在saif-0.1.jar中,开发者可能已经定义了一些继承自`org.apache.struts.interceptor.Interceptor`接口的类。这些类实现了拦截器的逻辑,如`doIntercept()`方法。 3. **配置拦截器**:在struts-...
ActionForm对象在请求处理过程中被创建、填充并传递给Action类。配置通常包括表单名称、类名以及其他属性。这些配置允许Struts在业务逻辑中使用用户输入的数据。 3. **<global-exception>**: 全局异常处理配置...
- OGNL(对象图导航语言)是一种强大的表达式语言,用于在Struts2中访问和操作对象。OGNL的根对象是`ValueStack`,它是Struts2框架内部用于存储请求作用域中的所有对象的容器。 #### 九、在jsp页面中可以通过Struts2...
这样,Struts2在处理请求时会从Spring容器中获取Action实例。 2. **使用Struts2-Spring插件**: - 不需要在Struts2配置文件中显式指定Action类,而是利用插件自动扫描Spring容器中的Bean,找到标记为Action的类...
在Java Web开发中,Maven和Struts2是两个重要的工具。Maven是一个项目管理和综合工具,它帮助开发者管理项目的构建、报告和文档,而Struts2则是一个基于MVC设计模式的Java Web框架,用于简化开发过程。下面将详细...
在Struts2中,可以通过以下两种方式在超链接中传递参数: 1. **直接在URL中添加参数**: ```jsp <a href="newdetail2.action?nid=<s:property value="nid"/>"><s:property value="ntitle"/></a> ``` 这种方式...
Java Struts2是一种基于Model-View-Controller (MVC)设计模式的Web应用程序框架,它极大地简化了Java Web开发流程。以下是对Struts2开发的一些关键知识点的详细说明: 1. **依赖库**:在使用Struts2进行开发时,...
本文将深度解析Struts2框架中页面取值的多种方式及核心标签的使用技巧,帮助开发者更高效地进行页面与后台交互。 #### 页面取值的四种常见方法 1. **`<s:property>` 标签**: 此标签用于展示模型中的属性值。如`...
4. **配置文件**:OGNL也可以用在Struts2的配置文件中,例如定义结果类型时可以通过OGNL表达式来动态指定视图。 #### OGNL与ValueStack 在Struts2中,OGNL的执行环境由ValueStack提供。ValueStack是一个特殊的对象...
在`struts.xml`文件中,我们需要指定使用Spring作为对象工厂,这允许Struts2从Spring容器中获取Action实例。添加以下关键代码: ```xml <constant name="struts.objectFactory" value="spring" /> ...