J2EE开发各类资源下载清单, 史上最全IT资源,个人收藏总结!
struts2为了降低组件之间的耦合程度,在Action中并没有嵌入Servlet相关的对象,所以要想获取Servlet相关的对象,Struts分别提供了几种方式
(1) 对于Servlet的作用域属性设置和取值,struts提供了两种方式,一种是专门得到作用域Map和请求参数Map,另一种是先得到request对象,然后在通过request得到其他对象。
例:
struts-scope.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 name="scope" namespace="/scope" extends="struts-default"> <action name="work" class="edu.action.ScopeAction" method="execute"> <result name="showScopeMessage" >/page/showScopeMessage.jsp</result> </action> </package> </struts>
ScopeAction.java
package edu.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public class ScopeAction { public String execute(){ ActionContext context = ActionContext.getContext(); //context.getApplication()得到的是一个Map Map<String,Object> applicationMap = context.getApplication(); applicationMap.put("app", "application作用域值"); context.getSession().put("sess","session作用域值"); //没有context.getRequest()方法,context.put就是保存到requestScope context.put("req", "request作品域值"); Map<String,Object> paramMap = context.getParameters(); String[] values = (String[]) paramMap.get("name"); System.out.println("request参数name="+values[0]); paramMap.put("name", values[0]+"—execute"); /* * 该方法将paramMap的参数传递给/page/showScopeMessage.jsp,在showScopeMessage.jsp调用。 * 奇怪的是在jsp中只能通过上面context.getParameters().get()方式获取; * 而不能在showScopeMessage.jsp页面通过EL表达式${param.name}调用。 * 我想这是struts2的一个bug吧 */ context.setParameters(paramMap); return "showScopeMessage"; } }
showScopeMessage.jsp
<%@ page language="java" import="java.util.*,java.lang.*,com.opensymphony.xwork2.ActionContext" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'showScopeMessage.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <% ActionContext context = ActionContext.getContext(); Map<String,Object> paramMap = context.getParameters(); String values = (String) paramMap.get("name"); out.println("request参数:name="+values+"<br/>"); String sessScope = (String)context.getSession().get("sess"); out.println("session作用域:sessionScope.sess="+sessScope); %><br/> 处理后的name参数:\${param.name}=${param.name}<br/> request作用域:\${requestScope.req}=${requestScope.req}<br/> session作用域:\${sessionScope.sess}=${sessionScope.sess}<br/> application作用域:\${applicationScope.app}=${applicationScope.app}<br/> </body> </html>
浏览器上输入:http://localhost:8080/Struts2_03/scope/work.action?name=xiaohua
(2)关于如何得到Servlet的其他对象如request对象,参见我另外一篇文章:Action中获取Servlet的其他对象