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

方法一:

在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值