struts2-与Servlet API解耦
来源:互联网 发布:布鲁金斯学会 知乎 编辑:程序博客网 时间:2024/04/29 14:44
与Servlet API解耦的访问方式
为了避免与 Servlet API 耦合在一起, 方便 Action 做单元测试, Struts2 对 HttpServletRequest, HttpSession 和 ServletContext 进行了封装, 构造了 3 个 Map 对象来替代这 3 个对象, 在 Action 中可以直接使用 HttpServletRequest, HttpSession, ServletContext 对应的 Map 对象来保存和读取数据.
访问request/session/application对象
方法一:通过ServletActionContext类直接获取
ActionContext 是 Action 执行的上下文对象, 在 ActionContext 中保存了 Action 执行所需要的所有对象, 包括 parameters, request, session, application 等.
a) 获取 HttpServletRequest 对应的 Map 对象
•public Object get(Object key): ActionContext 类中没有提供类似 getRequest() 这样的方法来获取 HttpServletRequest 对应的 Map 对象.
要得到 HttpServletRequest 对应的 Map 对象, 可以通过为 get() 方法传递 “request” 参数实现
b) 获取 HttpSession 对应的 Map 对象:
c) 获取 ServletContext 对应的 Map 对象:
1 import java.util.Map; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 7 import org.apache.struts2.ServletActionContext; 8 9 import com.opensymphony.xwork2.ActionSupport;10 11 @SuppressWarnings("serial")12 public class ContextAction extends ActionSupport {13 14 public String test(){15 System.out.println("ContextAction*********test()");16 17 HttpServletRequest request = ServletActionContext.getRequest();18 request.setAttribute("username", "username_request");19 HttpServletResponse response = ServletActionContext.getResponse();20 21 Map sessionMap = ServletActionContext.getContext().getSession();22 sessionMap.put("username","username_session");23 24 ServletContext sc = ServletActionContext.getServletContext();25 sc.setAttribute("username","username_context");26 27 return "attr";28 }29 }
如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取
方法二:实现指定接口,由struts框架运行时注入:
Action 类通过可以实现某些特定的接口, 让Struts2 框架在运行时向 Action 实例注入parameters, request, session 和 application 对应的 Map 对象:
1 import java.util.Map; 2 3 import javax.servlet.ServletContext; 4 import javax.servlet.http.HttpServletRequest; 5 import javax.servlet.http.HttpServletResponse; 6 7 import org.apache.struts2.ServletActionContext; 8 import org.apache.struts2.interceptor.ServletRequestAware; 9 import org.apache.struts2.interceptor.ServletResponseAware;10 import org.apache.struts2.interceptor.SessionAware;11 import org.apache.struts2.util.ServletContextAware;12 13 import com.opensymphony.xwork2.ActionSupport;14 15 @SuppressWarnings("serial")16 public class ContextAction2 extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware,SessionAware{17 18 HttpServletRequest request;19 HttpServletResponse response;20 Map sessionMap;21 ServletContext sc;22 23 public String test(){24 System.out.println("ContextAction*********test()");25 HttpServletRequest request = ServletActionContext.getRequest();26 request.setAttribute("username", "username_request");27 sessionMap.put("username","username_session");28 sc.setAttribute("username","username_context");29 return "attr";30 }31 @Override32 public void setSession(Map<String, Object> session) {33 this.sessionMap =session;34 }35 @Override36 public void setServletContext(ServletContext context) {37 this.sc = context;38 }39 @Override40 public void setServletResponse(HttpServletResponse response) {41 this.response = response;42 }43 @Override44 public void setServletRequest(HttpServletRequest request) {45 46 }47 }
struts_context.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <package name="context" namespace="/context" extends="struts-default"> 7 <action name="contextAction_test" class="cn.zengfansheng.struts.context.ContextAction" method="test"> 8 <result name="success"> 9 <param name="location">/context/success.jsp</param>10 </result>11 <result name="attr">/context/attr.jsp</result>12 </action>13 <action name="contextAction2_test" class="cn.zengfansheng.struts.context.ContextAction2" method="test">14 <result name="success">15 <param name="location">/context/success.jsp</param>16 </result>17 <result name="attr">/context/attr.jsp</result>18 </action>19 </package>20 </struts>
attr.sjp
1 <%@ page language="java" pageEncoding="utf-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <html> 4 <head> 5 <title>My JSP 'index.jsp' starting page</title> 6 <meta http-equiv="description" content="This is my page"> 7 </head> 8 <body> 9 ${requestScope.username}<br>10 ${sessionScope.username}<br>11 ${applicationScope.username}<br>12 </body>13 </html>
- struts2-与Servlet API解耦
- Struts2--与Servlet API
- struts2与Servlet API解耦(Servlet相关对象访问)
- Struts2 与Servlet API解耦,耦合的访问方式
- Struts2 Action与Servlet API耦合
- Struts2 Action与Servlet API耦合
- Struts2与Servlet API的交互
- struts2与Servlet解耦
- Struts2与Servlet解耦
- 与Servlet API解耦
- struts2 使用 servlet api
- Struts2 Servlet API
- Struts2访问Servlet API
- struts2访问servlet API
- Struts2访问Servlet API
- Struts2:访问Servlet API
- Struts2访问Servlet API
- Struts2-访问Servlet API
- struts2入门
- Linux中/etc/init.d
- struts2-文件上传1
- 聊聊高并发(十三)实现几种自旋锁(六)
- struts2-类型转换
- struts2-与Servlet API解耦
- Struts-国际化
- struts2-验证(手工)
- struts2-文件上传2(多文件)
- VC/MFC如何设置对话框背景颜色
- struts2-自定义拦截器
- 通过修改注册表改变txt文件的默认打开方式
- hibernate入门
- struts2-UI标签