仓酷云
标题:
JAVA教程之Struts功课引导手册
[打印本页]
作者:
莫相离
时间:
2015-1-18 11:49
标题:
JAVA教程之Struts功课引导手册
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,
JunsanJin
日期:2005-4-4
版本:1.0
信箱:junsan21@126.com;junnef21@sohu.com
声明:自己保存本文的一切权力。
第一部分:简介
Struts入手下手于2000年3月,是接纳JavaServlet/JavaServerPages手艺,开辟Web使用程序的开放源码的框架。
接纳Struts能开辟出基于MVC(Model-View-Controller)计划形式的JavaWeb前端使用。一般MVC计划形式把一个体系分别为互相合作的三个部分:
1、Model(模子),模子用于封装体系的形态,好比营业数据;
2、View(视图),视图是模子的暗示,供应用户交互界面。当模子形态产生变更时,视图应当失掉关照,以便更新模子的变更;
3、Controller(把持器),承受来自视图的哀求,修正模子的形态。
Struts使用有3个次要部件:一个是利用Servlet完成的中央把持器(ControllerServlet,由Struts供应的org.apache.action.ActionServlet类完成)及卖力详细营业逻辑处置的Action(org.apache.action.Action的子类);一个是用于显现的JSP页面(viewer);另外一个是用于封装体系形态的营业逻辑元件(Model)。Struts的中央把持器承受一切来自客户真个哀求,并依据体系的设置(struts-config.xml)路由HTTP哀求到别的Action对象(开辟者完成的org.apache.struts.action.Action的子类)。在这些Action对象中会完成一切的营业操纵,好比拔出一条定单、修正一笔记录等。处置终了,由Struts的ControllerServlet依据设置转向到得当的JSP页面,将处置了局显现给用户。从这里能够看出,在Struts中ControllerServlet担当了主要的脚色,它把持一切的程序流转,使MVC三个绝对自力的部分和谐事情,从而使体系的功效加倍完美。
第二部分:体系情况及安装版本1、体系情况
操纵体系:WindowsXPSP1
WEB服务器:TOMCAT5.0.14
2、Struts版本
本文利用jakarta-struts-20031118版本(从属1.1版本系列),下载地点:
http://jakarta.apache.org/builds/jakarta-struts/release/
我们失掉安装包jakarta-struts-20031118.zip。
第三部分:安拆卸置Struts1、安装Struts
解紧缩jakarta-struts-20031118.zip包到E:mylibjakarta-struts中。个中包括有lib和webapps两个子目次。lib子目次中是利用Struts必要的Jar文件、标签库界说文件(.tld),和对一个StrutsWeb使用的web.xml和struts-config.xml设置文件的DTD界说(.dtd)。webapps子目次中包括了几个Struts的示例使用,都已打包为.war格局,这里次要先容个中三个:
1.struts-example.war,一个接纳Struts框架的复杂的示例程序Controller;
2.struts-documentation.war,Struts文档的war包;
3.struts-blank.war,一个空缺的Struts的使用,能够便利地修正,而且设置本人的使用。
我们假如要创建新的使用,就利用第三个作为基础框架就好了。
2、运转struts-example.war
把struts-example.war拷进Tomcat下的webapps目次。然后启动Tomcat,Tomcat在启动时就会主动解压war包了(假如没有主动解压,观察你的tomcat服务器是不是配制成了间接运转war文档的形式),在扫瞄器中输出http://localhost:8080/struts-example,假如能看到以下图所示页面,就申明已运转乐成。
在上图中你能够点击“RegisterwiththeMailReaderDemonstrationApplication”注册一个MailReader用户,或间接点击“LogontotheMailReaderDemonstrationApplication”,输出用户名和暗码(示例程序已预置了一个用户user/pass,设置在struts-example下的WEB-INFdatabase.xml文件中)登进。
3、对例程的剖析(1)web.xml剖析
在上图所示的页面中,点击“LogontotheMailReaderDemonstrationApplication”链接,进进/logon.jsp页面,输出预界说的用户名为user、暗码为pass,然后提交就进进了下图所示的用户主页面。
注重,这里的URL的后缀是.do。那末它有甚么意义?服务器又是如何处置如许的哀求呢?看看{TOMCAT}WEB-INFweb.xml文件,就会十分分明。在web.xml中,能够找到以下设置片段:
<!--ActionServletMapping-->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
从下面设置代码中能够晓得,以.do开头的哀求URL是由一个名为action的Servlet处置,实践上能够为使用取另外一个后缀,只需修正这里就好了。
再看上面的一段设置择要:
<!--ActionServletConfiguration-->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>application</param-name>
<param-value>
org.apache.struts.webapp.example.ApplicationResources
</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
……
<load-on-startup>2</load-on-startup>
</servlet>
由上可见,action对应的类是org.apache.struts.action.ActionServlet。这是一个Struts供应的处于中央把持位置的Servlet,即ControllerServlet,恰是用它监听一切的来自于用户的以.do为后缀的哀求。在下面的设置中,为ActionServlet设置了一个名为config的初始化参数,值为/WEB-INF/struts-config.xml。struts-config.xml是一个基于Struts使用的最主要的设置文件,个中包括了一切的Action哀求(指以.do开头的哀求)、响应的Action处置类、FormBean,和页面的转向等信息的设置。struts-config.xml在使用启动时读进,然后依据这些设置举行呼应。上面以示例程序中的LogonAction的设置为例,对struts-config.xml举行剖析。
(2)Struts-config.xml剖析
上面是struts-config.xml中对LogonAction举行设置的部分代码:
<action
path="/logon"
type="org.apache.struts.webapp.example.LogonAction"
name="logonForm"
scope="request"
input="/logon.jsp">
</action>
从下面能够看出,MailReader使用中对应/logon.do的哀求是由org.apache.struts.webapp.example.LogonAction类举行处置的,name属性指定的是这个哀求对应的表单所对应的模子组件。
logonForm也是在struts-config.xml中设置的,上面是其设置的部分代码:
<form-beanname="logonForm"
type="org.apache.struts.validator.DynaValidatorForm">
</form-bean>
LogonForm类是一个一般的JavaBean,个中界说了几个属性及属性的读写办法,并且这些属性的名字要和页面表单中的输出域对应。好比LogonForm中界说了两个属性,代码以下:
privateStringusername=null;
privateStringpassword=null;
这两个属性分离对应于logon.jsp表单中的两个输出域,代码以下:
<html:formaction="/logon"focus="username">
<html:textproperty="username"/>
<html:passwordproperty="password"redisplay="false"/>
</html:form>
这里要注重一点,LogonForm中的属性名必定要和logon.jsp中的表单域名完整对应起来。Struts就是由此从扫瞄器端抓取提交的数据,并添补到LogonForm对象中,再传送给LogonAction类举行处置的。Struts完成的表单考证和重填手艺也是如许完成的。在下面的页面代码中我们利用了Struts的HTML定制标签库,这些标签都界说在Struts的标签库中,成心研讨的能够看一下,不外倡议人人最好罕用,由于这些标签撑持的Javascript事务很少,并且得到了主动回填的撑持,以是,仍是本人做扩大标签对照好。还能够间接利用相似<inputtype="text"name="username"/>的HTML代码,往Struts的标签库中找吧。
(3)Action剖析
下面我们已对Struts前端使用框架的全体布局、数据流转有了必定的熟悉。也晓得了Struts是如何从设置文件中猎取设置信息的,即先启动,然后守候哀求,再夙昔台抓取数据,依据设置信息挪用(或天生)Action类举行处置,最初依据处置的了局转向到对应的页面呼应用户。那末,如今就让我们看看LogonAction是如何举行营业处置,并将处置了局显现给用户的。次要代码以下:
packageorg.apache.struts.webapp.example;
importorg.apache.struts.action.Action;
......
publicfinalclassLogonActionextendsAction{
publicActionForwardperform(ActionMappingmapping,
ActionFormform,
HttpServletRequestrequest,
HttpServletResponseresponse)
throwsIOException,ServletException{
......
ActionErrorserrors=newActionErrors();
Stringusername=((LogonForm)form).getUsername();
Stringpassword=((LogonForm)form).getPassword();
......
//举行用户考证
//假如不存在此用户,或暗码毛病,则将毛病增加到errors中
if(!errors.empty()){
saveErrors(request,errors);
return(newActionForward(mapping.getInput()));
}
HttpSessionsession=request.getSession();
session.setAttribute(Constants.USER_KEY,user);
//删除过时的formbean
......
if(mapping.getAttribute()!=null){
if("request".equals(mapping.getScope()))
request.removeAttribute(mapping.getAttribute());
else
session.removeAttribute(mapping.getAttribute());
}
//定位到乐成页面
return(mapping.findForward("success"));
}
}
}
LogonAction类承继于org.apache.struts.action.Action,Action类是一切的Action的基类。个中界说的perform()办法完成对哀求处置,并依据处置了局转向到分歧的页面,然后显现给用户。Action类并非Servlet,它不间接监听来自客户真个哀求。下面所提到的中央把持器ActionServlet是一个Servlet,客户端收回的Action哀求,由ActionServlet吸收,依据struts-config.xml中的设置,传进对应的mapping、form、request、response对象,并挪用对应的Action类的perform()办法举行处置(在第一次挪用时,实例化一个Action,随后的哀求将间接挪用已存在的Action类举行处置,以是Action类是共享的,编程中须注重处置并提问题)。上面对上述的LogonAction的perform()办法举行复杂的剖析。
1.起首从传进的form对象中猎取username和password。我们大概会奇异这两个属性是在甚么时分置进的?这是ActionServlet在挪用LogonAction的perform()办法之前依据struts-config.xml中的设置及对应的LogonForm中的属性夙昔端哀求抓取数据,置进LogonForm对象的。然落后行用户考证。本例没有利用数据库举行存储,用户信息是存储在database.xml文件中的。假如username/password在database.xml文件不存在或暗码毛病,则天生一个ActionError对象,将毛病信息存储到该对象中,并把这个对象增加到ActionErrors中,别的产生的毛病也相似处置。在随后的程序中,起首校检是不是有毛病产生,假如有毛病产生,就把毛病对象存储到request中,利用的办法为saveErrors(request,errors)。该办法是在基类org.apache.struts.action.Action中完成的,它完成的功效很复杂,将errors对象经由过程setAttribute()办法存储到request中便可。完成以下:
protectedvoidsaveErrors(HttpServletRequestrequest,ActionErrorserrors){
//删撤除不必要的毛病信息
if((errors==null)||errors.empty()){
request.removeAttribute(ERROR_KEY);
return;
}
//保留我们必要的毛病对象
request.setAttribute(ERROR_KEY,errors);
}
假如产生毛病,将重定向到输出页面,同时主动完成输出域的重填,代码以下:
return(newActionForward(mapping.getInput()));
假如在上岸页面输出user/abc将提醒下面的毛病,那末本来输出的username域就会主动添补出去了,在一个有大批输出域的表单会年夜小气便用户。
2.在下面的程序实行经由过程后,就申明这是一个正当上岸。我们要做的就是把以后用户保留到session中,同时扫除已有效的FormBean,最初转向到success页面,代码为:
return(mapping.findForward("success"));
一个ActionMapping对象对应于struts-config.xml中的一个<action/>的设置。假如你很仔细的话,大概已发明了,在struts-config.xml及第例的/logonAction的设置中,并没有Forward设置,但在它的入手下手部分却有一个全局的Forward设置。设置代码以下:
<global-forwards>
<forwardname="logoff"path="/logoff.do"/>
<forwardname="logon"path="/logon.jsp"/>
<forwardname="success"path="/mainMenu.jsp"/>
</global-forwards>
这个Forward设置将对一切的Action都无效。但假如中已有和这些全局Forward设置同名的项,那末它将掩盖全局设置。以是你登录乐成后,将转向到/mainMenu.jsp页面。固然,假如你想界说只对一个action起感化的forward,那末就把他们放到<action/>中往吧。
第四部分:空模板的利用
在struts的webapps目次下包括有struts-blank.war包,这个是struts的一个空缺框架。我们能够间接利用WinRAR等工具将struts-blank.war包解开,大概是放到tomcat5.0.14的webapps下,启动tomcat,让tomcat将包解开,然后删失落struts-blank.war就能够了。
该目次下有三个文件夹和一个jsp文件,上面的事情就复杂了。META-INF我们能够不予剖析,在不触及到初级组件手艺大概要打成ear或是jar包公布的话,这个文件夹是过剩的,由于在打war包时,打包器会弄定统统的;而page文件夹下能够安排一切的jsp文件,依照项目必要构造目次就好了;而WEB-INF下放甚么,不必说也晓得了,可是为了今后项目保护的便利,你必要构造好类包的布局,Struts的设置文件仍是struts-conf.xml,而项目发生的java文件最好放到src文件夹下,如许的话就能够利用ant来编译了,也就是说,你的开辟工具只必要一个文本编纂器就能够了,编译事情能够交给ant了,它会帮你完成统统的。利用ant编译后在classes下存有编译好的类文件,固然,它也同时天生了组件包,你能够选择部署一个;至于index.jsp文件则完整能够被项目标主页面取代。
OK,Struts的设置就这么复杂,下面讲的已充足一个项目标利用了。固然,Struts另有更多初级的使用,这些能够往看struts的匡助文档,就是谁人struts-documentation.war,部署到tomcat上就能够扫瞄了。
备注:本文档为初稿,假如有甚么增补或发明甚么毛病,请实时接洽,以便增补或改正。
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.
作者:
海妖
时间:
2015-1-21 15:49
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
蒙在股里
时间:
2015-1-25 13:59
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者:
分手快乐
时间:
2015-1-26 20:10
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
冷月葬花魂
时间:
2015-1-31 08:05
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者:
爱飞
时间:
2015-2-1 17:27
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
柔情似水
时间:
2015-2-6 02:04
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者:
活着的死人
时间:
2015-2-6 10:39
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者:
飘飘悠悠
时间:
2015-2-15 23:39
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者:
再见西城
时间:
2015-3-4 18:40
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
不帅
时间:
2015-3-6 16:34
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者:
admin
时间:
2015-3-13 04:09
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者:
精灵巫婆
时间:
2015-3-20 12:22
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者:
莫相离
时间:
2015-3-25 12:14
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
乐观
时间:
2015-4-16 01:10
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者:
小女巫
时间:
2015-5-4 19:16
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
愤怒的大鸟
时间:
2015-6-12 10:36
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
深爱那片海
时间:
2015-6-23 19:39
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者:
仓酷云
时间:
2015-6-29 21:34
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者:
再现理想
时间:
2015-6-30 06:25
是一种使网页(Web Page)产生生动活泼画面的语言
作者:
谁可相欹
时间:
2015-7-7 07:49
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2