http://hi.baidu.com/yingshuishui1/item/c6a1610ad1b4851bebfe3870

来源:互联网 发布:天道留学 知乎 编辑:程序博客网 时间:2024/04/30 15:45

Struts1 config.xml基本配置导致抛出异常的原因分析

几种在struts-config.xml中经常由于粗心导致的配置错误

1 在action-mapping中的path属性中没有匹配到请求url的对应action时,一般会抛出如下异常Java代码
  1. org.apache.struts.chain.commands.InvalidPathException:   
  2. No action config found for the specified url  
org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url

可能是由于没有设置该<action>或者没有正确设置<action>中的path属性。

2 在<action>中如果没有配置name属性或者name属性配置错误导致在<form-beans>中找不到匹配的元素时,struts容器并不会抛异常,而是很简单的将一个null值作为form参数传递给了Action.execute()方法。

Xml代码
  1. <action path="/login" type="com.element.LoginAction" name="loginForm">  
  2.     <forward name="loginSuccess" path="/loginSuccess.jsp"></forward>  
  3.     <forward name="loginFailure" path="/loginFailure.jsp"></forward>  
  4. </action>  
<action path="/login" type="com.element.LoginAction" name="loginForm"> <forward name="loginSuccess" path="/loginSuccess.jsp"></forward> <forward name="loginFailure" path="/loginFailure.jsp"></forward> </action>

即:

Java代码
  1. public ActionForward execute(ActionMapping mapping, ActionForm form,   HttpServletRequest request, HttpServletResponse response)   
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)

方法中的form被struts传入null值,在接下来的form转型并不会抛异常,因为(LoginForm)null是合法的。但是在后面的对loginform存取参数的代码中一定会抛出NullPointException异常。

如果在一次request请求中不需要提交附加数据,那么就不需要在<action>中配置name属性。

3 表单上的控件name属性和formbean中的属性名不匹配的时候,struts就不会设置form中的那个不匹配的属性了,这样在转型后存取参数的时候就会发生NullPointException异常。Html代码
  1. <form action="<%=request.getContextPath()%>/login.do">  
  2.      username:<input name="username1" type="text"/><br/>  
  3.      password:<input name="password" type="password"/><br/>  
  4.     <input name="test" type="text"/>  
  5.     <input type="submit" value="登陆">  
  6. </form>  
<form action="<%=request.getContextPath()%>/login.do"> username:<input name="username1" type="text"/><br/> password:<input name="password" type="password"/><br/> <input name="test" type="text"/> <input type="submit" value="登陆"> </form>

但是如果name属性匹配到formbean中的属性,但是表单控件并没有输入,则浏览器会发出

Html代码
  1. login.do?username=&password=xxx  
login.do?username=&password=xxx

之类的url请求,这时struts会讲formbean中的属性设置为“”空字符串,而对于其他类型的属性,例如int型,就会设置成0值。

此文章转自:http://hi.baidu.com/yingshuishui1/item/c6a1610ad1b4851bebfe3870

原创粉丝点击