我用struts1.2做了一个简单的登陆,但刚启动服务时,用http://localhost:9999/Test/welcome.do访问可以,但是用http://localhost:9999/Test/或  http://localhost:9999/Test/welcome.jsp访问都会报如下错误:
org.apache.jasper.JasperException: Exception in JSP: /welcome.jsp:2927:   
28:   <body>
29:   <html:link forward="logon">Sign in</html:link>
30:   <logic:present name="user">
31:    <html:link forward="logonoff">Sign off</html:link>
32:   </logic:present>部分文件配置:web.xml配置如下:
<servlet>
<servlet-name>struts</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>struts</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
         <welcome-file-list>
           <welcome-file>welcome.jsp</welcome-file>
         </welcome-file-list>
welcome.jsp如下:
 <body>
  <html:link forward="logon">Sign in</html:link>
  <logic:present name="user">
   <html:link forward="logonoff">Sign off</html:link>
  </logic:present>
  </body>
struts-config.xml如下:
<struts-config>
<form-beans>
<form-bean name="LoginForm" type="com.hss.forms.LoginForm"/>
</form-beans>
<global-forwards>
<forward name="logon" path="/logon.jsp"></forward>
<forward name="logonoff" path="/LoginOff.do"></forward>
<forward name="welcom" path="/welcome.jsp"></forward>
</global-forwards>
<action-mappings>
<action path="/welcome" type="org.apache.struts.actions.ForwardAction" parameter="/welcome.jsp">
</action>
<action name="LoginForm" path="/Login" type="com.hss.actions.LoginAction" validate="true" input="/logon.jsp">
<forward name="success" path="/welcome.jsp"/>
<forward name="fail" path="/logon.jsp"></forward>
</action><action  path="/LoginOff" type="com.hss.actions.LoginOffAction" >
<forward name="success" path="/welcome.jsp"/>
</action>
</action-mappings>
<message-resources parameter="applicationResource"/>
</struts-config>logon.jsp 代码如下:
 <body>
  <html:errors/>
  <html:form action="/Login" focus="loginName">
  <table>
  <tr>
  <td>userName</td>
  <td><html:text property="loginName"></html:text> </td>
  </tr>
  <tr>
  <td>password</td>
  <td><html:password property="loginPwd"/> </td>
  </tr>
  <tr>
  <td><html:submit value="submit"/></td>
  <td><html:reset value="reset"/> </td>
  </tr>
  </table>
  </html:form>
  </body>是不是因为刚开始启动服务器时,ActionServlet刚开始的时候,并没有加载struts-config.xml,当第一次有*.do的访问时,容器交给ActionServlet处理,此时才加载struts-config.xml,所以刚开始启动容器时,直接用 http://localhost:9999/Test/welcome.jsp访问时,<global-forwards>
<forward name="logon" path="/logon.jsp"></forward>
<forward name="logonoff" path="/LoginOff.do"></forward>
<forward name="welcom" path="/welcome.jsp"></forward>
</global-forwards>
并没有加载,所以会报错,不知道我的理解对不对,望各位指点一下

解决方案 »

  1.   

    你的web.xml种没有:<init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
      

  2.   

    只要配置正确了。
    welcome页面就是显示个链接。应该不会有什么问题。
      

  3.   

    <forward name="logonoff" path="/LoginOff.do"></forward>
    这里可以这么配置吗?
      

  4.   

    谢谢各位,我试了一下,只要在web.xml中给 <load-on-startup>0</load-on-startup>标签附上一个非负值.,这里是0,就可以直接用 http://localhost:9999/Test/welcome.jsp访问到。
       我的理解是在服务启动时,容器会解析web.xml如果<servlet></servlet>中<load-on-startup>0</load-on-startup>的值不为负才在容器启动时进行加载。你们说的config参数,在默认情况下ActionServlet的默认值就是"/WEB-INF/struts-config.xml",如果你的struts的配置文件没有改变的话,其实config参数是可以省掉的,这里关键是用<load-on-startup>让容器在一开始就加载struts-config.xml.
      这是我在网上看了些小文章,这是我的理解,如有错误,请各位指出,一起学习,谢谢
      

  5.   

    <forward name="logonoff" path="/LoginOff.do"></forward>
    可以这么用,然后jsp中<html:link forward="logonoff">Sign off</html:link>就可以直接用了