如果开发过struts1.0的朋友应该知道其与servlet API是偶合的,然而struts2将Action与servlet API进行解偶.它方便了单元测试.struts2提供了三种方法对servlet API进行解偶.下面就这三种方法讲解一下:
1.ActionContext
这个接口对应到servlet API是HttpServletRequest
其中的两个主要方法get和 put 对应到HttpServletRequest的是getAttribute和setAttribute.
这样,我们只需要在execute中用ActionContext接口就能间接地操纵servlet API
查阅ActionContext的文档,我们发现其有一个static method. it`s getContext() .
the method returns the ActionContext specific to the current thread. the ActionContext for the current thread, is never null.
所以我们可以在Action中这样操纵servlet:
- ActionContext.getContext() .put(key,value);
其实这个方法就相当于servlet API中的
- HttpServletRequest.setAttribute(key,value);
2.ServletRequestAware and ServletResponseAware
在action中使用时,都必须实现这两种接口.然后实现其中的方法.不推荐使用
3.ServletActionContext
为全接口继承了ActionContext,其方法都为静态,可以直接调用
如:
- HttpServletRequest request= ServletActionServlet.getRequest();
综上所述,这三种方法的使用先后顺序为:
ActionContext
ServletActionContext
ServletRequestAware and ServletResponseAware
但是第一种方法无法获得 HttpServletRequest或HttpServletResponse对象.
其它两种可以
分享到:
相关推荐
#### 一、Servlet与Struts框架的结合 在Java Web开发中,Servlet作为标准的Web组件被广泛应用于处理HTTP请求。然而随着应用复杂度的提高,传统的Servlet处理逻辑逐渐难以满足需求,这时就需要引入更为灵活且功能...
在标签中,我们看到"struts1_api"、"struts_1_api"、"struts1"等关键词,这些都与Struts1的API文档相关。"struts1.4_api"则可能指的是Struts1的1.4版本API,这个版本可能包含了一些特定的更新和改进。 在压缩包的...
这样,无需在Action类中直接引用ServletAPI,降低了耦合度,提高了代码的可测试性。 接下来,我们探讨Struts2的动态方法调用(Dynamic Method Invoked,DMI): 动态方法调用是Struts2的一种强大功能,它允许根据...
然而,随着时间的推移,Struts 1暴露了一些问题,如对表现层技术的支持单一、与Servlet API的深度耦合和侵入式设计等,这限制了它的灵活性和可测试性。 WebWork是一个由社区驱动的框架,它针对Struts 1的不足进行了...
2. **Struts2与Struts1的区别** - **Action实现**:Struts1要求Action类继承自特定基类,而Struts2的Action可以是任何POJO对象,无需特定的继承关系。 - **线程模型**:Struts1的Action是单例模式,处理所有请求,...
而Struts2的Action与容器解耦,尽管仍能访问请求和响应,但通过其他机制减少了对Servlet API的直接依赖,增强了可测试性。 测试方面,Struts1的Action由于execute方法直接暴露了Servlet API,测试通常需要依赖容器...
7. **Servlet API**: 由于Struts2基于Servlet,所以会依赖`javax.servlet`和`javax.servlet.http`包,以处理HTTP请求和响应。 8. **Logging**: Struts2框架内部使用了日志框架,如Log4j或SLF4J,用于记录应用程序的...
### Struts1与Struts2本质区别 #### 1. 在Action实现类方面的对比 - **Struts 1**:要求Action类必须继承一个抽象基类`Action`,这种设计方式意味着开发者必须按照预设的结构来编写代码,灵活性较低。这种通过抽象...
- **Struts2与Servlet API** - Struts2的Action不直接处理HTTP请求和响应,而是通过拦截器来间接访问。 - 这种设计减少了Action类对Servlet API的依赖,提高了组件间的解耦,也便于进行单元测试。 #### 表单和...
9. **模型驱动**:理解Struts2的模型驱动模式,使Action类与表单数据解耦。 10. **插件系统**:探究Struts2的插件体系,如何扩展框架功能。 通过阅读这两个版本的API文档,你可以对Struts1.3和Struts2有深入的理解...
这一过程实现了与Servlet API的解耦,使得我们无需在web.xml中为每个URL配置单独的Servlet,而是通过配置Action和Result来管理请求和响应。 Struts2还支持多种结果类型,比如Redirect、RedirectAction、Stream等,...
在探讨Struts2与Struts1的区别时,我们需深入理解这两个框架的设计理念、架构模式以及它们在实际应用中的表现差异。以下将从多个角度详细分析这两种流行Java Web框架的不同之处。 ### 1. **Action类的区别** #### ...
Action是用户定义的业务逻辑类的代理,它与Servlet API解耦,返回值仅为一个字符串,可以重定向或转发到任何视图。 五、实现Struts2简单Demo 1. 下载Struts2框架的jar包。 2. 创建Web工程,将相关jar包引入到项目中...
7. **依赖的Servlet容器库**:由于Struts2是基于Servlet API的,因此还需要如`servlet-api.jar`、`jsp-api.jar`等Servlet和JSP相关的API库。 这些jar包共同协作,构建了一个完整的Struts2开发环境。开发者在实际...
2. **松耦合**:通过将业务逻辑控制器与Servlet API解耦,Struts2实现了更高级别的松耦合,提高了代码的可维护性和可重用性。 3. **面向接口编程**:Struts2通过定义一系列的接口来规范开发流程,这样做的好处是可以...