|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于这些智能化家电的市场需求没有预期的高,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++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. |
|