J2EE开发各类资源下载清单, 史上最全IT资源,个人收藏总结!
(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的其他对象