我已经学了两周的struts了 1 和 2都在学 分别也在找它们的不同,现在有个问题不明白,就是它们的实现原理 像struts2 在struts.xml里配置一下就能把页面上的值复到Action里,我想问一问这是不是用了动态代理的原理来实现的,还有就是struts1中的form是不是也是这一个原理,请大家说明一下谢谢.........

解决方案 »

  1.   

    从web.xml看起
     <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    可知道Struts action也是 servlet
    org.apache.struts.action.ActionServlet extends javax.servlet.http.HttpServlet学了jsp+servlet就知道了Struts就是一种servlet封装还有Struts的自定义标签,自己不是也可以定义如果你认为自己比它写的好的话。
      

  2.   

    我最近也在看这个,原来一直用的是struts1,现在把我的感觉跟你说说 
    现在的struts2的核心是已经改变,配置也很简单,
    流程就是客户端提交一个(HttpServletRequest)请求,请求被提交到一系列(主要是三层)的过滤器(Filter),最后到 FilterDispatcher。
     FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类. action继承AbstractAction,在这里可以注入java对象,也可以写属性,省去form了。也可以写其他的方法,比如CURD等动作!只有在配置吧方法名写上就可以了。struts2聪明的很  会自己找的!下来说其他的东西:看下面代码不通的两个jsp的form,
    第一个jsp的form
    <s:form name="editForm" action="save" validate="true" method="get">

     <s:textfield label="书名" name="book.bookName"/>
     <s:submit value="保存" />
    </s:form>
    第二个jsp的form
    <s:form name="editForm" action="save" validate="true" method="get">

     <s:textfield label="用户名" name="user.name"/>
     <s:submit value="保存" />
    </s:form>
    他们的action都一样,只是name不一样。  但是他们到后台为什么能找到各自的action呢,我觉得这个应该跟 name有关,然后找各自的Action。这个你可以试试。另外,到现在我还没找到统配 struts-*.xml 这样匹配的东西,后面找到了 再跟你说!先到这,如果你还想知道struts1的话,我再跟你说说!
      

  3.   

    action的基类   从request中取得所有提交的参数列表 有这方法。配置文件中找到提交的action对应的form  反射把根据 参数列表名字调用form set方法把值附进去在你的action中 强制转换 (XXForm)form  就可以得到你要的form懒的看源码  应该差不多的道理   自己写也应该差不多是这么个流程
      

  4.   

    先都是是 提交给actionServlet 再 调用对应的action   action基类中有方法实现以上功能。  补充上面的
      

  5.   

    struts2用的是 拦截器 
    当然赋值 有的 类反射