=============================
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耦合的几种方式: 1. **ActionContext类**:ActionContext是Struts...
2. **Action对象**:Struts1中的Action直接与Servlet API耦合,而Struts2中的Action通过拦截器与业务逻辑分离。 3. **配置方式**:Struts1使用`struts-config.xml`文件进行配置,而Struts2主要通过`struts.xml`...
Struts2 框架中,Action 并没有直接和 Servlet API 耦合,这使得 Action 可以更好地进行单元测试。然而,在实现业务逻辑时,经常需要访问 Servlet 中的对象,如 request、session 和 application 等。因此,Struts2 ...
### Struts2与Struts1的主要区别 #### Struts2架构设计与实现方式 - **Struts2**在设计上采用了更加灵活的方式,每个请求都对应一个实例化的Action对象,而不是像**Struts1**那样在整个请求周期内共享同一个Action...
然而,在Struts2中,我们通常不直接与Servlet API交互,而是通过Action类和Struts拦截器来处理请求。直接访问Servlet API可能涉及使用`HttpServletRequest`、`HttpServletResponse`和`ServletConfig`等对象,这可能...
而 Struts2 与 Servlet API 的耦合度较低,提供了更多的灵活性。 - **发展历程**: Struts2 是在 WebWork 框架的基础上发展起来的,因此学习 Struts2 实际上也是学习 WebWork。 #### 二、Struts2 的核心组件分析 **...
- **Struts 2**:通过松耦合的设计,Action不再直接依赖于Servlet API。这不仅简化了Action的编写,也使得Action可以在没有Web容器的情况下独立测试,提高了测试效率和便利性。 #### 4. 可测性方面的对比 - **...
**Struts2**中的Action则通过依赖注入的方式与Servlet API进行交互,这意味着Action无需直接处理HttpServletRequest和HttpServletResponse对象,而是通过Struts2框架提供的服务间接访问这些对象,大大降低了耦合度。...
方式三、与Servlet耦合的非IOC方式 21 方式四、与Servlet耦合的IOC方式 22 四、OGNL与ValueStack(VS) 22 1.值栈入门 22 2.OGNL入门 24 3.普通方法访问 24 4.静态方法访问 24 5.默认类Math的访问 24 6.调用普通类的...
然而,随着时间的推移,Struts 1暴露了一些问题,如对表现层技术的支持单一、与Servlet API的深度耦合和侵入式设计等,这限制了它的灵活性和可测试性。 WebWork是一个由社区驱动的框架,它针对Struts 1的不足进行了...
Struts1的Action由于与Servlet API紧密耦合,测试较为复杂,需要依赖如Struts TestCase这样的第三方工具。Struts2 Action则可以通过依赖注入和模拟对象进行测试,使其更易于测试。 在捕获用户输入方面,Struts1使用...
首先,Struts2采用了无侵入式设计,这意味着应用的业务逻辑与Servlet API和Struts2自身的API之间解耦合。例如,在Struts1中,Action类通常需要继承自`Action`类并重写`execute`方法,而在Struts2中,开发者可以定义...
这种模式相比Model1有所改进,但仍然存在一些问题,如Servlet与JSP的耦合度高,测试困难,以及开发效率低等。 Struts1是Model2模式的一种实现,它通过ActionServlet作为MVC的核心,ActionForm处理表单数据,Action...
- **Struts1**:由于Action与Servlet API紧密耦合,测试较为困难,需要使用如Struts TestCase的第三方工具。 - **Struts2**:Action可以通过依赖注入进行测试,使得测试更加容易和独立。 5. **输入捕获**: - **...
Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,因为Action类不再与Servlet API耦合,能更轻松的测试该Action。但如何访问? Web应用中通常需要访问的Servlet API就是...
2. Servlet API耦合度:Struts1直接耦合Servlet API,而Struts2与Servlet API松耦合,降低了直接操作Request和Response对象的复杂性。 3. 请求参数映射:Struts1需要ActionForm持有请求参数,Struts2则自动将请求...
- **Struts1**:由于Action类与Servlet API紧密耦合,测试通常需要使用Struts TestCase这样的工具,增加了测试的复杂性。 - **Struts2**:Action类更易于测试,支持依赖注入,可以独立于容器进行测试。 5. **捕获...
六、Struts2与Servlet API的耦合 尽管Struts2提供了一套独立于Servlet API的MVC实现,但仍然可以通过配置与Servlet API集成,比如使用FilterDispatcher或者StrutsPrepareAndExecuteFilter来处理请求。这种灵活性使得...