仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1080|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页编程之Java 进修杂谈(九):Struts仓酷云

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:36:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-21 10:55:19 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
海妖 该用户已被删除
板凳
发表于 2015-1-24 12:05:15 来自手机 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
再见西城 该用户已被删除
地板
发表于 2015-1-24 15:36:03 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
飘灵儿 该用户已被删除
5#
发表于 2015-1-25 11:34:56 来自手机 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
莫相离 该用户已被删除
6#
发表于 2015-2-2 21:55:18 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
只想知道 该用户已被删除
7#
发表于 2015-2-8 07:59:30 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
老尸 该用户已被删除
8#
发表于 2015-2-24 07:38:43 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
精灵巫婆 该用户已被删除
9#
发表于 2015-3-1 04:38:51 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
谁可相欹 该用户已被删除
10#
发表于 2015-3-1 10:10:16 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
山那边是海 该用户已被删除
11#
发表于 2015-3-4 04:14:29 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
乐观 该用户已被删除
12#
发表于 2015-3-11 16:25:11 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
若相依 该用户已被删除
13#
发表于 2015-3-12 14:31:57 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
活着的死人 该用户已被删除
14#
发表于 2015-3-20 09:46:20 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
爱飞 该用户已被删除
15#
发表于 2015-4-1 15:07:51 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
小妖女 该用户已被删除
16#
发表于 2015-4-3 04:08:40 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
第二个灵魂 该用户已被删除
17#
发表于 2015-4-3 08:44:49 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
不帅 该用户已被删除
18#
发表于 2015-4-5 10:54:06 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
深爱那片海 该用户已被删除
19#
发表于 2015-4-6 09:05:02 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
灵魂腐蚀 该用户已被删除
20#
发表于 2015-4-7 20:43:26 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 16:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表