版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JSP程序设计从到精第1篇Struts基础第1章Struts概 JSPFramework-Struts介 Struts的体系结 Struts1.0学习文 JSP流行模板Struts的安装配 Struts用户指 你的第一个struts应用程 第2章深入Struts结 人介绍应用框架mvc和 Struts原理、开发及项目实 使用STRUST控制 讨论STRUTS的优缺 Struts经 用strtus制作登陆页面 第3章Struts基础学 Struts标记 Struts框架基础 Struts-configxml配置文件讲解3.4struts中文问题","struts问题"??终极解决方 为Web服务构建Struts应用程 Struts标记库是如何工作 struts简单例子的分析(含代码注释和配置文件说明 本章小 第4章配置STRUTS组 Web应用部署描述 STRUTS配置文 ANT的构建文 struts中的日 运用你的 第5章理解 ActionForm的生命周 ActionForm的作 ActionForm的实 组装 Struts的动态表单的应 第2篇struts的执 第6章理解 ActionForward的最佳实 第7章设计 定义ActionMap属 第8章设计、使用 理解 Action的实 Struts中的Action类的工作机制 Struts中不同的Action和ActionForm组 第9章Struts内置机 Struts内置类 Struts内置类 Struts令牌机制,防止重复提 StrutsAction单态陷阱,请谨慎使用全局变 Struts异常处 第10章struts中使用 struts程序尝 Java对i18n的支 struts框架中对的支 第11章Validator验证框 安装和配置Validator验证框 Validator框架和Struts客户化在Validator框架中使用 在struts中用validator作服务器端验 第12章StrutsHTML Struts中基本的HTMLStruts中表单处理的HTMLStruts中复选框和单选框的HTMLStruts下JSP页面传递复选框值技 Struts中下拉和选取/选项列表的HTMLStruts中html:errors的HTMLStruts中使用<htmlfile>上传文 第13章StrutsBean 如何获得Servlet上下文的有关内 如何获得Java资 如何获得Bean属 使用StrutsBean保存与传输数据小实 第14章StrutsLogic 如何使用Logic进行基于值的条件显 如何使用Logic进行字符串匹 如何使用Logic来检测值是否存 如何使用Logic来迭 如何使用Logic标记来转移控 o.jsp中使用StrutsLogic 第15章Tiles struts中使用tiles组 Tiles使用第3篇案例精 第16章Struts分页显 建立并配置struts-configxml和webxml文 第17章文章管理系 系统概 数据连 文章管理系统设 文章管理系统操作模 文章管理系统的测试与发 文章管理系统测试案 本章小 JSPJSP的运行系统,基本概念,语范及其相关内容,从基本的JSP概述、与其他技术的对比,到JSP的运行系统JSP开发的一本很易上手的工具书。备络的知识,进行网络开发或者建立自己的个人站点。Web。这是一个交互的概念,一般把提出请求的一方称为客就引出了我们所说的页的概念。Web空间中,有几十万乃至上百万的站点相互之间正在进行着激烈的竞争,他们想尽一切办法来吸户的注意力。简单的、静态的页面对用户不会有太大的。只有动乐于的界面。当然,数据的自动更新也非常的重要。你可能会说,这怎么听起来像是在在,我们可以在Web页面中创建应用程序、数据库,这样它无论在感觉上、操作中还Windows目前的客户员工以及其他人中的任何一个并实施一些的服务类的商业活动JavaBeanWebDB2Sybase也览器在Internet上腾飞的网景公司,现在也已推出自己的WebServer及完整的Web开在这种情况下,SUN公司也不甘,在它的倡导下,许多公司共同参与建立了一种新的页技术标准一一JavaServerPages。SUN应用Java社团性过程开发JSP技术。JSP规范的过程中,SUNWeb服务器、Web应用服务器和JSP的产品,SUN授MacromediaAPacheNetscape及其他人。最近,SUN将版本的JSP和JavaServlet(JSP1.1,JavaServlet2.2)的源代码给Apache,以求JSP与Apache紧密结合、共同发展。Apache,SUN和许多其他的公司及个人公开成立了一个健壮的以便任何公司和个人都能免费取得信息。这样,SUN公司就在这个领域中稳稳地站住了脚跟。JavaServerPagesWeb技术,目前在国内还没有受到它应有的重视。起步。这种状况,给我国的Web发展创造了一个不可多得的机遇。我们可以借此机会JSP技术为非专业人员开发高水平的提供了良好的工具但是应该通过什么途径来JSP技术方面的知识写成本书,与大家,使得的人加入到我们的行列。本书在编写过程中,汲取了很多中关于JSP技术的精华并加以综合,形成了一个较完了JSP的运行系统,基本概念,语范及其相关内容,并提供了大量的应用实例。8JSPJSP的运行系统和模式,逐步深入地对JSP语范进行了详细的讲解,并结合应用实例加以巩固。1Struts基础理想介绍,它首先介绍了创建代码块,比如JSP语法、元素、隐含对象和标记库。随JSP环境安装配置进行讲解,JSPJsp程序JSPWEB开发时基本操作,最后通过一个小实例,对本章所学进行巩1StrutsFramework的概念和体系简介Struts的概念和体系结构Struts的工作原理和组件Struts配置文件简介StrutsStruts1、Framework2、Struts3、StrutsJSPFrameworkStruts一直以来我们都说Struts是一个WebFramework。那么让我么先来看看什么是Framework。Framework的体系提供了一套明确机制,从而让开发人员很容易的扩展和FrameworkFramework的结构中都有一个“命令和控制”组件("commandandcontrolcomponent)——FrameworkFactoryandManager控制器(Controller)——Framework中各个组件的协调工作业务逻辑层(BusinessLogic)——对Framwork本身来说,这里仅仅只是概念和几个提够服Framework上再次数据逻辑层(DataLogic)——绝大应用系统都需要涉及到数据交互,这一层次主要包括了Struts是采用JavaServlet/JavaServerPages技术,开发WebframeworkStrutsMVC(Model-View-Controller)设计模式的应用构架。Struts有如下的主要功能:包含一个controllerservletActionJSPtagcontrollerservlet中提供关联支持,帮助开发员创建交互式表单应提供了一系列实用对象:XMLJavareflectionAPIsJavaBeans属性、Struts是Jakarta项目的一部分,主页在Version0.5的地址1、模型modelVB,DelphiRADC#,Java有时候也会出现把业MVCWebMVC却是步履维艰。主又被倒了过来,改成将语言书写的程序嵌入在HTML内容中。这两种方式有一个相同MVCJ2EEJSPModel2问世时才得JSPServletJavaBean技JSPModel1JSPModelSUNJSPModel1和Model2Model2在一定程MVC,但是它的应用用并不尽如人意JSPModelJSPModelmodel2Controller,并且对页面导航model2CraigR.McClanahan20005WEBframeworkJavaCommunity.Struts.20017月,Struts1.0ApacheJakarta的子项StrutsModel2MVC架构。它只有一个中心控制器,XMLURLAction来处理逻辑Struts仅仅是一些标记库的组合。但Struts也包含了丰富的标记库和独立于该框架工作的实用Struts有其自己的控制器(Controller(ViewEJB,JDBCObjectRelationBridge。在视图层,Struts能够与JSP,VelocityTemtes,XSL等等这些表示层组件想结合。StrutsWebAppJ2EEArchitecture,strutsjsp/servletwebcontainerStruts是Apache软件基金会旗下Jakarta项目组的一部分,其敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义和信息资源(messageresources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。strutsframeworkMVC(ArchitectureStrutsModel-View-Controllerwebbeanbean有两种用法:Webbeanbeanbean中每个段的名称必须相同。StudentView.jsp:Student.javaStrutsframeworkControllerActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMap、ActionForward这几个组件协调完成(也许这几个组件,应该划分到模型中的业务逻辑一块。其中,Action而ActionMap和ActionForward则指定了不同业务逻辑或流程的运行方向。StudentAction.java:View基本上,strutsframework的运行的类、组件都在这个包中,比如基本上,strutsframework的运行的类、组件都在这个包中,比如StrtutswebapplicationConnectionPoolMessageSource。详细信息请参考这不是一个包,而是是一个客户类的集合。下面包括BeanTags,HTMLLogicTags,NestedTags,TemteTags这几个用于构建用户界面的类的验证。详细信息请参阅StrutsStrutsStrutsMVC模式紧密相关:可分为以MVC模式紧密相关:模型(Model)StrutsModelAction类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)Action的转发过struts-config.xml文件描述的配置信息的。一堆用来做XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在应用中的用户提示信息的(这息都一般在服务器启动时通过web.xml文件读入的。我们可以在web.xml定义多个释,很好懂的,在后面讨论Action的时候,主要分析.apache.struts.action.ActionServletServlet的两个参数:debugleveldetail2,此外还设置了在启动载入时创建两设置所有后缀为.action<servlet-map<servlet-name>OreillyActionServlet</servlet- 设置Struts的JSP页面要用到的库和她们的路Controller是这个框架中扮演“交通”的角色,当客户端与服务器有交互动作时,都由她来控制。ControllerHTTP请求封包并转发到框架中相应的对象,这些对象可能是JSPAction。Controllerweb.xmlorg.apache.struts.action.ActionServlet的一个实例,在本制动作向对应的配置信息,这个我们会在后面详细讨论,Controller通过这些配置信息来决HTTPAction在接收到转发来的请求后,实现真正的商业逻Model就是在对用户请求的整个控制过程中,真正处理用户请求并保存处理结果JavaBean来把一些信息保存起来以便在各个对象之Action对象了。对用户提交表单的数据进行校验,甚至对数据进行预处View对象。struts-config.xmlstruts-config.xml配置文件是整个框架的主心骨。web.xml文件定义了struts-config.xml管理控制了。可以说struts-config.xml就是整个Struts框架的“扛把子”(译注3),只有这位“”清楚所有请如今的应用系统,XML形式的配置文件越来越多,如果整个系统只使用一个这样的配置文件的话,那么保持整个系统的模块化和可性都非常的轻松。使用配置文件来描述请求-struts-config.xml文件,文件中定义了一个与登录请求对应的登录动作,请求Action对象将请求转发到<?xmlversion="1.0"encoding="UTF-8"<!DOCTYPEstruts-config"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.0//EN"Action<action-map<action>type-Actionname-ActionActionFormpath-Actionunknown–如果将该属性设置为true,那么就是这个Action将处理整个应用中所有未true了validate-如果本属性为true则在Action动作之前其对应的ActionForm的validate方自<!--~~~~~~~~~~~~~~~~~~~~~--<!--O'ReillyMainActions--<!--~~~~~~~~~~~~~~~~~~~~~--<actionpath="/Login"<forwardname="success"path="/Dis<forwardname="failure"</action-mapViewJSP页面。StrutsJSP的要求规通过定义方式的JSP页面能够将用户通过表单输入的数据存入一个JavaBean中,也就ActionFormbeanAction类调用(自动或手动)ActionForm的校验方Struts框架提供了若干个库它们有各自不同的用途由于这些库还可以脱离框架单独使用,这样我们也可以在其他系统中尝试使用这些库,它们包括struts-html-这个库用来创建动态的HTML页面和表单struts-bean-提供了类似甚至更强于<jsp:useBean>struts-logic-struts-temte-用于产生有共同风格的动态JSP页面模板Struts 一个Struts架包把Struts.jarCopy到$ mon/lib或你使用Struts的Appaction下的WEB-INF/lib下,在你使用Struts的Appaction下web.xml中增加下列配置:<!--NestedTagLibraryDescriptor--<!--TemteTagLibraryDescriptor--ActionServlet也差不多,是为了加载一些库,方便重用显示的组件。JDK5.0安装程序地址 同意协议后,可以jdk-1_5_0_05-windows-i586-p.exetomcat5.5.9地址这里5.5.9exe。SysdeoEclipseTomcatLauncherplugin3.1beta版地址 /eclipse/tomcatplugin这里tomcatPluginV31beta.zipeclipse3.1安装程序接,后将对应的文件分别拷贝进eclipse安装下的对应的文件夹即可。这里我们下eclipse-SDK-3.1-win32.zip。StrutsIDE1.1.7安装程序地址:这里我StrutsIDE解压缩tk.eclipse.plugin.struts_1.1.7.zip包,然后将plugins 拷贝至D:\eclipse 覆盖原文件夹即可。好了,到此StrutsIDE插件安装完成。JDK装下的binpathJRE的librt.jarclasspathJDKC:\ProgramFiles\Java\jdk1.5.0_02JDK安装配置的文章。tomcat只需要双击tomcat安装包的exe文件,按照提示安装即可,这里我们的安装Eclipse只需要把eclipse-SDK-3.1-win32.zip安装包解压,然后把里面的eclipse文件夹剪切至想放置的 即可,这里我们把eclipse安装到了D:\eclipse 下。在安装 下双击eclipse.exe文件,即可启动eclipse。中间会询问默认的工作 ,这里设置为E:\workspace 。请选中Usethisasthedefaultanddonotaskagain选项,这样以后启动就不会再询问了。到此eclipse安装成功。tomcatPlugin安装很简单,解压我们已经的安装包tomcatPluginV31beta.zip,将解压后的com.sysdeo.eclipse.tomcat_3.1.0.betaD:\eclipse\plugins下即可。我们关掉已经打开的eclipse,重新打开,OK,现在我们会发现上多了几个雄猫的图标,就是tomcattomcatversion5.x版本,然后设定tomcathomeD:\Tomcat5.5,ContextsdirectoryD:\Tomcat5.5\conf\Catalina\localhost。到tomcatplugin设置完毕。SysdeoTomcatPlugintomcat工程File->new->others,打开新建向导框,在树中找到java->tomcatprojects,选中,点nextprojectsname中输入textwebUsedefaultnext。在下一个testweb,创建完成。strutsFile->new->others,打开新建向导框,找到Amas->Struts->AddStrutsSupport,Struts框架。在WEB-INF文件夹下可以找到,菜单中选择openwith->AmasXMLEditer里有一个比较方便的struts-config.xml文件的编辑器,后面开发一个简单的小程序。File->new->others,打开新建向导框,找到Amas->JSPFile,点击next按钮FileNameindex.jspFinishindex.jsp文件进行编辑,内容如下<%@pagecharset=gb2312"%><formname="form1"method="post"<tablewidth="300" cellspacing="0"<tr<tdcolspan="2">用户登录信息<inputname="username"type="text"id="username"<td>用户<inputname="password"type="text"id="password"<tr<tdcolspan="2"><inputtype="submit"name="Submit"form打开File->new->package框,name中输入com.is.form,点击Finish按钮。在右边的Package Explorer树中找到刚才创建的包com.is.form包菜单中的new->others,找到Ama s->struts->StrutsActionForm,点击next,在框中name栏输入LoginForm,点击Finish按钮。LoginForm类的源程序如下:packagecom.is.form;importorg.apache.struts.action.ActionForm;publicclassLoginFormextends{privatestaticfinallongserialVersionUID=1L;privateStringusername="";privateStringpassword=*@returnReturnsthepublicString{return}*@parampasswordThepasswordtopublicvoidsetPassword(String{this.password=}*@returnReturnsthepublicString{return}*@paramusernameTheusernametopublicvoidsetUsername(String{this.username=}}jspform中的两个输入控件的名称,为什么这eclipse的使用有很多的文档。actionformcom.is.action包,同样的过程,打开新建StrutsActionLoginAction.java类,均选默认值。LoginAction的源程序如下packageimportjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.Action;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapimportpublicclassLoginActionextends{privatestaticfinallongserialVersionUID=publicActionForwardexecute(ActionMapmap,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{//thislineishereforwhentheinputpageisupload-utf8.jsp,//itsetsthecorrectcharacterencodingfortheresponseStringencoding=if((encoding!=null)&&{}else}tryif(forminstanceof{LoginFormtheForm=(LoginForm)if(theForm.getUsername().equals("user")&&{returnnew }elsereturnnew }}}catch(Exception{}//thisshouldn'thappeninthisexamplereturnnull;}}ActionForwardstrutsstruts-blank.war中的做法进行转向,可以比较一下会有收获的。同创建index.jsp页面相同,我们创 下<%@pagepageEncoding="GBK"contentType="text/html;charset=GBK"<metahttp-equiv="Content-Type"Stringtyperequest.getParameter("type");}out.print("对不起,你输入的用户名或者错误}Struts-config.xml添加formbean的配置,在和之间加入<form-beanname="loginForm"添加jsp文件的映射,在和之间加入<actionpath="/index"<action e" 添加action文件的映射,在和之间加入<path="/logincheck"type="com.is.action.LoginAction"name="loginForm"scope="request"struts-config.xml大致如下形式<action-map<actionpath="/index"<action e" <actionpath="/logincheck"type="com.is.action.LoginAction"name="loginForm"scope="request"validate="true"/></action-map<controllerprocessorClass=<message-resources<plug-in<set-propertyproperty="definitions-config"value="/WEB-INF/tiles-<plug-in运试程testweb工程根 将工程部署进tomcat,成功后会提示操作成功。tomcatIEindex.jsp你的第一个strutsStruts的一些基本知识。StrutsMVCModel2架构。下面我们来运行第一个Struts应用程序(oWorld),来让你快速。JakartaStruts
在应 (2)Struts的JAR文件到<CATALINA_HOME>/webapps/MyStruts/WEB-INF/lib目录下,jar文件列表如下:<?xmlversion="1.0"encoding="ISO-8859-<!DOCTYPEweb-PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication 创建一个strut-config.xml文件,到 下。struts-config.xml是Struts应用的部署描述文件。它用来把MVC组件组合在一起。它通常被放置在<CATALINA_HOME>/webapps/webappname/WEB-INF/ 会频繁的使用到它。空的struts-config.xml如下:<?xmlversion="1.0"encoding="ISO-8859-1"<!DOCTYPEstruts-config"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.1//EN"Strutsstruts组件。定义并创建实现某能的相关视图,它们是应用中的用户接口。在struts-config.xmlstrutsActionForm就是我们要创建的视图。struts-config.xmweb.xmlstruts上述步骤只是对Struts开发做了概要描述在接下来的章节会对这些步骤进行比struts应用的视图时(MVCV层),我们会先创建一个包含Struts的JSP文件。个库上,但这章我们在视图中主要关注于HTML库。在开始我们的应用时,我们首先要需要描述视图接口。在下面的应用中有两个视图:query.jspresult.jsp。(1)queryquery视图有query.jsp文件来表现,是我们第一个看到的视图。它用来查询学生和提交Action中。query.jsp源文件如下:<%@pagelanguage="java"<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"<title>MyStrutsStruts<tableborder="0"cellspacing="0"<td>&<tr<tdheight="68"<div<imgsrc="images/hp_logo_MyStruts.gif"width="220"<td>&<html:formaction="search.do"name="searchForm"type="MyStruts.SearchForm"<tablewidth="45%"<td><html:textproperty="symbol"<tdcolspan="2"align="center"><html:submit如你看到的query视图,除了form外,它就象一个包含数据集合的HTML页面。在HTML页面中我们把FORM改为用Struts<html:form/>来替换。ActionForm用来保存视图中表单输入参数的实际数值(MVC模式的C层)。如我们面章节提到的,当一个<html:form/>被提交,Struts框架把对应的数量必须遵守JavaBean名规则。举例如下:privateStringpublicvoidsetSymbol(Stringsymbol);publicStringgetSymbol();symbol。在获取或设置成员变量的数值时必须带有前缀set和getset和get3-2是ActionFormpackageimportjavax.servlet.http.HttpServletRequest;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionMap;publicclassSearchFormextendsActionForm{privateStringsymbol=null;publicStringgetSymbol(){return(symbol);}publicvoidsetSymbol(Stringsymbol){this.symbol=symbol;}publicvoidreset(ActionMapmap,HttpServletRequestrequest){this.symbol=}}ActionFormget,setActionFormbeanSearchForm的成员变量,以便下一个应用使用。注意:reset()方法ActionMap类来被。关于ActionMap类我们暂时可以忽略,编译SearchForm类,移到<CATALINA_HOME>/webapps/MyStruts/WEB-INF/classes/MyStruts<CATALINA_HOME>/webapps/MyStruts/WEB-INF/struts-config.xml文件中添加<form-beanname="searchForm"type="MyStruts.SearchForm"/>Struts应用知道SearchForm如何被。resultstrutsJSP页面。result.jsp<title>MyStrutsStruts<tablewidth="500"border="0"cellspacing="0"<td>&<tr<tdheight="68"<div<imgsrc="images/hp_logo_MyStruts.gif"width="220"<td>&<td>&<td>&:<%=request.getAttribute("name")%><td>&JSPHttpServletRequest获取特定的学生的。这个数据通过Action对象中的HttpServletRequest实例来设置。Struts应用中,控制器由两个组件组成(MVC模式的M层)。这两Strutsorg.apache.struts.action.ActionServlet实现(实例,但存在多个例如我们寻找指定的学生的。我们会创建一个从org.apache.struts.action.Action扩展packageimportimportjavax.servlet.ServletException;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.Action;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMap;publicclassSearchActionextendsAction{protectedStringgetName(Stringsymbol){if(symbol.equalsIgnoreCase("S0001")){return“SUN”;}return}publicActionForwardexecute(ActionMapmap,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{ name=//DefaulttargettoStringtarget=newString("success");if(form!=null){//UsetheSearchFormtogettherequestparametersSearchFormsearchForm=(SearchForm)form;Stringsymbol=searchForm.getSymbol();name=getName}//Setthetargettofailureif(name==null){target=new}elserequest.setAttribute("name",}//ForwardtotheappropriateViewreturn(map.findForward(target));}}我们注意到SearchAction类有两个方法:getName()andexecute()。getName()方返“S0001ActionClassViewJSP文件可以通过它们取回所对应的对象(<%=")%>类中必须被实现。((struts-config.xmlweb.xml明Web应用所使用的Struts库本例中使用了三个库:StrutsBeanStrutsHTML和StrutsLogic库。web.xml的源代码。<?xmlversion="1.0"encoding="UTF-<!DOCTYPEweb-app PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.2//EN" <!--StandardActionServlet <!--StandardActionServletMap--<servlet-map</servlet-map<!--The eFileList-- e- <!--StrutsTagLibraryDescriptors--Struts正如前面提及的,StrutsStruts框struts-config.xml可以把这些组件组装起来,决定如何使用它们。下面这个实struts-config.xml文件的源代码。<?xmlversion="1.0"encoding="ISO-8859-1"<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration
"ThisistheStrutsconfigurationfileforthe o!"sample<!--========FormBeanDefinitions===================================<form-beanname="SearchForm"type="MyStruts.SearchForm<!--==========ActionMapDefinitions==============================--<!-- o!-- = ="MyStruts.SearchAction" ="SearchForm" ="request" ="true" =><forwardname="success"path="/result.jsp"<forwardname="failure"path="/query.jsp"<!--==========MessageResourcesDefinitions===========================--<message-resourcesparameter="MyStrutsSearchFormSearchAction<form-beanname="searchForm"type="MyStruts.SearchFormAction = ="MyStruts.SearchAction" ="SearchForm" ="request" ="true" =><forwardname="success"path="/result.jsp"<forwardname="failure"path="/query.jsp"<action>元素的path属性指定请求Action的路径typeActionnameActionActionFormBean。scopeActionFormBean的存放范围。validateinput<action>SearchActionMyStruts.SearchAction,请求路径为"search",当Action类被调用时,Struts框架应该把已经包含表单数据的SearchFormBean传给它。SearchFormBeanrequestAction类之query.jsp,struts-config.xml文件最后通过元素定义了一个ResourceBundle:<message-resources parameter属性为"MyStruts.application",表明消息资源文件名为"perties",WEB-INF/classes/MyStruts/perties。MyStruts工程根 将工程部署进tomcat,成功后会提示操作成功。点击菜单栏中的雄猫图标启动tomcat,然后在IE地址栏中输入MyStrutssearch.doquery.jsp的页面内容,录入学号,会显示不同的结果。运行正式开发前,需要在Tocmat(我的tomcat装在c:\tomcat)中建立此项目。比较快的一种建立方式为在C:\tomcat\webapps下新建 test,再将C:\tomcat\webapps\struts-example下的WEB-INF 拷贝到test 下,然后将test\WEB-INF下的src和classes 以及struts-config.xml文件中内容清空即可。这样,我们需要的Struts类包及相关的配置文开发时,将JSP文件放在test 下,Java原文件放在test\WEB-INF\src下,编译后的类文件放在test\WEB-INF\classes下。<%@pagecontentType="text/html;charset=UTF-8"<%@tagliburi="/WEB-INF/Struts-bean.tld"<%@tagliburi="/WEB-INF/Struts-html.tld"<html:html<body<html:formaction="/regUserAction"<tableborder="0"<thalign="right"><td<html:textproperty="logname"size="20"<thalign="right"><td<html:passwordproperty="password"size="20"<thalign="right"><td<html:password "size="30"<td<html:submitproperty="submit"<tdStruts<form-beanname="regUserForm"type="org.c.Struts.example.RegUserForm<action-map<actionpath="/regUserAction"type="org.c.Struts.example.RegUserAction"attribute="regUserForm"scope="request"validate="false"><forwardname="failure"path="/<forwardname="success"path="/Struts的是Controller,即ActionServlet,而ActionServlet的就是Struts-config.xml,Struts-config.xmlWEB项目,通过此Struts-config.xmlStruts的关键所在。packageorg.c.Struts.example;importjavax.Servlet.http.HttpServletRequest;importorg.apache.Struts.action.ActionForm;importorg.apache.Struts.action.ActionMap;publicfinalclassRegUserFormextendsActionForm{privateStringlogname;privateStringpassword;privateString;publicRegUserForm(){logname=null;password=null;=null;}publicStringgetLogName(){returnthis.logname;}publicvoidsetLogName(Stringlogname){this.logname=logname;}publicvoidsetPassWord(Stringpassword)this.password=}publicStringgetPassWord(){returnthis.password;}publicvoidset ){ }publicStringget (){returnthis. }publicvoidreset(ActionMapmap,HttpServletRequest{logname=null;password=null;=}}FormBeanActionForm类,FormBean是对页面请求的封装。即把HTTPrequest封装在一个对象中,需要说明的一点就是多个HTTPrequest可以共用一个FormBean,便于和重用。packageorg.c.Struts.example;importjavax.Servlet.http.*;importorg.apache.Struts.action.*;publicfinalclassRegUserActionextends{publicActionForwardperform(ActionMapmap,ActionFormform,HttpServletRequestreq,HttpServletResponseres){Stringtitle=Stringpassword=req.getParameter("password");String=req.getParameter("");取得用户请求,}}FormBeanActionBeanActionBeanServlet实现Controller的功能,JavaBeanModelStrutsServletActionServlet、FormBean、ActionBean三ActionServletStruts-config.xml,专职完成页面导航,而不再负责具体的数据获取与相应逻辑,这两部分功能由FormBeanActionBean来完成。Struts优缺点StrutsTomcat、TurbineApache项目一样,是开源软件,这是它的一大优点。JSPStruts是一个很好的起点。Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有Struts。2Struts在章中,本文主要讲解应用框架,Struts原理、开发及项目实施,Struts的优缺点。文章的包括了如下:MVC和Model2Struts原理、开发及项目实施Struts的优缺点Struts经1、Framework2、Struts3、StrutsmvcMVC式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可Model11mode11JSPJSPJSPModel1感觉,使得程序的修改与变得异常;还有一个问题就是程序逻辑开发与页面设计纠GradyBoochUML人住宅、和的形象比喻来说明人们处理不同规模的事物时应该采用的合理方法一样,人Model1Model22它引入了\"控制器\"servlet来担任,客户端的请求不再直接送了一个进行前-后端处理的中枢。一方面为输入数据的验证、认证、日志及实现JSPModel,Control模式。实践证明,MVC模式为大型程序的开发及提供了巨大的便利其实,MVC开始并不是为Web应用程序模式,传统的MVC要求M将其状态WebMVCMVC2MVC是一种模式,当然可以有各种不同的具体实现,包括您自己就可以实现一现MVC思想的程序框架,StrutsMVC2的程序框架。它的大致结构如图三所示(view控制层(controller)、和模型层(Model)。其表示层使用Struts库构建。来自客户的所有需ActionServletservlet接收(ActionServletStruts已经为我们写数和Struts配置(struts-config.xml)中ActionMap,将请求送给合适的Action去处理,解StrutsActionStruts应用中真正干活的组件,一所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。过程如图四所示:Action分离出来后有利于它的重用,Action类完成,但具体一个(orderBo)Model来完成。orderBo可能用一个返回整型值的名submitOrder的方法来做这件事,Action则是先校验定单数据是否正确,以免常说的进出;如果正确则简单地调用orderBo的submitOrder方法来得到定单号;它还要处理StrutsStruts的、Struts最早是作为ApacheJakarta项目的组成部分问世运做。项目的创立者希望通过对该项目的研究,改进和提高JavaServerPages(JSPs)、Servlet库以及面向对象的技术水准。当前最高版本为Struts1.0.2,可以到 、Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架。它的目的是为了帮助你减少MVCWeb应用的时间。你仍然需要学习和应用该架构,不过它将ServletsJSP的优点来建立可扩展的应用,Struts是一个不错的选择。StrutsMVCModel-View-Controller的缩写,是一种常用的设计模式。MVC减弱了业务逻MVC的工作原理,如下图1所示:StrutsMVC的一种实现,它将Servlet和JSP标记(属于J2EE规范)用作实现的一部分。StrutsMVCJ2EEStruts是一组相互协作的类、servletJSPMVC2设StrutsStruts也包含了丰富的标记库和独立于该框架工作的实用程序类。图5显示了Struts的一个概览。5.StrutsStruts(1)browser(客户浏览器来自客户浏览器的每个HTTP请求创建一个。Web容器将用一个HTTP响应作出响控制器接收来自浏览器的请求,并决定将这个请求发往何处。就Strutsservlet实现的一个命令设计模式。struts-config.xml文件配置控制器。业务逻辑更新模型的状态,并帮助控制应用程序的流程。就Struts际业务逻辑“瘦”Action模型表示应用程序的状态。业务对象更新应用程序的状态。ActionFormbean在会话级或请求级表示模型的状态,而不是在持久级。JSP文件使用JSP标记来自ActionFormbeanJSP--只有标记。标记是使Struts有别于其他框架(如Velocity)的因一。6org.apache.struts.actionUML6ActionServlet(Controller)、ActionForm(FormState)和Action(ModelWrapper)之间的最简关系。6.Command(ActionServlet)Model(Action&ActionForm)UMLActionServlet经是用C语言进行结构化编程的很好方法。现在好多了,我们有了Java技术、XML、J2EE,等等。Struts的控制器是将(通HTTPpost)servlet--控制器使用配置文件以使您不必ActionServlet是该MVC实现的Command部分,它是这一框架的。ActionServlet(Command)ActionActionFormActionForwardstruts-config.xmlCommandWebActionActionForm来解决特定的问题。文件struts-config.xmlActionServlet如何使用这些扩展的类。这种方法有几应用程序的整个逻辑流程都在一个分层的文本文件中。这使得人们更容易查看和理解JavaJava开发人员也不必在更改流程以后重新编译代码。ActionServletCommand功能。ActionForm类ActionFormWeb应用程序的会话状态。ActionForm是一个抽象类,必须为每个输,ActionFormHTML表单设置或更新的一般意义上的数据。例如,您可能有一个由HTML表单设置的UserActionForm。Struts框架将执行以下操作:UserActionFormStrutsHttpServletRequestUserActionForm的状态。没有太多讨厌request.getParameter()调用。例如,Struts框架将从请求流中提取fname,并调用StrutsUserActionFormUserActionAction类之前,StrutsUserActionFormvalidation()方法进行表地方,验证可能有所不同。在UserAction类中进行状态验证可能更好。可在会话级UserActionForm。struts-config.xmlHTMLActionForm之间的映射关系。可将多个请求映射到UserActionForm。UserActionFormActionAction类是业务逻辑的一个包装。Action类的用途是将HttpServletRequest转换为业务逻辑。要使用Action,请创建它的子类并覆盖process()方法。ActionServlet(Command)perform()ActionForm。仍然没有太多讨厌的request.getParameter()调用当进展到这一步时输入表单数(或HTML表单数据)已被从请求流中提取出来并转移到ActionForm类中。Action类时请注意简洁。Action类应该控制应用程序的流程,而不应该控制应用EJB中,我们就可以提供更大的灵活性和可考虑Action类的另式是Adapter设计模式。Action的用途是“将类的接口转换为客户机所需的另一个接口。AdapterAdapter,则这些类会因为不兼容的接口而无法协同工作。”(GofDesignPatterns-ElementsofReusableSoftwareStruts业务接口保持兼容(Action是类而不是接口。Action)ErrorUML图(图6)还包括ActionError和ActionErrors。ActionError封装了单个错误消息。ActionErrors是ActionError类的容器,View可以使用标记这些类。ActionError是Struts保持错误列表的方式。7.Command(ActionServlet)Model(Action)UMLActionMap输入事件通常是在HTTP请求表单中发生的,servlet容器将HTTP请求转换为HttpServletRequest。控制器查看输入并将请求分派给某个Action类。struts-config.xml确定Controller调用哪个Action类。struts-config.xml配置信息被转换为一组ActionMap,而后者又被放入ActionMaps容器中(您可能尚未注意到这一点,以s结尾的类就是容器)ActionMap包含有关特定如何映射到特定Action的信息ActionServlet(Command)通过perform()方法将ActionMap传递给Action类。这样就使Action可用于控ActionMapActionMaps是ActionMap对象的一个集合:Struts的是ActionSevlet,ActionSevlet的是Struts-config.xml。这在后面还会STRUSTSTRUTSStruts经Strutscontroller1.Http2.把这个请求映射到一个定义好的业3.4.StrutsControllerActionServlet中,ActionServlet调到用户请求对应的Action,调用相应的Action来具体执行用户的请求,最后返回StrutsController中最主要的部分,所有用户请求都会被发送到这里,所有的其它处理也必须从这里经过。ActionServletHttpServletActionServlet接收到voidprocess(HttpServletRequestrequest,HttpServletResponseresponse)throws getApplicationConfig(request).getProcessor().processrequest,response);}一般情况下,我们不ActionServlet类,仅仅使用就可以了。某些情况下,我们可以自己扩ActionServletActionServletMyActionServlet类。覆盖其中的一些方法来达到你的特殊处理的需要。ActionServlet继承自javax.servlet.http.HttpServlet,所以servletservlet来看待,只是RequestProssorrequest,requesthandlerrequestRequestProcessor类中的process(execute)processLocaleprocessLocale()方法。然后只需要在配置文件中加入段就可以了Action类是实现整系的部分它在客户请求界面表示和业务逻辑之间起到一个桥梁的作用每一个ActionLogonAction、查找SearchAction等等。ActionRequestProcessorprocessActionPerform方法调用ActionModel层的JavaBean来实现你的业务逻辑操作。在某些情况下,可能包含少许表现逻辑。这样,就IStorefrontService接口,这个接口在实现时完全会变得非常难于理解难于代码也不能重用。struts-example工程的设计就是一个bug,Action===================Actionexecute方法中,ActionForward类。ActionForwardforward部分的信息包装起来,减少了应用程序和物理资源信息之间的耦合性。通过ActionMap类,可以在配置文件中查forwardLoginAction,它的配置信息可能是这样的:返回的ActionForward就会包含段中的信息。在ActionMap类的findForward方法中,首先会forwardnameforward段,如果没有,则在配置文件中的段中=====================以前,页面上的输HTTPrequest提交,服务方检索出输入的数据,进行验证,然后将这些数据传变得复杂。ActionForm[org.apache.struts.action.ActionForm]用来收集用户的输入,并且把这ActionAction对象中,ActionForm中的数据被取出来传递给业务逻辑层进行处理。ActionForm一方面作为一个缓冲区,临时用户输入的数据;另一方面,可以把ActionForm当成是HTTP和Action之间的一个,它可以验证输入数requestActionActionForm可以有两种Scoperequest或者sessionrequest就是只能在rquest到responseActionForm就不可见了;session可以保存时间长一点。==================在ActionForm的ValidateActionErrors对象。这个对象可以将错误信息都封装起来,并且自JSPActionErrors中的错误信息显示出来。包括,每一个具体的,通过add添加的错误信息,和一个ErrorHeader和一个ErrorFooterHTML语法。包含在bean和bean属性时使用的tag,也包含一些消息显示的tag。html:struts-htmltag信息。temte:struts-temtetaglib包含的tag用来定义模板机制。2.6strtus一个用户系统,用户通过网页输入相关信息:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沈阳理工大学《产品创新设计》2021-2022学年第一学期期末试卷
- 合同到期了单位不续签通知模板
- 2024年拉萨驾驶员客运资格证模拟考试题及答案详解
- 2024简单版机动车借款抵押合同
- 2024服装制作合同
- 2024防水材料采购合同
- 2024深圳建设工程技术咨询合同样本
- 2024光伏发电安装合同范本光伏发电安装合同范本
- 2024教师聘用合同
- 2024幼儿园装修改造工程施工合同
- 幼儿园绘本故事:《老虎拔牙》 课件
- 2021年上半年《系统集成项目管理工程师》真题
- 一个冬天的童话 遇罗锦
- GB/T 706-2008热轧型钢
- 实验六 双子叶植物茎的初生结构和单子叶植物茎的结构
- GB/T 25032-2010生活垃圾焚烧炉渣集料
- GB/T 13610-2020天然气的组成分析气相色谱法
- 《彩虹》教案 省赛一等奖
- 2023年湖南建筑工程初中级职称考试基础知识
- 沈阳机场航站楼扩建工程安装施工组织设计
- 司法考试:证据法
评论
0/150
提交评论