版权声明:本文为博主原创文章,未经博主允许不得转载。 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显示如下: