Struts2与Servlet解耦
来源:互联网 发布:淘宝图片护盾怎么设置 编辑:程序博客网 时间:2024/05/16 08:31
与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等.
获取HttpServletRequest对应的Map对象:
public Object get(Object key): ActionContext类中没有提供类似getRequest()这样的方法来获取HttpServletRequest对应的Map对象.要得到HttpServletRequest对应的Map对象,可以通过为get() 方法传递 “request”参数实现
获取HttpSession对应的Map对象:
public Map getSession()
获取ServletContext对应的Map对象:
public Map getApplication()
publicString test(){
HttpServletRequestrequest=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session=request.getSession();
ServletContextservletContext=ServletActionContext.getServletContext();
return"success";
}
如果你只是想访问session的属性(Attribute),
你也可以通过ActionContext.getContext().getSession()获取
@Overridepublic String execute() throws Exception {HttpServletRequest request=ServletActionContext.getRequest();HttpServletResponse response=ServletActionContext.getResponse();Map sessionMap=ServletActionContext.getContext().getSession();ServletContext sc=ServletActionContext.getServletContext();request.setAttribute("username", "username_request");sessionMap.put("username", "username_session");sc.setAttribute("username", "username_application");System.err.println("ssssssssssss");return "attr";}
方法二:实现指定接口,由struts框架运行时注入:
Action类通过可以实现某些特定的接口,让Struts2 框架在运行时向 Action 实例注入parameters, request, session和 application 对应的 Map 对象:
importorg.apache.struts2.interceptor.ServletRequestAware;
importorg.apache.struts2.interceptor.ServletResponseAware;
importorg.apache.struts2.interceptor.SessionAware;
importorg.apache.struts2.util.ServletContextAware;
publicclass ContextAction02extendsActionSupport implementsServletRequestAware,
ServletResponseAware,ServletContextAware,SessionAware {
privateHttpServletRequestrequest;
privateServletContextservletContext;
privateHttpServletResponseresponse;
privateMap<String, Object> session;
publicString test(){
System.out.println(" request "+request);
System.out.println("servletContext "+servletContext);
System.out.println(" response "+response);
System.out.println(" session "+session);
return "success"; }
publicvoidsetServletRequest(HttpServletRequest request) {
this.request=request;}
publicvoidsetServletResponse(HttpServletResponse response) {
this.response=response;}
publicvoidsetServletContext(ServletContext context) {
this.servletContext=context;}
publicvoidsetSession(Map<String, Object> session){
this.session=session;}
}
public class ContextAction02 extends ActionSupport implements ServletRequestAware, ServletResponseAware, ServletContextAware, SessionAware{HttpServletRequest request;HttpServletResponse response;Map sessionMap;ServletContext sc;public String test(){System.out.println("ContextAction *********** test()");request.setAttribute("username", "username_request");sessionMap.put("username", "username_session");sc.setAttribute("username", "username_application");return "attr";}public void setSession(Map<String, Object> session) {this.sessionMap = session;}public void setServletContext(ServletContext context) {this.sc = context;}public void setServletResponse(HttpServletResponse response) {this.response = response;}public void setServletRequest(HttpServletRequest request) {this.request = request;}}
访问request/session/application对象中的属性
Action中
publicclassContextActionAttrextendsActionSupport {
publicString test(){
ServletActionContext.getServletContext().setAttribute("username", "username_servletContext");
ServletActionContext.getRequest().setAttribute("username", "username_requst");
ServletActionContext.getContext().getSession().put("username", "username_sesson");
return"attr";
}
}
JSP页面:
<body>
${applicationScope.username} <br>
${sessionScope.username}<br>
${requestScope.username}<br>
</body>
- struts2与Servlet解耦
- Struts2与Servlet解耦
- struts2-与Servlet API解耦
- Struts2 Struts2与servlet接口
- Struts2 浅析 Servlet 与 Struts2
- struts2与Servlet API解耦(Servlet相关对象访问)
- struts2 与 servlet
- struts2与servlet
- Struts2--与Servlet API
- struts2与servlet的耦合
- struts2与Servlet的交互
- struts2与servlet共存问题
- Struts2与Servlet的关系
- servlet与struts2的处理
- struts2与servlet的关系
- Struts2与Servlet的关系
- Struts2与Servlet的关系
- Struts2与Servlet的关系
- 安卓中显示单位px和dip以及sp讲解
- 基础练习 特殊回文数
- ajax(一) 文本格式操作 get和post 实例
- Qt模块化笔记之Qt Widgets——动作类与小部件菜单项
- 做一个cocos2d-html5的虚拟摇杆
- Struts2与Servlet解耦
- [UVA 705] Slash Maze (建图 + DFS)
- 毕业设计--CTD
- Let the balloon rise
- android 新浪微博客户端的表情功能的实现
- 基础练习 回文数
- link安装法
- 第十篇:万丈高楼平地起-驱动编程基础知识点(二)
- 基础练习 特殊的数字