您的位置:首页 > 移动开发

Struts2初级教程03 访问request session application

2012-08-23 08:54 489 查看

一.解耦方式

为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts2对HttpServletRquest, HttpSession, ServlcetContext进行了封装,构造了三个Map对象.com.opensymphony.xwork2.ActionContext
ActionContext是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;
}

}


其它不变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: