`
nbkangta
  • 浏览: 431626 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Struts2与Servlet API解耦

阅读更多

如果开发过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:

 

Java代码 复制代码
  1. ActionContext.getContext() .put(key,value);  

其实这个方法就相当于servlet API中的

Java代码 复制代码
  1. HttpServletRequest.setAttribute(key,value);  

 

2.ServletRequestAware and ServletResponseAware

 

在action中使用时,都必须实现这两种接口.然后实现其中的方法.不推荐使用

 

3.ServletActionContext

 

为全接口继承了ActionContext,其方法都为静态,可以直接调用

如:

Java代码 复制代码
  1. HttpServletRequest request= ServletActionServlet.getRequest();  

 

 

综上所述,这三种方法的使用先后顺序为:

ActionContext

ServletActionContext

ServletRequestAware and ServletResponseAware

但是第一种方法无法获得 HttpServletRequestHttpServletResponse对象.

其它两种可以

分享到:
评论

相关推荐

    Servlet解耦

    #### 一、Servlet与Struts框架的结合 在Java Web开发中,Servlet作为标准的Web组件被广泛应用于处理HTTP请求。然而随着应用复杂度的提高,传统的Servlet处理逻辑逐渐难以满足需求,这时就需要引入更为灵活且功能...

    Struts1-1API.rar_Struts1_API_struts 1 api_struts1_struts1 api_st

    在标签中,我们看到"struts1_api"、"struts_1_api"、"struts1"等关键词,这些都与Struts1的API文档相关。"struts1.4_api"则可能指的是Struts1的1.4版本API,这个版本可能包含了一些特定的更新和改进。 在压缩包的...

    struts2的API耦合与动态方法调用

    这样,无需在Action类中直接引用ServletAPI,降低了耦合度,提高了代码的可测试性。 接下来,我们探讨Struts2的动态方法调用(Dynamic Method Invoked,DMI): 动态方法调用是Struts2的一种强大功能,它允许根据...

    Struts2的由来

    然而,随着时间的推移,Struts 1暴露了一些问题,如对表现层技术的支持单一、与Servlet API的深度耦合和侵入式设计等,这限制了它的灵活性和可测试性。 WebWork是一个由社区驱动的框架,它针对Struts 1的不足进行了...

    struts2开发文档

    2. **Struts2与Struts1的区别** - **Action实现**:Struts1要求Action类继承自特定基类,而Struts2的Action可以是任何POJO对象,无需特定的继承关系。 - **线程模型**:Struts1的Action是单例模式,处理所有请求,...

    struts1和struts2的区别

    而Struts2的Action与容器解耦,尽管仍能访问请求和响应,但通过其他机制减少了对Servlet API的直接依赖,增强了可测试性。 测试方面,Struts1的Action由于execute方法直接暴露了Servlet API,测试通常需要依赖容器...

    struts2 lib包

    7. **Servlet API**: 由于Struts2基于Servlet,所以会依赖`javax.servlet`和`javax.servlet.http`包,以处理HTTP请求和响应。 8. **Logging**: Struts2框架内部使用了日志框架,如Log4j或SLF4J,用于记录应用程序的...

    Struts1与Struts2本质区别

    ### Struts1与Struts2本质区别 #### 1. 在Action实现类方面的对比 - **Struts 1**:要求Action类必须继承一个抽象基类`Action`,这种设计方式意味着开发者必须按照预设的结构来编写代码,灵活性较低。这种通过抽象...

    struts1和struts2的对比

    - **Struts2与Servlet API** - Struts2的Action不直接处理HTTP请求和响应,而是通过拦截器来间接访问。 - 这种设计减少了Action类对Servlet API的依赖,提高了组件间的解耦,也便于进行单元测试。 #### 表单和...

    struts1.3 and struts2 API chm格式

    9. **模型驱动**:理解Struts2的模型驱动模式,使Action类与表单数据解耦。 10. **插件系统**:探究Struts2的插件体系,如何扩展框架功能。 通过阅读这两个版本的API文档,你可以对Struts1.3和Struts2有深入的理解...

    struts2课程笔记

    这一过程实现了与Servlet API的解耦,使得我们无需在web.xml中为每个URL配置单独的Servlet,而是通过配置Action和Result来管理请求和响应。 Struts2还支持多种结果类型,比如Redirect、RedirectAction、Stream等,...

    Struts2和Struts1的什么区别

    在探讨Struts2与Struts1的区别时,我们需深入理解这两个框架的设计理念、架构模式以及它们在实际应用中的表现差异。以下将从多个角度详细分析这两种流行Java Web框架的不同之处。 ### 1. **Action类的区别** #### ...

    struts2 框架教程

    Action是用户定义的业务逻辑类的代理,它与Servlet API解耦,返回值仅为一个字符串,可以重定向或转发到任何视图。 五、实现Struts2简单Demo 1. 下载Struts2框架的jar包。 2. 创建Web工程,将相关jar包引入到项目中...

    struts2 开发jar包汇总

    7. **依赖的Servlet容器库**:由于Struts2是基于Servlet API的,因此还需要如`servlet-api.jar`、`jsp-api.jar`等Servlet和JSP相关的API库。 这些jar包共同协作,构建了一个完整的Struts2开发环境。开发者在实际...

    Struts2资源

    2. **松耦合**:通过将业务逻辑控制器与Servlet API解耦,Struts2实现了更高级别的松耦合,提高了代码的可维护性和可重用性。 3. **面向接口编程**:Struts2通过定义一系列的接口来规范开发流程,这样做的好处是可以...

Global site tag (gtag.js) - Google Analytics