我想JSP在submit时提交的表单跟普通的HTML表单应该是没有什么区别的,走的同样是HTTP的POST。在ActionServlet接到这个POST请求后,根据struts-config.xml的配置,在服务器端创建ActionForm并把表单中的值写进去,以及调用相应的Action。我还没仔细看过Struts的源码。不过应该是八九不离十。稍后跟进。

解决方案 »

  1.   

    接楼上
    在ActionServlet的process方法里面确实间接的调用了一个RequestUtils.createActionForm
                (request, mapping, moduleConfig, servlet);方法来创建一个actionForm实例.
    不过仔细的看看,并没有给actionForm赋值的地方.这就是我觉得奇怪的地方.
      

  2.   

    他的赋值不是通过常规的 创建一个对象然后调用某个方法给某个属性赋值 他直接使用common beanutil来进行赋值,通过request里面获取parameter字符串数组 ,然后使用beanutil通过反射机制来赋值,都被隐藏在struts的类里面了
      

  3.   

    看到源码了,诚如楼上所言,使用的是commons-beanutils中的DynaBean来赋的值。楼主可以一步一步往里面挖:从RequestProcessor->RequestUtils->FormBeanConfig就找到处理赋值的代码了。最终是利用了commons-beanutils。
      

  4.   

    是啊,我也看到了,花了一个晚上仔细的研究了一下actionServlet 感觉思路清晰多了.
    不知道大家在看源码的时候有没有注意Digester这个类,就是这个类初试化配置文件那块,看的比较模糊.谁用过这个类.有没有什么好的文章介绍这个类的.
      

  5.   

    还是去Jakarka Apache站上看看吧,这个Digester用来处理XML的。