UserAction.java:
package com.struts.user;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;
public class UserAction extends ActionSupport {
public String login() {
/**
* struts 中对数据的操作 方式一:直接拿到 servlet API 对数据进行操作:
* 用的是 servlet 的方式,需要额外导入 servlet 的包
*/
// 获取域对象
HttpServletRequest request = ServletActionContext.getRequest(); // request 域对象
HttpSession session = request.getSession(); // session 域对象
ServletContext application = ServletActionContext.getServletContext(); // application 域对象
// 封装数据到域对象中,可以从页面中获取数据
request.setAttribute("request_data", "request_data");
session.setAttribute("session_data", "session_data");
application.setAttribute("application_data", "application_data");
return "login";
}
public String login2() {
/**
* struts 中对数据的操作 方式二:通过 ActionContext 类
* 推荐使用:用的是 struts 的方法,不需要导入额外的 servlet 包
*/
// 得到 ActionContext 对象:不能放到构造函数中创建,只能在每个方法里创建;
// 当 Action 中有很多方法需要 封装数据的时候,下面获取 map 的代码要重复写很多遍;避免麻烦,可以使用 方式三;
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> request = actionContext.getContextMap(); // 拿到表示 request 对象的 map
Map<String, Object> session = actionContext.getSession(); // 拿到表示 session 对象的 map
Map<String, Object> application = actionContext.getApplication(); // 拿到表示 application 对象的 map
// 封装数据,可以从页面中获取该数据
request.put("request_data", "request_data");
session.put("session_data", "session_data");
application.put("application_data", "application_data");
return "login";
}
}
UserAction2.java:
package com.struts.user;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import java.util.Map;
/**
* struts 中对数据的操作 方式三:实现特定接口的方式
*/
public class UserAction2 extends ActionSupport implements RequestAware, SessionAware, ApplicationAware {
private Map<String, Object> request; // 代表 request 对象的 map
private Map<String, Object> session; // 代表 session 对象的 map
private Map<String, Object> application; // 代表 application 对象的 map
// struts 在启动的时候,会把表示 request 对象的 map 注入
@Override
public void setRequest(Map<String, Object> map) {
this.request = map;
}
// 注入表示 session 对象的 map
@Override
public void setSession(Map<String, Object> map) {
this.session = map;
}
// 注入表示 application 对象的 map
@Override
public void setApplication(Map<String, Object> map) {
this.application = map;
}
public String login(){
// 封装数据,可以从页面中获取数据
request.put("request_data", "request_data");
session.put("session_data", "session_data");
application.put("application_data", "application_data");
return "login";
}
}
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="user" extends="struts-default">
<!-- struts 对数据的操作 方式一 -->
<action name="login" class="com.struts.user.UserAction" method="login">
<result name="login">/index.jsp</result>
</action>
<!-- struts 对数据的操作 方式二 -->
<action name="login2" class="com.struts.user.UserAction" method="login2">
<result name="login">/index.jsp</result>
</action>
<!-- struts 对数据的操作 方式三 -->
<action name="login3" class="com.struts.user.UserAction2" method="login">
<result name="login">/index.jsp</result>
</action>
</package>
</struts>
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%-- 获取 struts 封装到域对象中的数据 --%>
${requestScope.request_data}<br>
${sessionScope.session_data}<br>
${applicationScope.application_data}
</body>
</html>