`
wanghaoran04141205
  • 浏览: 79505 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts2 和 Servlet 耦合

阅读更多

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

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

http://scorpio-jh.blog.sohu.com/83673437.html

-- 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的区别和对比

    而Struts2 Action不再直接依赖于容器,可以独立测试,尽管仍可通过容器访问请求和响应,但其他设计减少了对Servlet API的直接依赖。 测试性是两者另一个重要的差异。Struts1的Action由于与Servlet API紧密耦合,...

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

    在Struts2框架中,直接和间接访问Servlet API以及动态方法调用是两个关键概念,它们对理解和优化应用性能至关重要。 首先,让我们深入理解直接访问Servlet API。在传统的MVC模式中,Servlet扮演着控制器的角色,...

    struts1和struts2区别

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

    Struts2访问Servlet的三种方式

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

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

    - 在**Struts2**中,Action类通过初始化、拦截器等机制进行配置和扩展,这使得开发者可以更加灵活地控制请求的处理流程,而无需直接操作Servlet API。 #### ActionForm模式的变化 - **Struts1**采用ActionForm模式...

    Struts2和Struts1的什么区别

    - Action类紧密耦合于Servlet API,这限制了其可测试性和灵活性。 #### Struts2: - Struts2中的Action类更加灵活,可以是任意的Java对象(即POJO),只需实现`execute`方法即可。 - Struts2提供了`ActionSupport`...

    struts2综合笔记

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

    Struts1与Struts2原理 区别详解汇总

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

    struts2笔记

    Struts2是一个强大的Java web应用程序开发框架,它解决了Struts1中存在的诸多问题,提供了更为灵活和可扩展的架构。在理解Struts2之前,我们首先需要回顾一下Web开发的两种经典模式:Model1和Model2。 Model1模式是...

    Struts2的由来

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

    struts1和struts2的对比

    Struts1和Struts2在设计理念上有明显的不同,Struts2在架构上更加现代化,采用了更多的设计模式和最佳实践,提高了应用的可维护性和扩展性。虽然两者都属于MVC框架,但在实现细节上存在诸多差异。对于新的开发项目而...

    struts2完整版

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

    Struts1与Struts2本质区别

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

    Struts2+hibernate+spring的常见面试题

    Struts2和Struts1的主要区别在于: 1. Action类:Struts1的Action类需要继承特定的类,而在Struts2中只需实现Action接口,更利于单元测试。 2. Servlet API耦合度:Struts1直接耦合Servlet API,而Struts2与Servlet ...

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

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

    hibernate struts2 和spring的整合项目

    【描述】:“这是一个将Hibernate、Struts2和Spring三大框架集成在一起的项目示例。它展示了如何在实际开发中有效地结合这三个强大的Java技术,实现数据持久层、业务逻辑层和表示层的无缝协作。” 【详细知识点】:...

    struts2速成

    Struts2保留了WebWork的精髓,并在配置、可测试性、输入处理和表达式语言等方面进行了优化。 在配置方面,Struts2不再局限于单一的`webwork.properties`文件,而是引入了多个配置文件,如`struts-default.xml`、`...

    struts2学习心得

    1. 在软件设计方面Struts2没有像Struts1那样和servlet API和Struts API那样紧密的耦合。Struts2可以不依赖它们。Struts2属于无侵入式设计。而Struts1属于侵入式设计。 例如:public class HelloWordAction extends ...

Global site tag (gtag.js) - Google Analytics