访问Web元素(6)

1.访问Map类的request,session,application

第一种方式:依赖于Struts

a.编写action

package com.bjsxt.struts2.user.action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction1 extends ActionSupport {
        //取得Map类型的request,session,application
	private Map request;
	private Map session;
	private Map application;
	
	public LoginAction1() {
                /*ActionContext.getContext()获取action执行环境,这个环境中有Map类型的request,session,aplication
                 *problem1:ActionContext是单例吗?不是,每个请求都会生成一个ActionContext,request对象不可能所有的用户都使用同一个
                 *problem2:Map类型的request,session,application与HttpServletRequest,HtppSession,ServletContext是一样吗? Map类型的request中内容会copy到HttpServletRequest对象当中去,因此在页面当中也可以使用
                 */
		request = (Map)ActionContext.getContext().get("request");//与Stack Context中的request对应
		session = ActionContext.getContext().getSession();
		application = ActionContext.getContext().getApplication();
	}
	
	public String execute() {
		request.put("r1", "r1");
		session.put("s1", "s1");
		application.put("a1", "a1");
		return SUCCESS; 
	}	
}

b.在页面当中访问Map类型的request,session,application

<?xml version="1.0" encoding="GB18030" ?>
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
    <%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>Insert title here</title>
</head>
<body>
	User Login Success!
	<br />
        使用OGNL表达式访问Map类型的request|使用原始的方式访问HttpServletRequest中的内容
        <!--获取Stack Context中的request中的内容-->
	<s:property value="#request.r1"/>| <%=request.getAttribute("r1") %> <br />
	<s:property value="#session.s1"/> | <%=session.getAttribute("s1") %> <br />
	<s:property value="#application.a1"/> | <%=application.getAttribute("a1") %> <br />
	<s:debug></s:debug><!--查看Value stack contents与Stack Context中的内容-->
	<br />
</body>
</html>

第二种方式(最常用):使用DI(依赖注入)方式获得Map类型Request,session,application

package com.bjsxt.struts2.user.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.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

//需要实现 RequestAware,SessionAware, ApplicationAware接口
public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
	
	private Map<String, Object> request;
	private Map<String, Object> session;
	private Map<String, Object> application;
	
	//DI dependency injection
	//IoC inverse of control
	public String execute() {
		request.put("r1", "r1");
		session.put("s1", "s1");
		application.put("a1", "a1");
		return SUCCESS; 
	}

	@Override
	public void setRequest(Map<String, Object> request) {
		this.request = request;
	}

	@Override
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

	@Override
	public void setApplication(Map<String, Object> application) {
		this.application = application;
	}
	
}
 

猜你喜欢

转载自weigang-gao.iteye.com/blog/2156374