struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性
有两种方式可以实现在Action中使用Servlet的API。一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony.xwork2.ActionContext类。
struts2推荐的是使用第二种方式:使用ActionContext类来对request、session和application对象进行操作。
方式一:使用ServletActionContext类(紧耦合)
1. 创建控制层
package com.clzhang.struts2.demo4; import org.apache.struts2.ServletActionContext; public class ServletActionContextTestAction { private String usernameRequest; private String usernameSession; private String usernameApplication; public String getUsernameApplication() { return usernameApplication; } public String getUsernameRequest() { return usernameRequest; } public void setUsernameRequest(String usernameRequest) { this.usernameRequest = usernameRequest; } public String getUsernameSession() { return usernameSession; } public void setUsernameSession(String usernameSession) { this.usernameSession = usernameSession; } public void setUsernameApplication(String usernameApplication) { this.usernameApplication = usernameApplication; } public String execute() { usernameRequest = "request级别的用户名:张三"; usernameSession = "session级别的用户名:李四"; usernameApplication = "application级别的用户名:赵五"; ServletActionContext.getRequest().setAttribute("usernameRequest", usernameRequest); ServletActionContext.getRequest().getSession().setAttribute( "usernameSession", usernameSession); ServletActionContext.getServletContext().setAttribute( "usernameApplication", usernameApplication); return "showResult"; } }
2. 修改配置文件struts.xml
<action name="servletActionContextTest" class="com.clzhang.struts2.demo4.ServletActionContextTestAction"> <result name="showResult">/struts2/demo4/showResult.jsp</result> </action>
3. 创建显示JSP文件(showResult.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page isELIgnored="false"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> #request.usernameRequest值是: <s:property value="#request.usernameRequest" /> <br /> #session.usernameSession值是: <s:property value="#session.usernameSession" /> <br /> #application.usernameApplication值是: <s:property value="#application.usernameApplication" /> <br /> </body> </html>
4. 测试
打开IE,输入地址:http://127.0.0.1:8080/st/struts2/servletActionContextTest.action
结果如下:
方式二:使用ActionContext类(松耦合)
1. 创建控制层
package com.clzhang.struts2.demo4; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public class ActionContextTestAction { public String execute() { // 第一种方法向request对象中放数据 // 因为ActionContext类没有getRequest()这样的方法,所以需要使用下面的方式获取request对象 Map request = (Map) ActionContext.getContext().get("request"); request.put("requestValue", "this is reqeustValue"); // 第二种方法向request对象中放数据 ActionContext.getContext().put("otherrequest", "this is otherrequest value"); Map session = (Map) ActionContext.getContext().getSession(); session.put("sessionValue", "this is sessionValue"); Map application = (Map) ActionContext.getContext().getApplication(); application.put("applicationValue", "this is applicationValue"); return "showScopeValue"; } }
2. 修改配置文件struts.xml
<action name="actionContextTest" class="com.clzhang.struts2.demo4.ActionContextTestAction"> <result name="showScopeValue">/struts2/demo4/showScopeValue.jsp</result> </action>
3. 创建显示JSP文件(showScopeValue.jsp)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> request: <s:property value="#request.requestValue" /> <br /> <br /> otherrequest: <s:property value="#request.otherrequest" /> <br /> <br /> session: <s:property value="#session.sessionValue" /> <br /> <br /> application: <s:property value="#application.applicationValue" /> <br /> <br /> </body> </html>
4. 测试
打开IE,输入地址:http://127.0.0.1:8080/st/struts2/actionContextTest.action
结果如下: