Struts2的基本用法-2.ppt_第1页
Struts2的基本用法-2.ppt_第2页
Struts2的基本用法-2.ppt_第3页
Struts2的基本用法-2.ppt_第4页
Struts2的基本用法-2.ppt_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

第4讲 Struts2的基本用法-2,掌握Struts2的配置文件 掌握Struts2中Action的配置及使用 会使用Struts2的国际化 掌握Struts2的标签库,课程目标,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,3,Struts2的常量配置,使用struts. properties文件来管理常量 该文件包含了系列的key-value对 注意struts. properties文件的路径 通常放在web应用的WEB-INF/classes下 常用的常量介绍 Struts.i18n.encoding Struts.ui.theme 其他常量,Struts2的常量配置,Struts2配置常量总共有三种方式: 通过struts. properties文件 通过struts. xml文件 通过Web应用的web.xml文件 Struts2框架按照如下搜索顺序加载常量 struts-default.xml struts-plugin.xml struts.xml struts. properties web.xml,Struts2的配置文件介绍,perties:定义框架自身的全局变量。 struts-default.xml:定义框架自身使用的action映射及result定义。 struts-plugin.xml:struts插件使用的配置文件,比如当使用struts和spring结合时就需要在web.xml中引用该配置文件。 struts.xml:定义应用自身使用的action映射及result定义;当然我们一般将应用的各个模块分配到不同的配置文件中。,Struts.xml配置的主要内容,Action配置 Result配置 拦截器配置 包配置 命名空间配置 定义Bean 使用通配符,通配符简介,* :可以匹配0个或多个字符,但不能匹配”/” * :可以匹配0个或多个字符,且可以匹配“/“ character :用来转译*和,通配符简介,0 代表整个path代表的所有字符不包括第一个/,如path“/*Subscription”中的*是add,那么0就是addSubscription。 1 代表第一个通配符(包括*, *, character)所表示的实际内容,如path“/*Subscription”中的*是add,那么1就是add。 2 代表第二个通配符(包括*, *, character)所表示的实际内容,如path“/*Subscription*”中的第一个*是add而第二个*是test,那么1就是add,2就是test,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,10,概述,Struts2不强制要求Action类继承任何Struts2的基类或接口(低侵入式设计) Struts2通常直接使用Action来封装HTTP请求参数,还可以封装HTTP处理结果,Action接口的定义,public static final java.lang.String SUCCESS = “success“; public static final java.lang.String NONE = “none“; public static final java.lang.String ERROR = “error“; public static final java.lang.String INPUT = “input“; public static final java.lang.String LOGIN = “login“; public abstract java.lang.String execute() throws java.lang.Exception;,ActionSupport类,ActionSupport类是Struts2默认的Action处理类,如果开发者的Action类继承该ActionSupport类,则会大大简化Action的开发 Action继承ActionSupport类不是强制的,也可以不继承,Action接口的实现,扩展ActionSupport类 ValidationAware接口 validate方法 execute方法 other validate和execute的执行顺序 validate先于execute执行,Action接口的实现,使用本地的资源文件 TextProvider接口 *.properties文件,与类在同一目录下 文件名与类名一致 使用getText()方法查询本地化信息文件 LocalProvider接口 通过调用AcitonContext.getContext ().getLocale()方法,Action访问Servlet API,Struts2的Action没有与任何的Servlet API耦合,从而能更轻松地测试该Action Struts2提供了一个ActionContext类,来访问Servlet API 实际操作演示,Action直接访问Servlet API,为了在Action中直接访问Servlet API,Struts2提供了如下接口: ServletContextAware ServletRequestAware ServletResponseAware 尽量避免在Action中直接访问Servlet API,以防止和底层代码耦合,破坏代码设计的独立性,使用ServletActionContext访问ServletAPI,ServletActionContext工具类中的静态方法: getPageContext(); getRequest(); getResponse(): getServletContext():,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,19,包和命名空间,Struts2使用包来组织Action 命名空间的作用 主要处理同一个Web应用中包含同名Action的情况 命名空间只有一个级别 实例演示,Action的基本配置,Action的基本配置 name属性是必须的 实例演示,使用Action的动态方法调用,DMI:Dynamic Method Invocation 形式:action=“ActionName!MethodName” 需要设置strtus.enable.DynamicMethodInvocation = true 实例演示,指定Method属性及使用通配符,使用action的method属性,可以让一个Action执行多个逻辑处理过程 实例演示,配置默认Action, 当用户请求找不到对应的Action时,系统默认的Action可以处理用户请求 实例演示,配置Action的默认处理类, 实例演示,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,26,理解处理结果,Action处理完用户请求后,将返回一个普通字符串,这个普通字符串就是一个逻辑视图名 Struts2通过配置逻辑视图名和物理视图资源的映射关系,来把适当的页面呈现给用户 使用标签进行配置 默认name属性的值为”success”,Struts2支持的Result类型,定义在struts-default.xml文件中 默认的是result类型是dispatcher Struts2内建的result类型 chain类型 dispatcher类型 freemarker类型 plainText类型 redirect类型 redirectAction类型 其他类型,plainText结果类型,用于显示实际视图资源的源代码 必须指定charSet参数,redirect 结果类型,调用sendRedirect(String) 方法来转到指定的位置,产生一个新的请求; 这样做的结果会使刚刚执行的action(包括action实例,action中的错误消息等)丢失, 不再可用。,redirectAction 结果类型,系统将重新生成一个新请求,只是该请求的URL不是一个具体的视图资源,而是另一个Action。因此前一个Action的处理结果、请求参数、请求属性都会丢失 实际操作演示,Chain Result,这个result调用另外的一个action。 actionName (默认) - 被调用的action的名字 namespace - 被调用的action的名称空间。如果名称空间为空,这默认为当前名称空间。 method - 用于指定目标action的另一个方法被调用. 如果空,默认为execute方法。,全局结果,全局结果对所有的Action都有效,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,34,Strtus2的异常处理机制,Struts框架接收到Action抛出的异常之后,将根据struts.xml文件配置的异常映射,转入指定的视图资源 需要在struts.xml文件中配置异常处理,声明式异常捕获,在struts.xml文件中配置,其属性有: exception result 异常映射的分类 局部异常映射 全局异常映射 实际操作演示,输出异常信息,在异常处理页面,可以输出对应的异常信息: 输出异常对象本身: 输出异常堆栈信息: ,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,38,概述,Struts2引入Convertion插件来支持零配置 主要特点:约定优于配置,Action的搜索和映射约定,在应用启动的时候,Convention插件会自动搜索位于action、actions、struts、struts2的包及其子包下的所有Java类,以搜索Action类。 在应用启动的时候,Convention插件在上述包及其子包的路径下搜索满足如下条件的类来作为Action类: 实现com.opensymphony.xwork2.Action的类 类名以Action结尾的Java类,Action的搜索和映射约定,在映射Action的名称的时候,通常遵循如下规则: 如果该Action类名以Action作为后缀,那么会将后缀的Action去掉,其他的不做处理。 如果该Action类名采用驼峰式的写法,也就是每个单词首字母大写的写法,那么需要把所有字母变成小写,单词与单词之间以中画线隔开。 比如有一个Action的名称为HelloWorldAction,那么对应的映射资源的名称为hello-world。 (如果是单个词的Action名称,那么把它的所有字母变成小写,作为对应的映射资源的名称。比如Action类名为HelloAction,它是以 Action作为后缀的,那么对应的映射资源的名称为先去掉Action后缀,得到Hello,又是单个词的名称,变成小小,那么最终对应的映射资源的名 称为hello。,按约定映射Result,默认情况下,convention总会到Web应用的WEB-INFcontent路径下定位物理资源。故定位资源约定为:actionName+resultCode+suffix。当某个逻辑视图找不到对应的视图资源是,convention会自动试图使用actionName+suffix作为物理视图资源。,按约定映射Result,Action键的约定,如果想一个Action处理结束后不是进入视图页面,而是进入另一个Action形成Action链。则只需要遵守下面三个约定: 1、第一个Action返回的逻辑视图字符串没有对应的视图资源。 2、第二个Action与第一个Action处于同一个包下。 3、第二个Action映射的URL为:firstactionname+resultcode,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,45,什么是国际化,国际化(Internationalization)是设计一个适用于多种语言和地区的应用程序的过程。适用于多种语言和地区的含义是当使用不同语言及处于不同的地区的用户在使用这个应用程序时,应用程序必须使用他们能看懂的语言和符合他们文化习惯来显示信息。 国际化有时候被简称为i18n,因为有18个字母在国际化的英文单词的字母i和n之间。,什么是本地化,本地化(Localization)是指通过增加本地描述的构件和文字翻译工作来使应用程序适应于不同的语言和地区的过程。 本地化有时候被简称为l10n,因为有10个字母在本地化的英文单词的字母l和n之间。 通常本地化最耗时的工作应该是文字翻译。本地化工作者们要根据地区的具体需求来为日期、数字和通货等数据建立新的格式。其他类型的数据,象声音,图象等,也需要根据具体需要来决定是否本地化。,什么是Struts的国际化,Struts的国际化是建立在Java国际化的基础之上的,一样也是通过提供不同国家/语言环境的消息资源,然后通过ResourceBundle加载指定Locale对应的资源文件,再取得该资源文件中指定Key对应的消息。 Struts框架对国际化进行了进一步的封装。,在struts2中需要做国际化的地方,jsp页面的国际化 action错误信息的国际化 转换错误信息的国际化 校验错误信息的国际化,Struts2访问国际化消息方式,(1)JSP页面: (2)Action类中:使用ActionSupport类的getText方法。 (3)表单元素的Label里:为表单元素指定一个key属性,Struts2加载资源文件的方式,(1)加载全局资源文件 (2)包范围资源文件 为Struts2指定包范围资源文件的方法是,在包的根路径下建立多个文件名为package_language_perties的文件,一旦建立了这个系列的国际化资源文件,应用中处于该包下的所有Action都可以访问该资源文件。需要注意的是上面的包范围资源文件的baseName就是package,不是Action所在的包名。,Struts2加载资源文件的方式,(3)Action范围资源文件 在Action类文件所在的路径建立多个文件名为ActionName_language_perties的文件。 (4)临时指定资源文件 标签的name属性指定临时的国际化资源文件,Struts2加载资源文件的顺序,Action中加载资源文件,假设我们在某个ChildAction中调用了getText(“user.title“),Struts 2.0的将会执行以下的操作: (1)优先加载系统中保存在ChildAction的类文件相同位置,且baseName为ChildAction的系列资源文件。 (2)如果在(1)中找不到指定key对应的消息,且ChildAction有父类ParentAction,则加载系统中保存在ParentAction的类文件相同位置,且baseName为ParentAction的系列资源文件。,Struts2加载资源文件的顺序,(3)如果在(2)中找不到指定key对应的消息,且ChildAction有实现接口IChildAction,则加载系统中保存在IChildAction的类文件相同位置,且baseName为IChildAction的系列资源文件。 (4)如果在(3)中找不到指定key对应的消息,且ChildAction有实现接口ModelDriven(即使用模型驱动模式),则对于getModel()方法返回的model对象,重新执行第(1)步操作。,Struts2加载资源文件的顺序,(5)如果在(4)中找不到指定key对应的消息,则查找当前包下baseName为package的系列资源文件。 (6)如果在(5)中找不到指定key对应的消息,则沿着当前包上溯,直到最顶层包来查找baseName为package的系列资源文件。 (7)如果在(6)中找不到指定key对应的消息,则查找struts.custom.i18n.resources常量指定baseName的系列资源文件。 (8)如果经过上面的步骤一直找不到key对应的消息,将直接输出该key的字符串值。,目 录,1 Struts2的常规配置 2 实现Action接口 3 配置Action 4 配置处理结果 5 配置Struts2的异常处理 6 Convention插件与“约定”支持 7 使用Struts2的国际化 8 使用Struts2的标签库 9 本讲小结,56,EL简介,EL语法 示例:$sessionScope.user.sex 示例:$sessionScope.user“sex” EL变量,EL简介,EL变量示例,EL简介,自动类型转换 $param.count + 20 String str_count = request.getParameter(“count“); int count = Integer.parseInt(str_count); count = count + 20;,EL表达式,以前,EL简介,EL隐含对象(11个) PageContext PageScope RequestScope sessionScope applicationScope Param paramValues header/headerValues cookie/initParam,EL简介,EL保留字,Struts2的标签简介,Struts 2提供的标签库功能非常强大,而且非常好用。使用标签来开发可以使得页面更加整洁容易维护,同样可以减少代码量以及开发时间。Struts 2提供的标签非常之多,其大致分为两类: 一类是非用户界面标签,也称为非UI标签(通用标签)。 控制标签:条件、循环等流程控制 数据标签:数据存储和处理 一类是用户界面标签,也称为UI标签。 表单标签:主要用于生成HTML的表单 非表单标签:如显示日期、树形菜单,通用标签之控制标签,逻辑控制标签主要用来完成流程控制,如分支和循环操作。也可以用来对集合进行合并、排序等操作。,通用标签之控制标签,Struts 2提供了三个标签用于进行分支流程控制,分别是if标签、else if标签、else标签。其中if标签、else if标签提供了一个test属性用来进行判断。if/elseif/else标签的使用和Java语言中的if-elseif-else流程控制语言使用上是基本类似的。 实例演示,通用标签之逻辑控制标签,Struts 2提供iterator标签用来对集合进行遍历,这里所说的集合包括List、Set和数组以及Map。 实例演示(判断成绩分类),通用标签之逻辑控制标签,Struts 2中提供append标签用于将多个集合拼接组合成一个集合。 merge标签同append标签类似,也是用来组合集合成一个新集合。 generator可以将指定的字符串分隔成多个子字符串,并将这些子字符串放置到一个集合中。,通用标签之逻辑控制标签,subset标签用来取得集合的子集 sort标签用来通过指定的Comparator对集合中的元素进行排序,通用标签之数据访问标签,数据访问标签用来访问ValueStack中的数据,从而完成数据访问相关功能。例如通过action标签可以用来显示Action中的属性,通过bean标签允许直接在JSP页面中创建JavaBean实例等。 每个Action类的对象实例会拥有一个ValueStack对象。当Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,并且将Action类的对象实例压入ValueStack对象中。setValue和findValue方法可以设置和获得Action对象的属性值。,通用标签之数据访问标签,action标签用来在JSP页面中调用Action,通过指定设置其executeResult属性为true,能将处理结果对应的视图资源包含到JSP页面中。 Struts 2提供bean标签允许直接在JSP页面中创建JavaBean实例,可以使用param标签在该JavaBean实例传入属性值,也可以通过property标签输出该JavaBean实例的属性值。,通用标签之数据访问标签,property标签 set标签 push标签,通用标签之数据访问标签,Struts 2提供include标签用于将JSP页面,或者Servlet包含到该页面中。 Struts 2提供url标签用来生成一个URL地址。 其他标签,UI标签简介,Struts 2提供了丰富的UI标签,使用这些标签可以实现非常好的显示效果。同时Struts 2的UI标签都是基于主题和模板的,通过使用不同的主题或模板就能显示不同的显示效果。 模板:一个文件,能被特定标签输出 主题:一系列的模板打包。,UI标签之通用属性,所有的表单标签可以分为两种:form标签本身和单个表单元素的标签。 所有表单标签处理类都继承了UIBean类,UIBean包含了一些通用属性,这些通用属性分成3种: 模板相关属性; javascript相关属性; 通用属性。,UI标签之表单标签,form标签 textfield标签 textarea标签 checkbox标签 select标签 ,UI标签之非表单标签,输出一些表单以外的HTML元素 包括: 1,a:生成一个超链接 2,actionerror:如果Action实例的getActionErrors()方法返回不为null,则该标签负责输出该方法返回的系列错误。 3,actionmessage:如果Action实例的getActionMessages()方法返回不为null,则该标签负责输出该方法返回的系列消息。 4,component:使用此标签可以生成一个自定义组件。 5,div:此标签负责生成一个div片段 6,fielderror:如果Action实例存在表单域的类型转换错误,校验错误,该标签则负责输出这些错误提示。 7,tabbedPanel:生成HTML页面的Tab页。 8,tree:生成一个树形结构。 9,treenode:生成树形结构的节点。 .,OGNL介绍,OGNL概述 Object Graph Navigation Language 一般用 ”#” 访问对象 OGNL中的集合 list map 查找 过滤,模板和主题,回忆:什么是模板和主题? Struts2的默认模板:FreeMarker模板 Struts2的自带主题 Simple主题 xhtml主题 css_xhtml主题 AJAX主题 自定义主题,模板和主题,simpl

温馨提示

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

评论

0/150

提交评论