Struts 的工作原理是什么?

解决方案 »

  1.   

    用一个servlet拦截用户的请求,并分发到具体的action中去处理,再将返回的response进行封装,这是处理页面流程的机制,
    另外还有一些标签,非常容易在页面进行显示,这是我自己理解的。说的不对的,请大家提出来。
      

  2.   

    用户的一个请求过来,交给struts的servelet,分发给相应的action进行处理(比如调用业务逻辑),返回ActionMapping,封装了转向信息,然后在返回给浏览器,其中的配置文件很重要
      

  3.   

    Struts的流程
      服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。
      以登陆为例:第一次进login.jsp会先实例化Form、把默认值赋给表单元素。
      输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet读struts-config.xml文件找到 action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的excute方法。
      

  4.   


    这个是struts 1 的,呵呵,我说说2的:
    (省略服务器启动部分,呵呵)
    1.当用户在页面上进行操作时,生成了*.action的请求传给struts.xml(MVC中的V)
    2.服务器根据这个配置文件中所定义的action名称,寻找匹配的处理方法:如果没有定义method,则直接调用的是class里面的类的execute方法,如果定义了method,则是调用的class类里的method中所指明的方法(MVC中的C)
    3.在method中进行处理,在这里有可能采用若干高深莫测的方法,但都属于较为底层的工作,比如访问数据库等等(MVC中的M)
    4.方法处理完后(可能有一串的处理方法,但终究有一个方法是最终进行的),return了一个字符串,比如success、error等,并将这个字符串送回给struts.xml,struts.xml在前面action标签内部定义的若干个result中,找到name属性与返回字符传相同的,然后根据type的类型,向指定页面进行跳转。(MVC中的C)
    5.跳转的页面接受到了请求,生成页面在浏览器里进行显示。(MVC中的V)我也是刚学不久,还望指教~:)
      

  5.   

    呵呵,谢谢大家哦,不知道Struts 的工作流程和工作原理有什么不同!工作原理是不是主要要讲Struts的核心是怎么处理一个请求的。我的想法是当一个请求过来,Struts的核心处理类会将请求字符串进行切割,取出点前面的部分,然后再根据结果字符串到配置文件中找到相应的类,然后还需要遍历request中的所有属性字段,如过是普通的字段需要做一个处理,如果是多媒体字段又应该做什么样的具体处理,然后调用common-beanUtil包的具体类型转换后转换成的相应字段影射到formBean里,然后回传给与结果字符串相对应的实列来处理,然后利用mappingForward实现跳转(实际上是对requesDispatch的包装)!希望得到大家的指点?
      

  6.   

    它的最终原理还是 HttpServlet 只不过是在这个基础上封装了而已
      

  7.   

    给你个链接,很好很强大。
    http://space.itpub.net/13750068/viewspace-493899
      

  8.   

    管他一还是二,都是struts的actionContext对action进行转发。
      

  9.   

    是strut1.x 
    还是sruts2.x
    是有不同的 strut1.x 
              核心: actionServlet  是一个servlet在web.xml中配置            actionServlet       
                           作用 1 : 得到用户请的的信息 如用户名,密码等封装到 actionForm里面去
                                   2 : 得到url的信息找到相应的action好分发          实现步骤:           
                                                   (跟据请求信息)                                              --------------> 封装好actionForm  
                  用户发出请求----> actionServlet 
                                                  --------------> 分发到相应的action
      上面是strut1.x                                             
                                   
                             
             
              
                  
      
      

  10.   

    当服务器被启动后,根据jsp页面里的action属性的值判断调用相应的Action然后再调用相应的小Action
    然后返回到中央处理器ActionServlet加载Struts-config.xml配置文件,根据配置跳转到不同的Jsp
      

  11.   

    ActionServlet------控制器
    Action
    ActionForm
    struts-config.xml------配置一个请求与一个Action对应
    ApplicationResources.properties
    jsp
    jsp------请求----->
    ActionServlet根据请求在struts-config.xml寻找去调用哪一个Action(ActionFrom完成数据的封装)----->
    做相应的业务逻辑处理------根据struts-config.xml显示给用户看的---->jsp
                                                           
      

  12.   

    1.ActionServlet核心控制器会拦截所有*.do的请求
    2.从struts-config.xml中找到用户请求的Action
    3.通过struts-config.xml中的配置再去找这个Action对应的ActionForm,并实例化
    4.把用户填写的数据自动填充到ActionForm中(调用ActionForm中的setXX()方法填充)
    5.同时把ActionForm放入到指定的范围中(request,session)
    6.然后把请求转发给Action
    7.Action获取ActionForm中的值然后调用业务逻辑层实现功能
    8.在通过ActionMapping查找Actionforward实现转发;不知道对你有没有帮助,希望有用
      

  13.   

    就是 MVC 的一个结构表现  
      

  14.   

    再次申明我说的是struts2的工作原理:
        1、struts2核心技术是拦截器,相信学过Java的人都用到过拦截器,struts2的提供了很多内置拦截器。
         2、核心控制器--FilterDispatcher,该控制器运行在WEB容器中负责拦截用户请求,如果用户请求以*.action形式出现,那么核心控制器就将用户请求拦截并处理,这其中显然运用了控制反转的技术,真正执行操作的还是用户写的业务逻辑层代码。
         3、主要流程:
      

  15.   

    struts2 主要是前台接对象 通过struts2的Action类跳转 把对象处理传给DAO类 struts2的Action类再把传回来的对象或对相集合再传回前台页
      

  16.   

    建议你买些书看,比如孙卫琴的《精通Struts》她的一系列书,你学习了之后肯定受益匪浅
      

  17.   

    进google呀!什么都解决了呀
      

  18.   

    struts的核心类是ActionServlet,其可以接收所有.do结尾的请求。
    核心配置文件是struts-config.xml文件说明url与Action及ActionForm的对应关系,url不可以重复。
    在web.xml中说明ActionServlet、其可以接收所有以do结尾的请求;
    说明struts-config.xml所在位置,以参数的形式传给ActionServlet。
    当启动容器时,容器(tomcat、weblogic)实例化ActionServlet,初始化ActionServlet,在初始化ActionServlet时加载struts-config.xml文件。
    当客户通过url.do将请求发给ActionServlet,ActionServlet将处理转发给助手RequestProcessor,RequestProcess通过struts-config.xml
    找到对应的actionForm及action,如果有ActionForm用已有的,没有
    通过类的反射实例化ActionForm,通过反射将表单域的值填充到actionForm中。
    如果有Action用已有的,没有产生一个新的,通过反射调用action的execute方法,在执行前将actionForm通过参数注入到 execute方法中,execute 方法执行结束前通过actionMapping找到actionForward转发到另一个jsp页面中。
      

  19.   

    struts1 2相差不是很大,一个要通过servlet  一个是通过filter,细节实现上有些不同,过程就是拦截-封装
      

  20.   

    第一步 看看风中叶之类的视频,了解struts2大致的使用
    第二步 花些时间看看struts2的过滤器的源代码另外还可以自己简单的实现一个mvc的小框架。可以参考我们写的这个很简陋的mvc框架
    http://code.google.com/p/simplejee/source/browse/trunk/simplejee/src/com/yuqiaotech/simplejee/minimvc/MiniMvcHandlerFilter.java
    以及一个相对完善一点的
    http://code.google.com/p/simplejee/source/browse/#svn/trunk/simplejee/src/com/yuqiaotech/simplejee/mvc
      

  21.   

    struts1用actinServlet中央控制器拦截请求,Struts2用中央过滤器拦截请求,异曲同工!
      

  22.   

    学习一下,Struts2是从Webwork框架继承过来的,跟Struts1框架有区别的
      

  23.   

    truts1 2相差不是很大,一个要通过servlet 一个是通过filter,细节实现上有些不同,过程就是拦截-封装
      

  24.   

    1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
    3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
    4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
    5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
    6 ActionProxy创建一个ActionInvocation的实例。
    7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
    8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
      

  25.   

    我怎么觉得struts只有拦截有点儿用 其他我都不太想用啊
      

  26.   

    拦截器就是filter。。它会在servlet执行之前被执行,
    看一下web.xml里的配置就知道啦。。struts2是通过org.apache.struts2.filter.FilterDispatcher这类来响应客户端请求的,然后再查找struts.xml中的action,通过反射机制执行action的execute。。
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.filter.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  27.   

    Struts其实就是一种框架来的,也是JSP,只是它用一些配置文件(也就是映射吧)来包装,使之运行更快,方便开发
      

  28.   

    楼主,管理员喊你快结贴让我们来仔细分析下这句话:
    1.其中的帖子,就是大家看到的东西,相当于页面,也就是mvc中的v
    2.管理员的角色,是负责喊,喊什么,要根据楼主的行为来决定,在这个案例中,由于楼主长时间不结贴,所以管理员必须提醒你,及时结贴,可以看作是连接楼主和帖子的纽带,相当于sevelet,mvc中的c
    3.楼主,负责及时处理管理员的要求,只要你结了贴,管理员就会马上知道,然后告诉这个帖子,楼主结贴了,你赶紧变身~~~,mvc中的m
    4.struts,其实就是楼主+管理员+帖子的结合体。
    但是很明显,楼主没有及时响应管理员的要求,所以,楼主不是一个合格的楼主,鉴定完毕!
      

  29.   

    说一句话吧:
    其实struts2就是解决了视图和请求分离的问题,记住这句话
    当然顺序先filter,进struts.xml,根据xml配置进入不同的action,action调用业务逻辑。将结果返回到struts.xml,根绝xml文件result配置,派发到不同的视图。
      

  30.   

    我本想深入了解一下struts2的工作原理的,才搜索至此,结果发现大家讲的也都是流程。我也来说说自己的理解吧。
    1,服务器启动根据web.xml初始化struts组件,这其中的细节就让研究服务器的人去了解吧
    2,页面上的一条http请求发送至服务器,服务器根据struts.xml引导消息请求action,struts的拦截器首先会截取http消息,并进行一系列的解析,处理和封装然后根据解析的地址调用相应的action
    3,j2ee提供了对http消息接收和处理的机制这是开发的充分条件,也是j2ee之核心,struts中也必然是使用了servlet的技术,凭借HttpServlet类中的接口方法来实现对http请求的解析。并能将其处理后再封装为结果对象并重新发送一条请求调用jsp,jsp再解读数据信息并生成标准的静态页面返回给浏览器。至于怎么处理和调用这些就是开发框架的人去解决了,一般都是同过xml文档技术实现。
    4,我们可以看到struts1中的action是继承了ActionSupport父类,并且配置ActionForm以获取http请求消息内容,这些就是我在3中提到的对http消息处理后的结果。
    5,然而在struts2中的action和基本的java类一样,不需要任何继承,获取请求信息只需要get方法即可。这也是struts2最大的亮点,struts2的内核使用了自动匹配技术,这是进一步封装的结果,然而会不会影响效率就不知道了。struts2的其它功能也有很多特色。这里就不敢班门弄斧了。
    以上只代表自己蹩脚的理解,拿出来讨论一下。