struts理解.docx
《struts理解.docx》由会员分享,可在线阅读,更多相关《struts理解.docx(103页珍藏版)》请在冰豆网上搜索。
struts理解
struts1原理
文章分类:
Java编程
看到一篇struts1的文章,转过来自己学习学习。
争取以后自己写点东西。
struts1的工作原理图:
1.初始化:
struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的
Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts
中不同的模块初始化相应的对象。
(面向对象思想)
2.发送请求:
用户提交表单或通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器。
3.form填充:
struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员
变量中。
4.派发请求:
控制器根据配置信息对象ActionConfig将请求派发到具体的Action,对应的formBean一并
传给这个Action中的excute()方法。
5.处理业务:
Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)
完毕后返回一个ActionForward对象。
服务器通过ActionForward对象进行转发工作。
6.返回响应:
Action将业务处理的不同结果返回一个目标响应对象给总控制器。
7.查找响应:
总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下
为jsp页面。
8.响应用户:
目标响应对象将结果传递给资源对象,将结果展现给用户。
转自:
摘抄:
struts的理解---
1、Struts中的ActionForm是个很有意思的东西,向楼上几位说的,是个数据存储对象。
其实ActionForm在某些时候也可以看成是缓存对象。
在某些系统中,客户端表单提交或者数据提交,通过ActionForm收集上来,利用Validator机制进行验证,生成DTO进行数据传输。
这里的ActionForm就可以当作在进行数据采集上来后需要进行业务逻辑处理前的一个缓冲。
Struts中有很多现有可用的Form,可以好好看看,有时利用现有的扩展或者直接利用效果会更好。
应用Struts要先了解Struts内部,知己知彼,百战不殆。
2、其实Structs很简单,只起一个控制器的作用,只要你了解mvc架构,再去看Structs,
发现一起都如此简单。
你要学的就只是structs自带的一些东西而已。
zhutouzip(醒了的鸟)说的RequestProcessor和ActionServlet
在strcuts老版本中,主要是通过ActionServlet来实现控制器,而在新版本中,
它的权限已经移交给RequestProcessor,由这个东东来进行统一处理,
所以你可以继承RequestProcessor,来自己写一个类控制你自己的流转哦,
楼主说的这些东西,随便找个structs教程都应该有介绍的,建议你去找找看,
再这里发贴问也未必有什么结果,还是自己理解的更好一点。
3、其实那个ActionServlet才是struts的核心组件,它负责把表单信息set到formbean中
然后再去调用相对应的action,总之,要理解struts,ActionServlet是关键
4你对表单的理解不对。
表单(ActionForm)是一个数据存储对象。
提交的时候需要对表单里的数据进行验证,那是Struts的Validator机制。
你如果需要在页面上显示数据(比如姓名、性别...)需要构造与之对应的一个ActionForm。
然后在Action中把数据通过SetXXX的方法,将值存到Form中。
这样在页面上(也可以用标签)显示Form里的值。
5、struts使用actionservlet来实现控制流程的,jsp页面的请求是通过ActionServlet来转发到的,ActionServlet根据struts-config.xml文件中的配置决定用哪个formbean来组合jsp页面传递来得数据,然后转发到哪个Action,在Action中根据返回的ActionForward来寻找Froward。
你可以详细看看RequestProcessor和ActionServlet,他们是struts中很重要得部分!
头有点晕,呵呵,你仔细看看源代码,就可以有很深的了解的!
-------------------------------------------------------------------------------------
struts的框架技术在mvc的三层结构模式中的到了从分的体现和应用,
下面谈谈自己对struts的mvc学习心得。
所谓的mvc就是model,view和control的简称,
这三者的关系就是B/S应用系统中的业务层(model),表现成(view),控制层(control),
打个比方就像酒店里的厨房,吧台,餐厅,在一个较大的酒店(就像一个大型的软件项目)里,
这三者是分的很清除的,再对应到struts里面就是厨房——struts调用的后台业务逻辑,
吧台——struts的容器(包括核心组件ActionServlet和Struts-config.xml的配置文件),
餐厅(点菜菜单)——struts封装的页面数据表单,当服务员把餐厅点菜菜单交给吧台
(相当于页面发送了一次请求给struts容器),吧台会根据文件资料去查找菜的类系,
找到相应的厨师去做菜(相当于struts容器根据struts-config.xml
配置文件找到相应的action调用相应的javabean处理页面提交的formbean封装的数据),
到这里大家应该很清除了,应该是比较深刻的理解了struts的mvc三层结构模式。
在实际项目中,后台的业务处理层model层是可分的,
比如分为数据持久层(目前hibernate在这里的应用比较流行),
Spring的Dao支持数据持久层的数据操作,再向上有业务处理的Bso层,等等,
整个项目的层次结构,因具体的项目大小,复杂程度而言。
如果有高手路过请指点一二,留下一点意见,谢谢!
----------------------------------------------------------------------------------------
谈谈对STRUTS的理解````2008-09-2102:
47相关知识正在扩充整理中````
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Struts优缺点
优点:
Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。
使开发者能更深入的了解其内部实现机制。
除此之外,Struts的优点主要集中体现在两个方面:
Taglib和页面导航。
Taglib是Struts的标记库,灵活动用,能大大提高开发效率。
另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。
通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。
尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
缺点:
Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。
Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。
Struts项目实施经验
前段时间,我们基于Struts架构(结合Tiles),开发了一个WEB应用。
以下是我们在项目过程中积累的一些经验和吸取的教训,望对各位有所帮助。
1、基于Struts架构的项目开发,首先需要有一个很好的整体规划,整个系统中包括哪几个模块,每个模块各需要多少FormBean和ActionBean等,而且最好有专人负责Struts-config.xml的管理。
开发基于Struts的项目的难点在于配置管理,尤其是对Struts-config.xml的管理。
2、如果你的项目非常紧,并且项目组中又没有富有经验的Struts开发人员,建议不要冒然采用Struts。
Struts的掌握需要一个过程,对于一个熟练的JSP程序员,自学大概需要半个月左右的时间。
如果结合titls,则需要更长的时间。
3、如果你在网页中大量运用taglib,那么你的美工将做出部分牺牲。
当你结合Tiles,功能增强的同时,这种牺牲尤为明显。
当然,你对功能和美观的取舍由你自己决定。
4、Taglib是一个好东西,但灵活运用它却需要一个过程,如果你不想在Taglib上花太多的时间,那么只需理解与FORM有关的几个标记,其它的标记就放着吧,以后再看,先去研究ActionServlet和Struts-config.xml,你会觉得很有成就感。
5、Struts的诞生时间虽不长,但与之相关的工具却越来越多,如果你是用Jbuilder作为开发工具,那我可以为你推荐几款优秀的opentools,极大的提高开发效率。
6、Struts是否只适合于大型项目呢?
No!
Struts适合于各种大小的项目,当然,对于大型项目,它所体现出来的优势更加明显。
总结
Struts是一种优秀的J2EEMVC架构方式。
它利用taglib获得可重用代码和抽象Java代码,利用ActionServlet配合Struts-config.xml实现对整个系统导航。
增强了开发人员对系统的整体把握,提高了系统的可维护性和可扩充性。
struts理解.docx
使用myeclipse自动生成的配置文件.struts-config.xml中间有两个配置不是很懂,望解答下.
Java代码
1.
2. 3. [color=red]attribute="studentForm"
4. input="/form/student.jsp"[/color]
5. name="studentForm"
6. parameter="method"
7. path="/student"
8. scope="request"
9. type="org.apache.struts.action.StudentAction" />
10.
11.
在一般情况下,actionForm是被存储在一定的scope中(request或session,通过action的scope属性来配置),当我们在配置时,指定name而不指定attribute,那么指定的name值就作为actionForm存储在scope中的key值,我们可以在action中通过httpServletRequest.getAttribute("指定的name属性值")来获得这个actionForm;当我们既配置了name又配置了attribute,那么actionForm存储在scope中的key值就采用attribute属性指定的值了,这时要通过httpServletRequest.getAttribute("指定的attribute属性值")来获得actionForm,此时通过httpServletRequest.getAttribute("指定的name属性值")是不能获得actionForm的。
如果在actionForm里的validate方法效验失败后应该转向原来的输入页面,也就是input里定义的/form/student.jsp页面。
hearken01(高级程序员)2009-12-28
attribute="studentForm" 这个是你action的名字。
input="/form/student.jsp"验证框架如果验证失败所指向的页面路径。
(你这里没有指明验证框架,也就是你的input是无效的)
举例:
你在浏览器里输入类似url:
http:
//localhost:
8080/yourapp/studentForm.do?
method=insertStudent
这个请求会先找你的attribute="studentForm"
然后再看parameter="method"
最后到你写的org.apache.struts.action.StudentAction这个类里找insertStudent()这个方法。
但前提是你的类继承的是DispatchAction。
最后给你一个经典流程:
struts1.x流程:
¤ 客户请求匹配ActionURI样式的路径。
¤ 容器将请求传递给ActionServlet。
¤ 如果这个是模块化应用,ActionServlet选择响应的模块。
¤ ActionServlet查询路径的映射。
¤ 如果映射标明了一个formbean,ActionServlet看是否已经有一个实例,或者创建一个新的实例。
如果已经有一个formbean,ActionServlet重设它,并根据HTTP请求重新组装它。
¤ 如果mapping的validate属性设置为true,它将调用formbean的validate方法。
¤ 如果失败,Servlet将控制转发到input属性标明的路径,控制流终止。
¤ 如果mapping标明一个Action类型,如果它已经存在或已经实例化,它将被重用。
¤ Action的perform或execute方法被调用,并传递一个实例化的formbean(或者null)。
¤ Action可以组装formbean,调用业务对象,以及其他需要做的事情。
¤ Action返回一个ActionForward给ActionServlet。
¤ 如果ActionForward指向另一个ActionURI,重新开始;否则,显示页面或者其他资源,流程结束。
Struts1和Struts2的区别和对比
lovewhzlq(CTO)2009-11-24
关于这个问题,可以直接去官网上看啦,写的很细的,http:
//struts.apache.org/
yayg(中级程序员)2009-11-24
蔡华江(架构师)2009-11-24
学Struts2就是了
fireinjava(中级程序员)2009-11-24
感觉struts1在数据流动上面:
从jsp页面到后台服务器java代码,流动比较明确。
首先jsp页面提交数据,然后将数据添加到actionForm里面,然后由相应的Action获取actionForm里面数据,进行业务逻辑操作,然后再跳转向其他的页面。
而actionForm与Action之间的关系,主要是在struts-config.xml里面体现;页面跳转和action之间的关系也是struts-config.xml里面配置。
而struts-2里面,则直接用struts-2的标签将数据提交到action中,再action里面直接进行页面跳转路径的配置。
TTLtry(初级程序员)2009-11-25
上面的观点主要是自己学习Struts1与struts2两种框架的认识,加上自己的理解和实践
TTLtry(初级程序员)2009-11-25
具体的区别网络上去找就好了 其实我感觉无论学哪个最主要是把原理弄明白了MVC模式的原理相对来说还是比较简单 只要把原理弄通了 才能以不变应万变。
wocsok(资深程序员)2009-11-25
struts1:
开发效率低,维护性高
struts2:
开发效率高,维护性低
大项目还是用struts1,小点的可以用struts2
都是在servlet基础上,出现的框架,如果不喜欢,也可以自己开发一套.
xiaojianhx(初级程序员)2009-11-27
struts1:
开发效率低,维护性高
struts2:
开发效率高,维护性低
大项目还是用struts1,小点的可以用struts2
都是在servlet基础上,出现的框架,如果不喜欢,也可以自己开发一套.
国内项目,一般时间压的仅,就用struts2来提高开发效率,
对日外包项目,日本人比较保守,喜欢用成熟的框架,并且注重维护
xiaojianhx(初级程序员)2009-11-27
本人用过的最主要的不同,就是struts1中的actionForm在2中被简化了,直接封装在了action里,传参数的时候回更简便,这样由webWork演变来的struts在应用的时候更快捷,方便,易于理解
njdtk(初级程序员)2009-11-27
我觉得总要就2点不一样
2里面ACTION写的不用那么规范,配置文件也简单些。
2里面的OGNL不错
configure(初级程序员)2009-11-28
Action类
Stuts1要求Action类继承一个抽象基类。
Struts1的一个普通问题是使用抽象类编程而不是接口。
Struts2Action类可以实现一个Action接口,也可以实现其它接口,使可选和定制的服务成为可能。
Struts2提供一个ActionSupport基类去实现常用的接口。
Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:
Struts1Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。
单例策略限制了Struts1Action能作的事,并且要在开发时特别小心。
Action资源必须是线程安全的或同步的。
Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。
Servlet依赖:
Struts1Action依赖于ServletAPI,因为当一个Action被调用时,HttpServletResquest和HttpServletResponse被传递给execute方法,即Action依赖了容器,测试变得非常麻烦。
Struts2Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2Action仍然可以访问初始的request和response。
但是,其它的元素减少或者消除了直接访问HttpServletRequset和HttpServletResponse的必要性。
捕获输入:
Struts1使用ActionForm对象捕获输入。
所有的ActionForm必须继承一个基类。
因为其它JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。
动态Bean可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述已经存在的JavaBean,仍然会导致有冗余的javabean。
Struts2直接使用Action属性作为输入属性,消除了对第二输入对象的需求。
Action属性能够通过web页面上的taglibs访问。
Struts2也支持ActionForm模式。
(Struts2用普通的POJO来接收数据)
表达式语言:
Struts1整合了JSTL,但对集合和索引属性的支持很弱。
Struts2可以是使用JSTL,但是也支持一个更加强大和灵活的表达式语言—“ObjectGraphNotationLanguage”(OGNL).
绑定值到页面(view):
Struts1使用标准JSP机制把对象绑定到页面中来访问,Struts1要传递值的时候必须往request里放、往session里放,然后再传递到jsp里面,铜鼓el表达式得到。
Struts2使用“ValueStack”技术,使taglib能够访问值而不需要把你的页面和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面。
值栈技术非常著名。
不需要request、不需要session,直接从Action中取值。
类型转换:
Struts1ActionForm属性通常都是String类型。
Struts1使用Commons-Beanutils进行类型转换。
每个类一个转换器,对每一个实例来说是不可配置的。
Struts2使用OGNL进行类型转换。
提供基本和常用对象的转换器。
校验:
Struts1支持在ActionForm的validate方法中手动校验,或者通过CommonsValidator的扩展来校验。
同一个类可以有不同的校验内容,但不能校验子对象。
Struts2支持通过validate方法和Xwork校验框架来进行校验。
Xwork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。
Action执行的控制:
Struts1支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
(服务器重启时,Action生命周期结束,即生命周期无法控制)。
Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。
堆栈能够根据需要和不同的Action一起使用。
(可以控制Action的生命周期)
积分给我吧,我现在太需要了!
空谷悠悠(初级程序员)2009-11-28
以上是我学习时的笔记,应该没有大的纰漏
空谷悠悠(初级程序员)2009-11-28
struts`1.3和struts的低版本在请求处理方式上有了很大的变化。
struts1.3.8中对于请求的处理采用了command链的处理方式,同以往版本的struts在请求处理上有了很了很大不同。
struts2和struts1有了很大的不同,具体介绍可以自己搜素下。
潜心修炼(中级程序员)2009-11-29