|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,net网页编程beans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。J2ee的开源框架良多,笔者只能先容本人熟习的几个,其他的今朝在中国IT行业使用得不是良多。但愿人人对新出的框架不要自觉的推许,起首必定要熟习它比旧的究竟幸亏那里,新的理念和特征是甚么?然后再决意是不是要利用它。
这期的主题是Struts,直译过去是支架。Struts的第一个版本是在2001年5月公布的,它供应了一个Web使用的办理计划,怎样让Jsp和servlet共存往供应明晰的分别视图和营业使用逻辑的架构。在Struts之前,一般的做法是在Jsp中到场营业逻辑,大概在Servlet中天生视图转发到前台往。Struts带着MVC的新理念事先加入几近成为业界公认的Web使用尺度,因而今世IT市场上也呈现了浩瀚熟习Struts的程序员。即便有新的框架再出来不必,而持续用Struts的来由也加上了一条低风险,由于半途假如开辟职员变化,很简单的招进新的会Struts的IT平易近工啊,^_^!
笔者之前说的都是Struts-1,由于新出了Struts-2,使得每次谈到Struts都必需说明它是Struts-1仍是2。笔者先谈对照熟习的Struts-1,下次再先容一下与Struts-2的区分:
1.Struts框架全体布局
Struts-1的中心功效是前端把持器,程序员必要存眷的是后端把持器。前端把持器是是一个Servlet,在Web.xml两头设置一切Request都必需经由前端把持器,它的名字是ActionServlet,由框架来完成和办理。一切的视图和营业逻辑断绝都是应为这个ActionServlet,它就像一个交通差人,一切过往的车辆必需经由它的高眼,然后被送往特定的通道。一切,对它的了解就是分发器,我们也能够叫做Dispatcher,实在懂得Servlet编程的人本人也能够写一个分发器,加上拦阻request的Filter,实在本人完成一个struts框架并非很坚苦。次要目标就是让编写视图的和背景逻辑的能够离开紧耦合,各自同步的完成本人的事情。
那末有了ActionServlet在两头卖力转发,前真个视图好比说是Jsp,只必要把一切的数据Submit,这些数据就会抵达合适处置它的后端把持器Action,然后在内里举行处置,处置终了以后转发到前台的统一个大概分歧的视图Jsp两头,前往前台使用的也是Servlet内里的forward和redirect两种体例。以是到今朝为止,统统都只是借用了Servlet的API搭建起了一个便利的框架罢了。这也是Struts最明显的特征——把持器。
那末别的一个特征,能够说也是Struts-1带来的一个对照乐成的理念,就是以xml设置取代硬编码设置信息。以往决意Jsp往哪一个servlet提交,是要写进Jsp代码中的,也就是说一旦这个提交路径要改,我们必需改写代码再从头编译。而Struts提出来的思绪是,编码的只是一个逻辑名字,它对应哪一个class文件写进了xml设置文件中,这个设置文件纪录着一切的映照干系,一旦必要改动路径,改动xml文件比改动代码要简单很多。这个理念能够说相称乐成,乃至于厥后的框架都持续着这个思绪,xml所起的感化也愈来愈年夜。
大抵下去说Struts现在给我们带来的奇怪感就这么多了,其他的一切特征都是基于便利的把持转发和可扩大的xml设置的基本之下去完成它们的功效的。
上面将分离先容Action和FormBean,这两个是Struts中最中心的两个组件。
2.后端把持器Action
Action就是我们说的后端把持器,它必需承继自一个Action父类,Struts计划了良多种Action,比方DispatchAction、DynaValidationAction。它们都有一个处置营业逻辑的办法execute(),传进的request,response,formBean和actionMapping四个对象,前往actionForward对象。抵达Action之前先会经由一个RequestProcessor来初始化设置文件的映照干系,这里必要人人注重几点:
1)为了确保线程平安,在一个使用的性命周期中,Struts框架只会为每一个Action类创立一个Action实例,一切的客户哀求共享统一个Action实例,而且一切线程能够同时实行它的execute()办法。以是当你承继父类Action,并增加了private成员变量的时分,请记着这个变量能够被多个线程会见,它的同步必需由程序员卖力。(一切我们不保举如许做)。在利用Action的时分,包管线程平安的主要准绳是在Action类中仅仅利用部分变量,审慎的利用实例变量。部分变量是对每一个线程来讲公有的,execute办法停止就被烧毁,而实例变量相称于被一切线程共享。
2)当ActionServlet实例吸收到Http哀求后,在doGet()大概doPost()办法中城市挪用process()办法来处置哀求。RequestProcessor类包括一个HashMap,作为寄存一切Action实例的缓存,每一个Action实例在缓存中寄存的属性key为Action类名。在RequestProcessor类的processActionCreate()办法中,起首反省在HashMap中是不是存在Action实例。创立Action实例的代码位于同步代码块中,以包管只要一个线程创立Action实例。一旦线程创立了Action实例并把它寄存到HashMap中,今后一切的线程会间接利用这个缓存中的实例。
3)<action>元素的<roles>属性指定会见这个Action用户必需具有的平安脚色,多个脚色之间逗号离隔。RequestProcessor类在预处置哀求时会挪用本身的processRoles()办法,反省设置文件中是不是为Action设置了平安脚色,假如有,就挪用HttpServletRequest的isUserInRole()办法来判别用户是不是具有了需要的平安性脚色,假如不具有,就间接向客户端前往毛病。(前往的视图经由过程<input>属性来指定)
3.数据传输对象FormBean
Struts并没有把模子层的营业对象间接传送到视图层,而是接纳DTO(DataTransferObject)来传输数据,如许能够削减传输数据的冗余,进步传输效力;另有助于完成各层之间的自力,使每一个层合作明白。Struts的DTO就是ActionForm,即formBean。因为模子层应当和Web使用层坚持自力。因为ActionForm类中利用了ServletAPI,因而不倡始把ActionForm传送给模子层,而应当在把持层把ActionFormBean的数据从头组装到自界说的DTO中,再把它传送给模子层。它只要两个scope,分离是session和request。(默许是session)一个ActionForm尺度的性命周期是:
1)把持器收到哀求->
2)从request或session中掏出ActionForm实例,如不存在就创立一个->
3)挪用ActionForm的reset()办法->
4)把实例放进session大概request中->
5)将用户输出表达数据组装到ActionForm中->
6)如眼张办法设置了就挪用validate()办法->
7)如考证毛病就转发给<input>属性指定的中央,不然挪用execute()办法
validate()办法挪用必需满意两个前提:
1)ActionForm设置了Action映照并且name属性婚配
2)<aciton>元素的validate属性为true
假如ActionForm在request局限内,那末关于每一个新的哀求城市创立新的ActionForm实例,属性被初始化为默许值,那末reset()办法就显得没有需要;但假如ActionForm在session局限内,统一个ActionForm实例会被多个哀求共享,reset()办法在这类情形下极其有效。
4.考证框架和国际化
Struts有很多本人的特征,可是基础上人人仍是不太经常使用,说白了它们也是基于JDK两头的良多Java基本包来完成事情。比方国际化、考证框架、插件自扩大功效、与其他框架的集成、由于各年夜框架基础都有供应如许的特征,Struts也并非做得最好的一个,这里也不想多说。Struts的考证框架,是经由过程一个validator.xml的设置文件读进考证划定规矩,然后在validation-rules.xml内里找到考证完成经由过程主动为Jsp拔出Javascript来完成,能够说做得相称大略。弹出来的JavaScript框不仅丢脸还良多冗余信息,笔者宁肯用formBean考证大概Action的saveErrors(),考证逻辑固然要本人写,但页面埋没/出现的告诫提醒加倍人道化和美妙一些。
至于Struts的国际化,实在不管哪一个框架的国际化,java.util.Locale类是最主要的JavaI18N类。在Java言语中,几近一切的对国际化和当地化的撑持都依附于这个类。假如Java类库中的某个类在运转的时分必要依据Locale对象来调剂其功效,那末就称这个类是当地敏感的(Locale-Sensitive),比方java.text.DateFormat类就是,依附于特定Locale。
创立Locale对象的时分,必要明白的指定其言语和国度的代码,言语代码服从的是ISO-639标准,国度代码服从ISO-3166标准,能够从
http://www.unicode.org/unicode/onlinedat/languages.html
http://www.unicode.org/unicode/onlinedat/countries.htm
Struts的国际化是基于properties的message/key对应来完成的,笔者曾写过一个程序,一切Jsp页面上没有任何Text文本串,全体都用的是<bean:message>往Properties文件内里读,这个时分实在只需指定分歧的言语地区读分歧的Properties文件就完成了国际化。必要注重的是分歧言语的字符写进Properties文件的时分必要转化成Unicode码,JDK已带有转换的功效。JDK的bin目次中有native2ascii这个命令,能够完成对*.txt和*.properties的Unicode码转换。
OK,明天就说到这里,本文中的良多内容也不是笔者的手笔,是笔者一起进修过去本人抄上去的条记,但愿对人人有匡助!Java杂谈一起走来,感激人人延续的存眷,也许再有个2到3篇续篇就改结束了!笔者尽快收拾完成后续的写作吧……^_^
来自:http://topic.csdn.net/u/20070924/21/18482496-082f-4907-8751-b80ab5d56622.html?seed=1386683868
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解 |
|