Struts2 中session的获取(两种方法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangqing84411433/article/details/89357105

方法一:

在Struts2的子控制器中,有如下方法

public String execute(){
	/**
	 * 获取session
	 * ActionContext 在Struts2中代表当前Struts2环境相关信息
	 */
	ActionContext ctx = ActionContext.getContext();
	/**
	 * Map 类型的session 不依赖于 Servlet API
	 * HttpSession (与 Servlet API耦合性低) 
	 * 就可以进行与容器无关的测试等离线操作
	 * 
	 * 离线:脱离web容器单独使用! 比如进行Junit测试
	 * 在底层 Struts2容器会将map session中的信息同步到HttpSession中
	 */
	Map<String, Object> session = ctx.getSession();
	session.put("loginName", "Jerry");
	
	System.out.println(user);
	if("tom".equals(user.getName()) && "123".equals(user.getPassword())){
		message = "欢迎TOM";
		return "success";
	}
	message = "用户名或密码错误!";
	return "error";
}

该子控制器中通过ActionContext获取Struts环境信息,再获取session返回map

当转发到对应的JSP页面时候可以通过EL表达式(${loginName})取出该session()

方法二:(建议使用)

抽象类BaseAction:

package cn.tedu.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.ActionSupport;

/**
 * 该抽象类 是所有控制器的基类,用于封装常用的session、request等,这样用于提供给子类复用
 * ActionSupport 是 Struts2 提供的Action基础类,用于复用公共代码  
 * 例如:常量 SUCCESS = "success" LOGIN = "login" ERROR = "error 等等
 */

public abstract class BaseAction extends ActionSupport implements SessionAware, ApplicationAware, RequestAware{
	
	//这三个属性均与Web无关,可单独访问
	protected Map<String, Object> session;
	protected Map<String, Object> application;
	protected Map<String, Object> request;
	
	//来源于SessionAware
	public void setSession(Map<String, Object> session) {
		this.session = session;
	}

	//来源于ApplicationAware
	public void setApplication(Map<String, Object> application) {
		this.application = application;
	}
	public void setRequest(Map<String, Object> request) {
		this.request = request;
	}

}

在自定义的子控制器中集成即可使用

Action:

package cn.tedu.action;

public class TestAction extends BaseAction{
	public String execute(){
		session.put("demo1", "Hello Session");
		request.put("demo2", "Hello Request");
		application.put("demo3", "Hello Application");
		return SUCCESS;//BaseAction中的常量
	}
}

web.xml配置文件省略

struts.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<package namespace="/login" name="login" extends="struts-default">
		
		<action name="test" class="cn.tedu.action.TestAction">
			<result name="success">/WEB-INF/demo.jsp</result>
		</action>
		
	</package>
</struts>

jsp:文件位于WEB-INF下

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>消息</title>
</head>
<body>
	<h1>${demo1}</h1>
	<h1>${demo2}</h1>
	<h1>${demo3}</h1>
</body>
</html>

URL:请求地址:http://localhost:8000/struts_day02/login/test.action

jsp显示如下:

Hello Session

Hello Request

Hello Application

猜你喜欢

转载自blog.csdn.net/wangqing84411433/article/details/89357105
今日推荐