上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2.2 与ServletAPI严重耦合
因为Struts 1框架是在Model 2的基础上发展起来的,因此它完全是基于Servlet API的,所以在Struts 1的业务逻辑控制器内充满了大量的Servlet API,从而导致Struts 1的Action难于测试。
看下面的Action代码片段。
// 业务逻辑控制器必须继承Struts 1提供的Action类 public class LoginAction extends Action { // 处理用户请求的execute方法 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws AuctionException { // 获取封装用户请求参数的ActionForm对象 // 将其强制类型转换为登录用的LoginForm LoginForm loginForm = (LoginForm)form; // 当用户名为crazyit,密码为leegang时返回成功 if ("crazyit".equals(loginForm.getUsername() && "leegang".equals(loginForm.getPassword()) { // 处理成功,返回一个ActionForward对象 return mapping.findForward("success"); } else { // 处理失败,返回一个ActionForward对象 return mapping.findForward("error"); } } }
当我们需要测试上面Action类的execute方法时,该方法有4个参数:ActionMapping、ActionForm、HttpServletRequest和HttpServletResponse,初始化这4个参数比较困难,尤其是HttpServletRequest和HttpServletResponse两个参数,通常由Web容器负责实例化。
因为HttpServletRequest和HttpServletResponse两个参数是Servlet API,严重依赖于Web服务器。因此,一旦脱离了Web服务器,Action的测试将变得非常困难。