Struts2初级教程03 访问request session application
2012-08-23 08:54
489 查看
一.解耦方式
为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts2对HttpServletRquest, HttpSession, ServlcetContext进行了封装,构造了三个Map对象.com.opensymphony.xwork2.ActionContextActionContext是action执行的上下文,在ActionContext中保存了action执行所需要的一组对象,包括 parameters, request, session application locale.
1.通过ActionContent得到对象LoginAction.java
package com.action; import java.util.Map; import com.entity.User; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ModelDriven; public class LoginAction implements Action, ModelDriven<User> { public LoginAction() { System.out.println("in LoginAction"); } private User user = new User();// 直接实例化 @Override public User getModel() { System.out.println(" in getModel"); return user; } @Override public String execute() throws Exception { System.out.println(" in execute"); if ("mgc".equalsIgnoreCase(user.getName()) && "mgc".equals(user.getPassword())) { ActionContext context = ActionContext.getContext(); Map<String, Object> request = (Map) context.get("request");// ActionContext并没有提供一个专门得到request的方法,要 Map<String, Object> session = context.getSession();// Map<String, Object> application = (Map) context.getApplication(); request.put("greeting", "欢迎您来到我们的网站...");// 在请求中放置欢迎信息 session.put("user", user);// 将user对象放置session中 Integer counter = (Integer) application.get("counter");// 网站的访问记数 ,重启无效 counter = null == counter ? 1 : ++counter; application.put("counter", counter); return SUCCESS; } else return ERROR; } }
2.通过实现接口LoginAction.java
package com.action; import java.util.Map; import org.apache.struts2.interceptor.ApplicationAware; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; import com.entity.User; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ModelDriven; public class LoginAction implements Action, ModelDriven<User>, RequestAware, SessionAware, ApplicationAware {//在这里实现接口 public LoginAction() { System.out.println("in LoginAction"); } //通过接口向对象设置值 private Map<String, Object> request; private Map<String, Object> session; private Map<String, Object> application; private User user = new User();// 直接实例化 public void setRequest(Map<String, Object> request) { System.out.println("in setRequest"); this.request = request; } public void setSession(Map<String, Object> session) { System.out.println("in setSession"); this.session = session; } public void setApplication(Map<String, Object> application) { System.out.println("in setApplication"); this.application = application; } @Override public User getModel() { System.out.println(" in getModel"); return user; } @Override public String execute() throws Exception { System.out.println(" in execute"); if ("mgc".equalsIgnoreCase(user.getName()) && "mgc".equals(user.getPassword())) { request.put("greeting", "欢迎您来到我们的网站...");// 在请求中放置欢迎信息 session.put("user", user);// 将user对象放置session中 Integer counter = (Integer) application.get("counter");// 网站的访问记数 ,重启无效 counter = null == counter ? 1 : ++counter; application.put("counter", counter); return SUCCESS; } else return ERROR; } }
二.耦合方式
要直接获取HttpServletRequest和ServletContext对象,在这个类中定义两个静态方法,可以使用org.apache.struts2.ServletActionContext 类,这个类是ActionContext的子类.public static HttpServletRequest getRequest() public static ServletContext getServletContext()
LoginAction.java
package com.action; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.entity.User; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ModelDriven; public class LoginAction implements Action, ModelDriven<User> { public LoginAction() { System.out.println("in LoginAction"); } private User user = new User();// 直接实例化 @Override public User getModel() { System.out.println(" in getModel"); return user; } @Override public String execute() throws Exception { System.out.println(" in execute"); if ("mgc".equalsIgnoreCase(user.getName()) && "mgc".equals(user.getPassword())) { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); ServletContext application = ServletActionContext.getServletContext(); request.setAttribute("greeting", "欢迎您来到我们的网站...");// 在请求中放置欢迎信息 session.setAttribute("user", user);// 将user对象放置session中 Integer counter = (Integer) application.getAttribute("counter");// 网站的访问记数 ,重启无效 counter = null == counter ? 1 : ++counter; application.setAttribute("counter", counter); return SUCCESS; } else return ERROR; } }
还可以实现接口设置对象
LoginAction.java
package com.action; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.util.ServletContextAware; import com.entity.User; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ModelDriven; public class LoginAction implements Action, ModelDriven<User>, ServletRequestAware, ServletContextAware {//实现接口 public LoginAction() { System.out.println("in LoginAction"); } private HttpServletRequest request; private ServletContext context; //通过接口设置对象 @Override public void setServletContext(ServletContext context) { this.context = context; } //通过接口设置对象 @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } private User user = new User();// 直接实例化 @Override public User getModel() { System.out.println(" in getModel"); return user; } @Override public String execute() throws Exception { System.out.println(" in execute"); if ("mgc".equalsIgnoreCase(user.getName()) && "mgc".equals(user.getPassword())) { HttpSession session = request.getSession(); request.setAttribute("greeting", "欢迎您来到我们的网站...");// 在请求中放置欢迎信息 session.setAttribute("user", user);// 将user对象放置session中 Integer counter = (Integer) context.getAttribute("counter");// 网站的访问记数 ,重启无效 counter = null == counter ? 1 : ++counter; context.setAttribute("counter", counter); return SUCCESS; } else return ERROR; } }
其它不变
相关文章推荐
- struts2教程:13、访问或添加request/session/application属性
- Struts2 访问request、session和application对象(一)
- Struts2 访问request、session和application对象
- Struts2 访问request、session和application对象
- Struts2(三)访问和添加request、session、application属性
- Struts2访问web元素(包括:request,session,application和HttpServletRequest,HttpServletSession, HttpServletContext)的4种方法
- Struts2 访问request、session和application对象
- 在 Struts2 中访问 Request、Session 和 Application
- [Struts2]访问request,session和application对象
- struts2添加和访问request、session、application属性
- 关于struts2中对 request session application 的访问
- struts2中访问和添加Application、session以及request属性
- Struts2 访问request session application对象 。
- Struts2 访问request session application对象
- struts2中访问和添加Application、session以及request属性
- Struts2访问request,session,application的四种方式
- Struts2访问web元素(包括:request,session,application)的4种方法
- Struts2访问request,session,application的四种方式
- struts2-13访问或添加几个属性(request/session/application属性)
- Struts2访问ServletAPI(向JSP内置对象request,session,Application传值)