Struts2初级教程03 访问request session application

一.解耦方式

为了避免与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;
	}

}




其它不变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值