现在的位置: 首页 > 综合 > 正文

Action中设置和读取作用域属性 J2EE开发各类资源下载清单,  史上最全IT资源,个人收藏总结!Action中获取Servlet的其他对象

2017年11月19日 ⁄ 综合 ⁄ 共 2723字 ⁄ 字号 评论关闭

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的其他对象


抱歉!评论已关闭.