struts2 (二)单元测试/通过耦合和非耦合的方式获取和设置值/返回值类型/异常映射

本文详细介绍了Struts2单元测试的类如何必须继承StrutsTestCase,并且阐述了通过耦合和非耦合的方式获取和设置值。重点讨论了在action中实现ParameterAware、ServletRequestAware接口以实现参数自动填充,以及返回值类型和异常映射的配置。

单元测试的类必须继承StrutsTestCase

package com.etop.struts2.test;

import org.apache.struts2.StrutsTestCase;
import org.junit.Test;

import com.opensymphony.xwork2.ActionProxy;
/**
 * 单元测试的类必须继承StrutsTestCase
 * 测试的action 必须在struts.xml文件预先配置好
 * @author teacher
 *
 */
public class TestStruts2 extends StrutsTestCase{
   @Test
   public void testStruts2(){
       //通过路径获取action的代理
       ActionProxy proxy=getActionProxy("/test.action");
       //获取实际的action
       TestAction testAction=(TestAction)proxy.getAction();
       //测试action对应的类对应的方法
       testAction.execute();
   }
}

通过耦合和非耦合的方式获取和设置值

package com.etop.struts2.param;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ParameterAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 装配模式(非耦合模式):在action中实现某一些接口  然后实现接口些方法,
 * struts2判断action是否实现了某一些接口接口 然后自动调用接口的方法
 * 并且传入需要的参数
 * ParameterAware自动填充参数 类型为 Map<String, String[]> parameters
 * ServletRequestAware, ServletActionContext.getRequest()(耦合)
 */
public class ParamAction extends ActionSupport implements ParameterAware,RequestAware,ServletRequestAware{

   public String execute(){   
       //耦合方式获取原生态request对象
       HttpServletRequest request=ServletActionContext.getRequest();
       String connection=request.getHeader("Connection");
       String connection1=crequest.getHeader("Connection");
       //每一个对应的action 都有一个ActionContext 
       //通过ActionContext对象获取参数集合(非耦合模式)
       Map map=ActionContext.getContext().getParameters();
       //获取请求作用的值 可以将值设置到非耦合的map中 并且可以使用el表达式获取
       Map obj=(Map)ActionContext.getContext().get("request");
       obj.put("test1", "test1");
       return "success";

   }
   private Map<String, String[]> parameters;
   private Map<String, Object> requestParam;
   HttpServletRequest crequest;

   public void setParameters(Map<String, String[]> parameters) {
       this.parameters=parameters;
   }

   public void setRequest(Map<String, Object> requestParam) {
       // TODO Auto-generated method stub
       this.requestParam=requestParam;
   }

   public void setServletRequest(HttpServletRequest request) {
       // TODO Auto-generated method stub
       this.crequest=request;
   }


}

返回值类型

result用于控制action的跳转  name为action返回的名称
               type常用的值 : chaindispatcherredirectredirectActionstream
               type 是转发的类型  dispatcher:请求转发,
                                chain 请求转发 跳转action
                                redirect请求重定向
                                redirectAction 请求重定向到action
                                stream 文件下载 

异常映射

<package name="ognlPakage" namespace="/" extends="struts-default">
      <!-- 全部的result 作用域当前包下的所有action -->
      <global-results>
              <result name="error">/ognl/error.jsp</result>
      </global-results>
      <!-- 全局异常映射 到包下的所有的action出现 exception配置的异常时 会自动跳转到全局定义的result
           如果需要所有的action都需要进行异常映射  需要建立一个公共的package 其他的package集成定义异常映射的package
      -->
      <global-exception-mappings>
              <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
      </global-exception-mappings>
      <action name="ognl" class="com.etop.struts2.ognl.OgnlAction"  >
           <result name="success">/ognl/ognl.jsp</result>
      </action>
   </package>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值