`

struts2与Servlet耦合

阅读更多

=============================
   Struts2 和 Servlet 耦合
=============================

首选 ActionConext 其次 ServletActionContext 最后是实现接口

-- 1 --
 ### ActionContext ###  --- 不能获得response对象

static ActionContext getContext()   获得当前线程的向下文
                           
                                    相当于
Object get(Object key)               ---- getAttribute()

void put( Object key, Object value ) ---- setAttribute()

Map getParameter()    相当于Servlet中的getParameterMap()

Map getApplication()   对应于ServletContext


如:

action
ActionContext.getContext().put("zhangsan","hello");

jsp
张三:${ requestScope.zhangsan }

 

-- 2 --
通过接口使用 --- 典型的依赖注入

### ServletContextAware ### 接口

void setServletContext( ServletContext )

### ServletRequestAware ### 接口

void setServletRequest( HttpServletRequest )

### ServletResponseAware ### 接口

void setServletResponse( HttpServletResponse )


例:
public class LoginAction extends ActionSupport
 implements ServletRequestAware,
  ServletResponseAware {

 private String username;
 private String password;
 //setter...getter...

 private HttpServletRequest request;
 private HttpServletResponse response;

 public String execute() throws Exception {

  //使用request对象 
  request.setAttribute("zhangshan","hello");

  //使用response对象
  Cookie cookie = new Cookie("username",
      this.getUsername());
  cookie.setMaxAge(1000);
  response.addCookie(cookie);

  return "success";
 }

 //这个方法由Strust2框架来自动调用
 //调用后,便可以使用容器的request对象了
 public void setServletRequest(HttpServletRequest request) {

  this.request = request;
 }

 public void setServletResponse(HttpServletResponse responset) {

  this.response = response;
 }
}


---------------------
jsp页面中显示cookie

 cookie: ${ cookie.username.value }

--------------------


-- 3 --

使用 org.apache.struts2.ServletActionContext
---继承于 com.opensymphony.xwork2.ActionContext

内部全部为static的方法

static ActionContext getActionContext(HttpServletRequest req)

static PageContext getPageContext() 

static HttpServletRequest getRequest()
 
static HttpServletResponse getResponse() 

static ServletContext getServletContext() 

static ValueStack getValueStack(HttpServletRequest req) 

-----

static void setRequest(HttpServletRequest request)

static void setResponse(HttpServletResponse response)

static void setServletContext(ServletContext servletContext)

 

例:
public class LoginAction extends ActionSupport {

 private String username;
 private String password;
 //setter...getter...

 

 public String execute() throws Exception {

  HttpServletResponse response = ServletActionContext.getResponse();
  HttpServletRequest request = ServletActionContext.getRequest();
  HttpSession session = request.getSession();

  return "success";
 }
}

分享到:
评论

相关推荐

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

    本文将重点讨论Struts2中的API耦合和动态方法调用,这两种特性对于理解框架的工作原理和提高代码的灵活性至关重要。 首先,我们来看看Struts2 API耦合的几种方式: 1. **ActionContext类**:ActionContext是Struts...

    Struts1与Struts2原理 区别详解汇总

    2. **Action对象**:Struts1中的Action直接与Servlet API耦合,而Struts2中的Action通过拦截器与业务逻辑分离。 3. **配置方式**:Struts1使用`struts-config.xml`文件进行配置,而Struts2主要通过`struts.xml`...

    Struts2访问Servlet的三种方式

    Struts2 框架中,Action 并没有直接和 Servlet API 耦合,这使得 Action 可以更好地进行单元测试。然而,在实现业务逻辑时,经常需要访问 Servlet 中的对象,如 request、session 和 application 等。因此,Struts2 ...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    ### Struts2与Struts1的主要区别 #### Struts2架构设计与实现方式 - **Struts2**在设计上采用了更加灵活的方式,每个请求都对应一个实例化的Action对象,而不是像**Struts1**那样在整个请求周期内共享同一个Action...

    Struts2中直接和间接访问ServletAPI以及动态方法调用之感叹号

    然而,在Struts2中,我们通常不直接与Servlet API交互,而是通过Action类和Struts拦截器来处理请求。直接访问Servlet API可能涉及使用`HttpServletRequest`、`HttpServletResponse`和`ServletConfig`等对象,这可能...

    struts2综合笔记

    而 Struts2 与 Servlet API 的耦合度较低,提供了更多的灵活性。 - **发展历程**: Struts2 是在 WebWork 框架的基础上发展起来的,因此学习 Struts2 实际上也是学习 WebWork。 #### 二、Struts2 的核心组件分析 **...

    Struts1与Struts2本质区别

    - **Struts 2**:通过松耦合的设计,Action不再直接依赖于Servlet API。这不仅简化了Action的编写,也使得Action可以在没有Web容器的情况下独立测试,提高了测试效率和便利性。 #### 4. 可测性方面的对比 - **...

    struts1.0与struts2.的区别

    **Struts2**中的Action则通过依赖注入的方式与Servlet API进行交互,这意味着Action无需直接处理HttpServletRequest和HttpServletResponse对象,而是通过Struts2框架提供的服务间接访问这些对象,大大降低了耦合度。...

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

    方式三、与Servlet耦合的非IOC方式 21 方式四、与Servlet耦合的IOC方式 22 四、OGNL与ValueStack(VS) 22 1.值栈入门 22 2.OGNL入门 24 3.普通方法访问 24 4.静态方法访问 24 5.默认类Math的访问 24 6.调用普通类的...

    Struts2的由来

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

    Struts1和Struts2的区别和对比

    Struts1的Action由于与Servlet API紧密耦合,测试较为复杂,需要依赖如Struts TestCase这样的第三方工具。Struts2 Action则可以通过依赖注入和模拟对象进行测试,使其更易于测试。 在捕获用户输入方面,Struts1使用...

    struts2完整版

    首先,Struts2采用了无侵入式设计,这意味着应用的业务逻辑与Servlet API和Struts2自身的API之间解耦合。例如,在Struts1中,Action类通常需要继承自`Action`类并重写`execute`方法,而在Struts2中,开发者可以定义...

    struts2笔记

    这种模式相比Model1有所改进,但仍然存在一些问题,如Servlet与JSP的耦合度高,测试困难,以及开发效率低等。 Struts1是Model2模式的一种实现,它通过ActionServlet作为MVC的核心,ActionForm处理表单数据,Action...

    struts1和struts2区别

    - **Struts1**:由于Action与Servlet API紧密耦合,测试较为困难,需要使用如Struts TestCase的第三方工具。 - **Struts2**:Action可以通过依赖注入进行测试,使得测试更加容易和独立。 5. **输入捕获**: - **...

    详解Struts2中Action访问Servlet API的几种方法

    Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不再与Servlet API耦合,能更轻松的测试该Action。但如何访问?  Web应用中通常需要访问的Servlet API就是...

    Struts2+hibernate+spring的常见面试题

    2. Servlet API耦合度:Struts1直接耦合Servlet API,而Struts2与Servlet API松耦合,降低了直接操作Request和Response对象的复杂性。 3. 请求参数映射:Struts1需要ActionForm持有请求参数,Struts2则自动将请求...

    struts1与struct2的不同

    - **Struts1**:由于Action类与Servlet API紧密耦合,测试通常需要使用Struts TestCase这样的工具,增加了测试的复杂性。 - **Struts2**:Action类更易于测试,支持依赖注入,可以独立于容器进行测试。 5. **捕获...

    struts2学习笔记

    六、Struts2与Servlet API的耦合 尽管Struts2提供了一套独立于Servlet API的MVC实现,但仍然可以通过配置与Servlet API集成,比如使用FilterDispatcher或者StrutsPrepareAndExecuteFilter来处理请求。这种灵活性使得...

Global site tag (gtag.js) - Google Analytics