Chinaunix首页 | 论坛 | 博客
  • 博客访问: 446660
  • 博文数量: 750
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4970
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 12:36
文章分类

全部博文(750)

文章存档

2011年(1)

2008年(749)

我的朋友
最近访客

分类:

2008-09-09 15:19:46


  初学Struts,写了一个很简单的应用,主要功能和页面如下:
  
  1、首页显示一个“添加新用户”的链接,点击该链接出发一个forward动作,页面导向到添加用户的jsp页面
  2、添加用户的jsp页面中,可供用户输入“用户名”和“用户描述”两项
  3、用户输入完毕,将做输入数据合法性检查,检查通过,将输入信息保存进入文件(使用了Properties类),然后返回首页;检查失败返回添加用户页面
  4、数据合法性检查分成两块,第一部分检查条件使用Struts的Validator,检查条件配置在Validator.xml中;第二部分检查放在ActionForm中,
  检查失败将错误信息置入ActionErrors中,然后返回到添加用户的页面并显示错误信息。
  
  JSP页面、ActionForm和Action类的代码书写都参照了struts-example应用,所以这里代码不再列举,请看附件中的代码包这里值得一提的是,在开发过程中,碰到了一个小问题,正是由于该问题,才导致查看Struts源码,刨根问底的查找错误原因的过程该错误发生在Struts的配置文件中,首先将错误的配置文件列出如下:
  
  
  
    "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
  "">
  
  
  
  
  
  
  
    
  name="CreateUserForm"
  
  type="com.zchome.CreateUserForm"/>
  
  
  

  
  
  
  
  
  

  
  
  
  
  
  
  
  
  
  
  
  

  
  
  
  
  
  
  
  
  
    
  path="/Welcome"
  
  type="org.apache.struts.actions.ForwardAction"
  
  parameter="/jsp/Welcome.jsp"/>
  
  
  
  

  
  
    
  path="/docreateuser"
  
  type="com.zchome.CreateUserAction"
  
  name="CreateUserForm"
  
  scope="request"
  
  input="createuser">
  
  
  
  
  
  
  
  
  

  
  
  
  
  
  
  

  
  
  
  
  
  
  
  
  
  
  
  
    value="/WEB-INF/tiles-defs.xml" />
  
  
  

  
  
  
  
    property="pathnames"
  value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
  

  
  

  
  首先描述一下系统的出错背景:
  1、从首页点击链接来到添加用户的页面 正常
  2、在添加用户页面中输入Vlidator.xml文件中定义的错误数据,弹出script对话框,提示出错 正常
  3、在添加用户页面中输入合法数据,数据保存进入文件并重定向到首页 正常
  4、在添加用户页面中输入ActionForm中定义的非法数据,系统应返回到添加用户的页面 出错!!!
  OK,来着重看这个添加动作的定义,如下:
  
    
  path="/docreateuser"
  
  type="com.zchome.CreateUserAction"
  
  name="CreateUserForm"
  
  scope="request"
  
  input="createuser">
  
  
  
  
  
  
  
  从以上的定义可以看出,如果Validate验证出错,Struts应该为我们重定向到input域所定义的uri,即/jsp/createuser.jsp
  看起来应该没有问题,再来看看出错信息,如下:
  
  java.lang.IllegalArgumentException: Path createuser does not start with a "/" character
  at org.apache.catalina.core.ApplicationContext.getRequestDispatcher(ApplicationContext.java:1179)
  at org.apache.catalina.core.ApplicationContextFacade.getRequestDispatcher(ApplicationContextFacade.java:174)
  at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1062)
  at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
  at org.apache.struts.action.RequestProcessor.internalModuleRelativeForward(RequestProcessor.java:1012)
  at org.apache.struts.tiles.TilesRequestProcessor.internalModuleRelativeForward(TilesRequestProcessor.java:345)
  at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:980)
  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
  
  出错信息清楚的说明,“createuser”这个path应该以“/”字符开头
  为定位这个错误,从以上错误信息,开始打开Struts的源码RequestProcessor.java进行研究,首先来到这一段:
  
  public class RequestProcessor {
  
  protected boolean processValidate(H
【责编:admin】

--------------------next---------------------

阅读(313) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~