Struts介绍.doc_第1页
Struts介绍.doc_第2页
Struts介绍.doc_第3页
Struts介绍.doc_第4页
Struts介绍.doc_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts Framework介绍Struts Framework介绍目录前 言3一、MVC概述41MVC概念42MVC设计模式43MVC的优点4二、Struts概述51Struts概念52Struts的MVC实现机制53Struts的配置文件struts-config.xml74Struts的工作流程7三、Struts应用的配置81配置web.xml8(1).配置Struts的ActionServlet8(2).声明ActionServlet的初始化参数9(3).配置Struts标签库92配置struts-config.xml10(1).元素10(2).元素10(3).元素12(4).元素12(5).元素13(6).元素14(7).元素16(8).元素17(9).元素183配置多应用模块19四、Struts组件201. ActionServlet类202. Action类203. Struts的内置Action类20(1). org.apache.struts.actions.ForwardAction类21(2). org.apache.struts.actions.IncludeAction类21(3). org.apache.struts.actions.DispatchAction类22(4). org.apache.struts.actions.LookupDispatchAction类24(5). org.apache.struts.actions.SwitchAction类264. ActionForward类275. ActionForm类27五、Struts标签库291Struts HTML标签库29(1).标签29(2).和标签30(3).标签32(4).标签32(5).标签33(6).标签34(7).标签34(8).标签35(9).标签35(10).标签36(11).标签36(12).标签37(13).标签38(14).标签38(15).标签39(16).标签40(17).标签40(18).标签41(19).标签432Struts Bean标签库44(1).标签44(2).标签45(3).标签463Struts Logic标签库46(1).进行比较运算的Logic标签47(2).进行字符串匹配的Logic标签48(3).判断指定内容是否存在的Logic标签48(4).进行循环遍历的Logic标签49(5).进行请求转发或重定向的Logic标签53六、有关Struts中的其他常用功能531.利用Token解决重复提交532Struts应用的国际化553Validator验证框架62前 言Struts是Apache软件组织提供的一项开放源代码项目,它为Java Web应用提供了模型-视图-控制器(Model-View-Controller,MVC)框架,尤其适用于开发大型可扩展的Web应用。Struts为Web应用提供了一个通用的框架,使得开发人员可以把精力集中在如何解决实际的业务问题上,而非繁杂的代码本身。此外,Struts框架还提供了许多可供扩展和定制的地方,使得应用程序可以方便地扩展框架,来更好地适应用户的实际需求。虽然学习Struts需要一定的时间和精力,但一旦掌握了它,就可以大大简化Web应用的开发过程,提高开发效率,缩短开发周期,从而达到事半功倍的效果。一、 MVC概述1MVC概念MVC是Model-View-Controller的简称,即模型-视图-控制器。MVC是在20世纪80年代发明的一种软件设计模式,至今已被广泛使用,受到了越来越多的Web开发者的欢迎。2MVC设计模式MVC是一种设计模式,它强制性地把应用程序的输入、处理和输出分开。MVC把应用程序分成三个核心模块:模型、视图和控制器,它们分别担负不同的任务。a.模型模型是应用程序的主体部分,表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。b.视图视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。c.控制器控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的提交按钮来发送HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后再调用相应的视图来显示模型返回的数据。所以MVC的整个处理过程就是:首先控制器接收用户的请求,并决定应该调用哪个模型进行处理;然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。3MVC的优点首先,多个视图能共享一个模型。如今,同一个Web应用程序会提供多种用户界面,例如用户希望既能通过浏览器来收发电子邮件,还希望通过手机也能访问,这就要求Web网站同时提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。其次,模型是自包含的,与控制器和视图保持相对独立,所以可以方便地改变程序的数据层和业务规则。如果把数据库从MySQL移植到Oracle,只需改变模型即可。一旦正确地实现了模型,不管数据源的类型是什么,视图都会正确地显示它们。由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松耦合的构件。此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的模型和视图去完成用户的需求,也可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的视图将处理结果显示给用户。二、 Struts概述1Struts概念对于开发Web应用,要从头设计并开发出个一个可靠、稳定的框架并不是一件容易的事。幸运的是,随着Web开发技术的日趋成熟,在Web开发领域出现了一些现成的优秀的框架,开发者可以直接使用它们,而Struts就是其中之一,并且是基于MVC的Web应用框架。2Struts的MVC实现机制Struts实际上就是一个基于MVC模式的Web应用框架。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action来实现,视图则由一组JSP文件构成。下图显示了Struts实现的MVC框架。浏览器Web服务器(控制器)ActionServlet(视图)JSP Action Action Action模型JavaBeanEJBstruts-config.xmlServlet/JSP容器a. 模型模型表示应用程序的状态和业务逻辑。对于大型应用,业务逻辑通常由JavaBean或EJB组件来实现。b. 视图视图就是一组JSP文件。在这些JSP文件中没有业务逻辑,也没有模型信息,只有标签,这些标签可以是标准的JSP标签,也可以是Struts标签。此处,通常把Struts框架中的ActionForm Bean也划分到视图模块中。ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。Struts框架利用ActionForm Bean来进行视图和控制器之间表单数据的传递。Struts框架把用户输入的表单数据保存在ActionForm Bean中,把它传递给控制器,控制器可以对ActionForm Bean中的数据进行修改,JSP文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。c. 控制器控制器由ActionServlet类和Action类来实现。ActionServlet类是Struts框架中的核心组件。它在MVC模型中扮演中央控制器的角色。ActionServlet主要负责接收HTTP请求信息,根据配置文件struts-config.xml的配置信息,把请求转发给适当的Action对象。Action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程。对于小型简单的应用,Action类本身也可以完成一些实际的业务逻辑。对于大型应用,Action充当用户请求为业务逻辑处理之间的适配器,其功能就是将请求与业务逻辑分开,Action根据用户请求调用相关的业务逻辑组件。Action类侧重于控制应用程序的流程,而不是实现应用程序的逻辑。将业务逻辑独立出来,可以提高应用程序的灵活性和可重用性。当ActionServlet控制器收到用户请求后,把请求转发到一个Action实例。如果这个实例不存在,控制器会首先创建它,然后调用这个Action实例的execute()方法。Action的execute()方法返回ActionForward对象,它封装了把用户请求再转发给其他Web组件的信息。用户定义自己的Action类,即Action基类的子类时,必须覆盖execute()方法。在Action基类中该方法返回null。3Struts的配置文件struts-config.xml上面讲到一个用户请求是通过ActionServlet来处理和转发的。那么,ActionServlet如何决定把用户请求发给哪个Action对象呢?这就需要一些描述用户请求路径和Action映射关系的配置信息了。在Struts中,这些配置映射信息都存储在特定的XML文件struts-config.xml中。在该配置文件中,每一个Action的映射信息都通过一个元素来配置。这些配置信息在系统启动的时候被读入内存,供Struts在运行期间使用。在内存中,每一个元素都对应一个org.apache.struts.action.ActionMapping类的实例。4Struts的工作流程对于采用Struts框架的Web应用,在Web应用启动时就会加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放在各种配置对象中,例如Action的映射信息存放在ActionMapping对象中。当ActionServlet接收到一个客户请求时,将执行如下流程:(1).检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。(2).如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。(3).根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。(4).如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。反之,如果返回一个包含一个或多个ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给要显示错误信息的JSP组件。在这种情况下,不会再做以下(5) (7)的流程。(5).ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。(6).Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。(7).ActionForward对象指向的JSP组件生成动态网页,返回给客户。三、 Struts应用的配置Struts应用的配置基于web.xml和struts-config.xml两个配置文件。web.xml的配置适用于所有的Java Web应用,它是Web应用的发布描述文件,对于Struts应用,在web.xml文件中除了配置Java Web应用的常规信息处,还应该配置和Struts相关的特殊信息。struts-config.xml文件是Struts应用专有的配置文件,事实上,也可以根据需要给这个配置文件改成其它的文件名。1配置web.xml当配置Struts应用时,除了配置一般的Web应用所需的信息以外,还应该配置和Struts相关的配置选项。(1).配置Struts的ActionServlet要在web.xml中配置ActionServlet,首先要用元素声明ActionServlet。如下所示: actionorg.apache.struts.action.ActionServlet 其中,元素用来定义Servlet的名称,元素用来指定Servlet的完整类名。在Struts中,为org.apache.struts.action.ActionServlet或扩展它的子类。然后,为ActionServlet配置元素,它用来指定ActionServlet可以处理哪些URL。如下所示: actionorg.apache.struts.action.ActionServlet action *.do这里应该注意的是,元素中的子元素必须和元素中子元素匹配。以上代码的为“*.do”,表明ActionServlet负责处理所有以“.do”扩展名结尾的URL。比如,用户请求的URL为http:/localhost:8080/sample/login.do。(2).声明ActionServlet的初始化参数初始化参数用来对Servlet运行时进行初始化配置。的子元素用于配置Servlet初始化参数。 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml action *.do子元素用于声明Servlet初始化参数,其格式以“参数名/参数值”的形式成对出现。比如,以上代码为ActionServlet配置了初始化参数config,config参数是配置Struts的ActionServlet专有的,它用来设置Struts配置文件的相对路径。(3).配置Struts标签库Struts框架提供了一些实用的客户化标签库。如果要在应用中使用这些标签库,那么就需要在web.xml中配置它们,配置元素为。 /WEB-INF/struts-bean.tld /WEB-INF/struts-bean.tld /WEB-INF/struts-html.tld /WEB-INF/struts-html.tld /WEB-INF/struts-logic.tld /WEB-INF/struts-logic.tld 有两个子元素:和。元素指定标签库的相对或者绝对URI地址,Web应用将根据这一URI来访问标签库;元素指定标签库描述文件在文件资源系统中的物理位置。如果Web应用中没有使用Struts标签库,就没有必要在web.xml文件中配置它。此外,也可以按以上方式在web.xml中配置用户自定义的客户化标签库。2配置struts-config.xmlStruts框架在系统启动时,会根据web.xml的配置,读入其配置文件,并创建和配置各种Struts组件。Struts配置文件使得开发者可以灵活地组装和配置各个组件,避免了硬编码,从而提高了应用软件的可扩展性和灵活性。Struts配置文件是基于XML格式的。(1).元素元素是Struts配置文件的根元素,它有8个子元素,分别为、。在Struts配置文件中,必须按照如上的先后顺序来配置元素的各个子元素,如果颠倒了这些子元素在配置文件中的顺序,在系统启动时会发生XML解析错误。但若不需要某些元素,可以省略不写,但一旦写了,就必须按照它规定的顺序进行配置。(2).元素元素用来配置应用所需要的数据源。数据源负责建立和特定数据库的连接,许多数据源采用连接池机制实现,以便提高数据库访问性能。元素包含0个、1个或多个子元素。元素用于配置特定的数据源,它可以包含多个子元素。元素用于设置数据源的各种属性。以上代码使用元素配置了和MySQL数据库的连接。元素的type属性用来指定数据源的实现类。以上代码用的是Apache软件组织提供的DBCP数据源。开发者应该根据实际应用的需要来选用合适的数据源实现。Java语言提供了javax.sql.DataSource接口,所有的数据源必须实现该接口。配置了数据源后,就可以在Action类中访问数据源。在Action基类中定义了getDataSource(HttpRequest)方法,它用于获取数据源对象的引用。javax.sql.DataSource dataSource;java.sql.Connection myConnection;dataSource = getDataSource(request);myConnection = dataSource.getConnection();也可以在配置文件中声明多个数据源,此时需要为每一个数据源分配唯一的key值,通过该值来标识特定的数据源。比如:在Action类中通过以下方式访问特定的数据源:dataSourceA = getDataSource(request, A);dataSourceA = getDataSource(request, B);(3).元素元素用来配置多个ActionForm Bean。元素包含0个或多个子元素。每个元素又包含多个属性。如下表所示:属性描述className指定和元素对应的配置类,默认值为org.apache.struts.config.FormBeanConfig。如果在这里设置自定义的类,则必须扩展FormBeanConfig类name指定该ActionForm Bean的唯一标识符,整个Struts框架用该标识符来引用这个bean。该属性是必需的type指定ActionForm类的完整类名,该属性是必需的配置示例如下:(4).元素元素用于配置异常处理。元素可以包含0个或多个元素。元素用来设置Java异常和异常处理类org.apache.struts.action.ExceptionHandler之间的映射。元素的属性如下表示:属性描述className指定和元素对应的配置类,默认值为org.apache.struts.config.ExceptionConfighandler指定异常处理类。默认值为org.apache.struts.action.ExceptionHandlerkey指定在Resource Bundle中描述该异常的消息keypath指定当异常发生时的转发路径scope指定ActionMessage实例的存放范围,可选值包括request和session。此项的默认值为requesttype指定所需处理的异常类的名字。此项是必需的bundle指定Resource Bundle配置示例如下: (5).元素元素用来声明全局的转发关系。元素由0个或多个元素组成。元素用来把一个逻辑名映射到特定的URL。通过这种方式,Action类或者JSP文件无需指定实际的URL,只要指定逻辑名就能实现请求转发或者重定向,这可以减弱控制组件和视图组件之间的耦合,并且有助于维护JSP文件。元素的属性如下表示:属性描述className指定和元素对应的配置类,默认值为org.apache.struts.action.ActionForwardcontextRelative如果此项为true,表示当path属性以“/”开头时,给出的是相对于当前上下文的URL。此项的默认值为falsename转发路径的逻辑名。此项是必需的path指定转发或重定向的URI。此项是必需的,且必须以“/”开头。当contextRelative属性为false时,表示URI路径相对于当前应用;当为true时,表示URI路径相对于当前上下文redirect当此项为true时,表示执行重定向操作;当此项为false时,表示执行请求转发操作。配置示例如下:如果JSP1.jsp把请求转发给Action1,可以使用以下代码:或者:如果Action1的execute()方法把请求转发给JSP2.jsp,可以使用以下代码:return (mapping.findForward(forward2);(6).元素元素包含0个或多个元素。元素描述了从特定的请求路径到相应的Action类的映射。在元素中可以包含多个和子元素,它们分别配置局部的异常处理及请求转发,仅被当前的Action所访问。在元素中定义的子元素代表全局的异常配置。在元素中定义的子元素代表全局的请求转发。但对于和元素的语法和属性是一样的。元素的属性如下表示:属性描述attribute设置和Action关联的ActionForm Bean在request或session范围内的属性key。例如,假定Form Bean存在于request范围内,并且此项的值为“myBean”,那么request.getAttribute(myBean)就可以返回该Bean的实例。此项为可选项。className和元素对应的配置元素。默认值为org.apache.struts.action.ActionMappingforward指定转发的URL路径include指定包含的URL路径input指定包含输入表单的URL路径。当表单验证失败时,将把请求转发到该URLname指定和该Action关联的ActionForm Bean的名字。该名字必须在元素中定义过。path指定访问Action的路径,它以“/”开头,没有扩展名parameter指定Action的配置参数。在Action类的execute()方法中,可以调用ActionMapping对象的getParameter()方法来读取该配置参数scope指定ActionForm Bean的存在范转,可选值为request和session。默认值为sessiontype指定Action类的完整类名validate指定是否先调用ActionForm Bean的validate()方法。默认值为true其中,元素的forward、include和type属性相互排斥,也就是说只能设置其中的一项。配置示例如下: 以上这段配置代码表明,如果用户请求的URI为“Login.do”,Struts框架将把请求转发给LoginAction;与LoginAction关联的表单为“loginForm”,它位于request范围内。Struts框架会在Struts配置文件中检索匹配的元素:Struts框架在把请求转发给LoginAction之前,先调用LoginAction的validate()方法,如果表单验证失败,将把请求转发给元素的input属性指定的index.jsp文件。在以上的元素中还有一个子元素,如果在LoginAction的execute()方法中执行以下代码,表明把请求转发给success.jsp。return (mapping.findForward(success);另外,关于元素还有两点注意点:a. 局部的和全局的元素在元素中定义的元素表示局部的请求转发项,在元素中定义的元素表示全局的请求转发项。在两个不同位置定义的元素的语法是一样的。但是当局部的和全局都定义了具有相同name属性的元素时,局部的优先级高于全局的。b.的forward属性的forward属性和子元素是两个不同的概念,切勿混淆。forward属性指定和path属性匹配的请求转发路径,如:对于以上代码,当用户请求的URI为“Logout.do”时,Struts框架会直接把请求转发给logout.jsp文件,而不会先执行后台的Java程序之后,再转发到某一个JSP文件。(7).元素元素用于配置ActionServlet。元素的属性如下表示:属性描述bufferSize指定上传文件的输入缓冲的大小。该属性为可选项,默认值为4096className指定和元素对应的配置元素。默认值为org.apache.struts.config.ControllerConfigcontentType指定响应结果的内容类型和字符编码。该属性为可选项,默认值为text/html。如果在Action和JSP网页中也设置了内容类型和编码,将会覆盖该设置locale指定是否把Locale对象保存到当前用户的session中。默认值为falseprocessorClass指定负责处理请求的Java类的完整类名。默认值为org.apache.struts.action.RequestProcessor。如果把此项设置为自定义的类,那么应该保证该类扩展了RequestProcessor基类。tempDir指定处理文件上传的临时工作目录。如果此项没有设置,将采用Servlet容器为Web应用分配的临时工作目录nocache如果为true,在响应结果中将加入特定的头参数:Pragma,Cache-control和Expires,防止页面被存储在客户浏览器的缓存中。默认值为false如果应用包含多个子应用,可以在每个子应用的Struts配置文件中配置元素。这样,尽管这些子应用共享一个ActionServlet对象,但是它们可以使用不同的RequestProcessor类。但对一般的系统来说,该元素都不需要配置。配置示例如下:(8).元素元素用来配置存放消息文本的资源文件。元素的属性如下表示:属性描述className指定和元素对应的配置元素。默认值为org.apache.struts.config.MessageResourcesConfigfactory指定消息资源的工厂类。默认值为org.apache.struts.util.PropertyMessageResourcesFatorykey指定Resource Boundle存放在ServletContext对象中采用的属性key。默认值为Globals.MESSAGE_KEY定义的字符串常量。只允许有一个Resource Boundle采用默认的属性keynull指定MessageResources类如何处理未知的消息key。如果此项为true,将返回空字符串。如果此项为false,将返回类似“?global.label.missing?”的字符串。该属性为可选项,默认值为trueparameter指定Resource Boundle的消息资源文件名。例如,如果此项设为“com.sample.ApplicationResources”,那么对应的实际资源文件的存放路径为:WEB-INF/classes/com/sample/ApplicationRperties以下是元素的配置代码示例,第一个元素采用默认的key属性,表示默认的Resource Bundle。同一个Struts配置文件只允许有一个默认的Resource Bundle,所以第二个元素必须显式地设置key属性:许多Struts客户化标签都通过bundle属性来指定Resource Boundle,标签的bundle属性和元素的key属性匹配,如:在以上代码中,第一个标签没有指定bundle属性,表示从默认的Resource Bundle中读取消息文本,第二个标签的bundle属性为“rsc1”,它和key属性为“rsc1”的元素匹配。(9).元素元素用于配置Struts插件。元素的属性如下表示:属性描述className指定Struts插件。插件类必须实现org.apache.struts.action.PlugIn接口元素可以包含0个或多个子元素。配置示例如下:以上代码配置了ValidatorPlugIn插件,它用于初始化Validator验证框架。3配置多应用模块Struts还支持多应用模块,即同一个应用包含多个子应用,每个子应用可以处理相关的一组功能。所有的子应用都共享同一个ActionServlet实例,但每个子应用都有单独的配置文件。把应用划分成多个子应用模块包括以下步骤:(1).为每个子应用创建单独的Struts配置文件。(2).在web.xml的ActionServ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论