check ur struts-config.xml
change to ur action "logon.jsp" to "/logon.jsp"

解决方案 »

  1.   

    Gary Shi:
    非常感谢你的迅速回复
    strut-config.xml配置为
         <action path="/logon"
           type="com.qsh.qiv.action.LogonAction"
           name="logonForm"
          scope="request"
          validate="true"
          input="logon.jsp">
      <forward name="success" path="/WEB-INF/jsp/index.jsp" />
      <forward name="failure" path="/logon.jsp" />
        </action>
      

  2.   

    input="logon.jsp">  ==>input="/logon.jsp">
    另外:
    <forward name="success" path="/WEB-INF/jsp/index.jsp" />
    这一句是不合适的,通常JSP的服务器禁止通过WEB对WEB-INF的访问
      

  3.   

    terry17:问题没有解决,我是说我本来strut-config.xml按如上方式配置,
    一直没有成功
      

  4.   

    gary_shi:
    <forward name="success" path="/WEB-INF/jsp/index.jsp" />经过测试,可以成功访问!方法是在Action中写:mapping.findForward("success");
    即可,已经测试通过!
      

  5.   

    terry17:问题没有解决,我是说我本来strut-config.xml按如上方式配置,
    一直没有成功该问题没有解决!!!!!!!!!!!!
      

  6.   

    我不是说你的配置不对,只是建议你另别这么做。
    一般WEB-INF是放配置文件和LIB的,不是给你放JSP的了。
      

  7.   

    Gary Shi:
    问题没有解决,我是说我本来strut-config.xml按如上方式配置,
    一直没有成功该问题没有解决!!!!!!!!!!!!
      

  8.   

    另外,你如果想要从表面上解决问题把
    validate="true"
    这一行删掉就行了
      

  9.   

    Gary Shi:
    为解决java.lang.IllegalArgumentException: Path logon.jsp does not start with a "/" character..
    问题,我才把validate="true"加上
    加上validate="true"之前是同样的错误啊
      

  10.   

    <action path="/logon"
           type="com.qsh.qiv.action.LogonAction"
           name="logonForm"
          scope="request">
      <forward name="success" path="/WEB-INF/jsp/index.jsp" />
      <forward name="failure" path="/logon.jsp" />
        </action>光这个样子也是可以的,不过 validate这个函数就白写了。
    另外,我觉得下面这个样子也应该是对的了。除非你在别的地方还有错。
      <action path="/logon"
           type="com.qsh.qiv.action.LogonAction"
           name="logonForm"
          scope="request"
          validate="true"
          input="/logon.jsp">
      <forward name="success" path="/WEB-INF/jsp/index.jsp" />
      <forward name="failure" path="/logon.jsp" />
        </action>
      

  11.   

    Gary Shi:
    是啊,是啊
    那问题还可能出现在哪里呢?
    我在LogonAction.java 有如下代码
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
    {
    ActionErrors errors = new ActionErrors();
    LogonForm logonForm = (LogonForm)form;
    String username = logonForm.getUsername(); if(!username.equals("root")){
    errors.add("org.apache.struts.action.GLOBAL_ERROR", new ActionError("error.username.verify"));
    if(!errors.empty()){
    saveErrors(request, errors);
    return mapping.findForward("failure");

    }
    return mapping.findForward("success");
    }
    当我在logon.jsp中输入字串(非root)后提交,并且去掉LogonForm.java的validate方法中的语句,可以正确返回LogonAction指定的错误error.username.verify
      

  12.   

    struts will redirect url to "input" if u set "validate" to true and u set some error information in validate funtion.
    你出错的提示是一定要用/开头,我觉得就是在INPUT那一段啊。会不会你的struts-config.xml里面有重复的部分啊?我的配置应该肯定是对的了,程序里有很多条这样的东西,一直没有什么错啊。
    另外,我不大喜欢用STRUTS里的出错处理机制。
      

  13.   

    gary_shi:
    问题解决,就是你说的
        input="/logon.jsp"
    我写为:
       input="logon.jsp"
    加上/就好了
    之前我一直在反复修改<forward name="failure" path="/logon.jsp" />中的"/"
    万分感谢,放分