|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。比来专业工夫笔者一向JavaVirtualMachine的研讨,因为练习分派到项目组内里,不想夙昔那末闲了,十分困难才抽出工夫来持续这个话题的帖子。我盘算把J2ee的部分停止以后,再谈谈JVM和JavaScript,只需笔者有最新的进修条记总结出来,必定会拿来实时和人人分享的。衷心但愿与酷爱Java的关年夜同仁配合前进……
此次筹办持续前次的话题先讲讲Struts-2,部下冗长回忆一段汗青:跟着工夫的推移,Web使用框架常常变更的需求,发生了几个下一代Struts的办理计划。个中的StrutsTi持续保持MVC形式的基本上改善,持续Struts的乐成履历WebWork项目是在2002年3月公布的,它对Struts式框架举行了反动性改善,引进了很多新的头脑,观点和功效,但和原Struts代码其实不兼容。WebWork是一个成熟的框架,经由了好几回严重的改善与公布。在2005年12月,WebWork与StrutsTi决意合拼,再此同时,StrutsTi更名为StrutsActionFramework2.0,成为Struts真实的下一代。
看看Struts-2的处置流程:
1)Browser发生一个哀求并提交框架来处置:依据设置决意利用哪些拦阻器、action类和了局等。
2)哀求经由一系列拦阻器:依据哀求的级别分歧拦阻器做分歧的处置。这和Struts-1的RequestProcessor类很类似。
3)挪用Action:发生一个新的action实例,挪用营业逻辑办法。
4)挪用发生了局:婚配resultclass并挪用发生实例。
5)哀求再次经由一系列拦阻器前往:历程也可设置削减拦阻器数目
6)哀求前往用户:从control前往servlet,天生Html。
这里很分明的一点是不存在FormBean的感化域封装,间接能够从Action中获得数据。这里有一个Strut-2设置的web.xml文件:
<filter>
<filter-name>controller</filter-name>
<filter-class>org.apache.struts.action2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>cotroller</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注重到以往的servlet酿成了filter,ActionServlet酿成了FilterDispatcher,*.do酿成了/*。filter设置界说了称号(供联系关系)和filter的类。filtermapping让URI婚配乐成的的哀求挪用该filter。默许情形下,扩大名为".action"。这个是在default.properties文件里的"struts.action.extension"属性界说的。
default.properties是属性界说文件,经由过程在项目classpath路径中包括一个名为“struts.properties”的文件来设置分歧的属性值。而Struts-2的默许设置文件名为struts.xml。因为1和2的action扩大名分离为.do和.action,以是很便利能共存。我们再来看一个Struts-2的action代码:
publicclassMyAction{
publicStringexecute()throwsException{
//dothework
return"success";
}
}
很分明的区分是不必再承继任何类和接口,前往的只是一个String,无参数。实践上在Struts-2中任何前往String的无参数办法都能够经由过程设置来挪用action。一切的参数从那里来取得呢?谜底就是InversionofControl手艺(把持反转)。笔者只管以最普通的体例来注释,我们先试图让这个Action取得reuqest对象,如许能够提取页面提交的任何参数。那末我们把request设为一个成员变量,然后必要一个对它的set办法。因为年夜部分的action都必要这么做,我们把这个set办法作为接口来完成。
publicinterfaceServletRequestAware{
publicvoidsetServletRequest(HttpServletRequestrequest);
}
publicclassMyActionimplementsServletRequestAware{
privateHttpServletRequestrequest;
publicvoidsetServletRequest(HttpServletRequestrequest){
this.request=request;
}
publicStringexecute()throwsException{
//dotheworkdirectlyusingtherequest
returnAction.SUCCESS;
}
}
那末谁来挪用这个set办法呢?也就是说谁来把持这个action的举动,以往我们都是本人在得当的中央写上一句action.setServletRequest(…),也就是把持权在程序员这边。但是把持反转的头脑是在那里挪用交给正在运转的容器来决意,只需使用Java反射机制来取得Method对象然后挪用它的invoke办法传进参数就可以做到,如许把持权就从程序员这边转移到了容器何处。程序员能够加重良多烦琐的事情更多的存眷营业逻辑。Request能够如许注进到action中,其他任何对象也都能够。为了包管action的成员变量线程平安,Struts-2的action不是单例的,每个新的哀求城市发生一个新的action实例。
那末有人会问,究竟谁来做这个对象的注进事情呢?谜底就是拦阻器。拦阻器又是甚么工具?笔者再来只管普通的注释拦阻器的观点。人人要了解拦阻器的话,起首必定要了解GOF23种计划形式中的Proxy形式。
A对象要挪用f(),它但愿代办署理给B来做,那末B就要取得A对象的援用,然后在B的f()中经由过程A对象援用挪用A对象的f()办法,终极到达A的f()被挪用的目标。有无人会以为如许很贫苦,为何明显只需A.f()就能够完成的必定要封装到B的f()办法中往?有哪些优点呢?
1)这里我们只要一个A,当我们有良多个A的时分,只必要监督B一个对象的f()办法就能够从全局上把持一切被挪用的f()办法。
2)别的,既然代办署理人B能取得A对象的援用,那末B能够决意在真正调A对象的f()办法之前能够做哪些前置事情,调完前往前可有做哪些后置事情。
讲到这里,人人看出来一点拦阻器的观点了么?它拦阻下一调f()办法的哀求,然后一致的做处置(处置每一个的体例还能够分歧,剖析A对象就能够分辨),处置终了再放行。如许像不像对活动的河水横切了一刀,对一切想经由过程的水份子举行搜身,然后再放行?这也就是AOP(AspectofProgramming面向切面编程)的头脑。
Anyway,Struts-2只是使用了AOP和IoC手艺来加重action和框架的耦合干系,力争到最年夜水平重用action的目标。在如许的手艺促动下,Struts-2的action成了一个复杂被框架利用的POJO(PlainOldJavaObject)而已。实事上AOP和IoC的头脑已遍及新出来的每个框架上,他们并非何等新的手艺,使用的也都是JDK早已能够最到的事变,它们代表的是加倍面向接口编程,进步重用,增添扩大性的一种头脑。Struts-2只是部分的利用这两种头脑来计划完成的,别的一个比来很火的框架Spring,更年夜水平上代表了这两种计划头脑,笔者将于下一篇来进一步切磋Spring的布局。
PS:关于Struts-2笔者也没真正怎样用过,这里是看了网上一些先辈的帖子以后写下本人的进修体验,不敷的地方请包涵!
来自:http://topic.csdn.net/u/20070924/21/18482496-082f-4907-8751-b80ab5d56622.html?seed=1386683868
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的 |
|