




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1讲 搭建struts2环境与简单应用开发1. struts2框架l struts2由传统的struts1和webwork两个经典mvc框架发展而来l struts2是一个非常优秀的mvc框架2. mvc思想概述mvc思想将应用中各组件按功能进行分类,不同的组件使用不同技术充当,甚至推荐了严格分层,不同组件被严格限制在其所在层内,各层之间以松耦合的方式组织在一起,从而提供良好的封装。model1(jsp+javabean):jsp页面接收处理客户端请求,对请求处理后直接做出响应。用少量的javabean来处理数据库连接、数据库访问等操作。jsp页面身兼view和controller两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性低,增加了应用的扩展和维护的难度。model2(jsp+servlet+javabean):属于mvc架构的设计模式。mvc思想将一个应用分为三个基本部分:model(模型)、view(视图)、controller(控制器),这三个部分以最少的耦合协同工作,从而提高应用的可扩展性和维护性。mvc有如下特点:l 多个视图对于一个模型,一旦模型发生变化,易于维护;l 模型返回的数据与显示逻辑分离;l 应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性;l 控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户权限的概念;l mvc更符合软件工程化管理的精神。3. struts2的下载和安装下载并搭建struts2环境:(1). 下载struts2.2.1;(2). 找到开发struts2应用需要使用到的jar文件;(3). 编写struts2的配置文件;(4). 在web.xml中加入struts2框架的启动配置。开发struts2最少需要的jar文件:(1). struts2-core-.jar:struts2框架的核心类库;(2). xwork-core-.jar:xwork类库,struts2在其上构建;(3). ognl-3.0.jar:对象图导航语言(object graph navigation language),一种功能强大的表达式语言,主要用于读写对象的属性;(4). freemarker-2.3.16.jar:struts2ui标签的模板使用freemarker编写;(5). commons-fileupload-1.2.1.jar:文件上传组件,2.1.6以后版本必须加入此文件;(6). commons-io-1.3.2.jar:io输入输出流组件,主要完成文件的读写功能;(7). javassist-3.7.ga.jar:javassist是一个开源的分析、编辑和创建java字节码的类库。编写struts2的配置文件struts2默认的配置文件为struts.xml,该文件需要存放在web-inf/classes下在web.xml中加入struts2框架的启动配置struts2org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilterstruts2/*struts2框架是通过filter启动的,在web.xml中配置。在strutsprepareandexecutefilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。注意:struts2读取到struts.xml的内容后,以javabean的形式存放在内存中,以后struts2对用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件。4. strus2简单应用开发4.1 helloworld目标:点击超链接,发出请求,在请求中存数据,在另一个页面中显示存入的数据。l jsp+servlet实现l struts实现总结:l package用来管理action,主要用于管理一组业务功能相关的action。l name属性:必须有并要求name属性值唯一,它不对应java的类包。l namespace属性:定义包的命名空间,命名空间是访问该包下action的路径一部分。l 只有当包都继承了struts-default包,才可以使用struts2的核心功能。l abstract=true表示该包为抽象包,不能包含actionl struts2中action的默认后缀为.action目标:struts如何实现简单转发 - action配置的各项默认值。l 如果没有为action指定class,默认是actionsupport;l 如果没有为action指定method,默认执行action中的execute()方法;l 如果没有指定result的name属性,默认值是success4.2 登录目标:输入用户名、密码,成功跳转到成功页面,失败返回登录页面。l jsp+servlet实现l 表单+actionl struts标签+actionl 国际化总结:l 添加国际化配置l 添加国际化文件perties、mess_zh_cn.properties、mess_en_us.propertiesl 修改internet选项第2讲 struts2处理流程与常规配置1.struts2应用开发步骤(1). 在web.xml文件中定义核心filter来拦截用户请求。(2). 如果需要以post方法提交请求,则定义包含表单数据的jsp页面。如果仅仅只是以get方式发送请求,则无须此步骤。(3). 定义处理用户请求的action类。(4). 配置action。(5). 配置处理结果和物理视图资源之间的对应关系。(6). 编写视图资源。如果action需要把数据传给视图资源,则可以借助于ognl表达式。2.struts2的处理流程l 控制器包括核心控制器和业务控制器l 业务控制器与物理视图解耦:若需要将某个视图名映射到不同视图资源,无须修改xxxaction的代码,只需修改配置文件。3.struts常量配置l struts.i18n.encoding:指定web应用的默认编码集,相当于request.setcharacterencoding()。l struts.custom.i18n.resources:指定国际化资源文件的basenamel struts.action.extension:需要struts处理的请求后缀,默认值为action,可以指定多个l struts.server.static.browsercache:设置浏览器是否缓存静态内容,默认值为true,开发时应设为falsel struts.configuration.xml.reload:当struts的配置文件修改后,系统是否自动重新加载该文件,开发时应设为truel struts.devmode:设置struts2应用是否为开发模式,打印出更详细的信息备注:l 哪些常量是有效的?在struts2-core2.2.1.jar压缩文件的orgapachestruts路径下的perties文件中定义。l struts2默认会加载struts.xml、struts-default.xml、struts-plugin.xml三个配置文件n struts.xml是开发者定义的默认配置文件n struts-default.xml是struts框架自带的配置文件n struts-plugin.xml是struts插件的默认配置文件n 加载顺序为struts-default.xml、struts-plugin.xml、struts.xmll struts2常量配置有三种方式n 通过struts.xml配置文件n 通过perties文件n 通过web.xml文件l struts2的所有配置文件(包括用户自定义配置文件)都可以用来配置常量,推荐struts.xmll struts2搜索常量的顺序为struts-default.xml、struts-plugin.xml、struts.xml、perties、web.xml,如果在多个文件中配置了同一个struts2常量,则后一个会覆盖前一个4.包含其他配置文件l 为了避免struts.xml文件过于庞大,提高struts.xml文件的可读性,可以将一个struts.xml文件分解成多个配置文件,在struts.xml中包含其他配置文件l 第3讲 实现和配置action1.action接口和actionsupport类l action类里的属性,不仅可用于封装请求参数,还可用于封装处理结果l 为了让用户开发的action类更规范,struts2提供了一个action接口l actionsupport类是action接口的实现类,如果开发者的action继承了actionsupport类,则会大大简化action的开发l actionsupport类是action的默认处理类2.action访问servlet apil action访问servlet api是必要的l web应用中经常访问的servlet api有httpservletrequest、httpservletsession和httpservletcontext,对应于jsp内置对象request、session、applicationl struts2提供了一个actioncontext类,用于action访问servlet apin object get(object key):request.getattribute(string name)n map getapplication():返回一个map对象,该对象模拟了servletcontext实例n map getsession():返回一个map对象,该对象模拟了httpsession实例n static actioncontext getcontext():获取系统的actioncontext实例l 实例:测试action访问servlet apin 实现登录功能,返回success或errorn 用application实现简单计数器n 用session保存用户名n 用request保存提示信息(tip)l action既可以彻底与servlet api分离,也可以用简单的方式操作request、session、application范围的属性3.action直接访问servlet apil 为了在action中直接访问servlet api,struts2提供了如下接口:n servletcontextaware:实现接口的action可以直接访问servletconext实例n servletrequestaware:实现接口的action可以直接访问httpservletrequest实例n servletresponseaware:实现接口的action可以直接访问httpservletresponse实例l 实例:通过httpservletresponse为系统添加cookie对象,实现自动登录l 即使获得httpservletresponse对象,也不要尝试直接在action中对客户端生成响应4.使用servletactioncontext访问servlet api5. 配置actionl 包和命名空间n struts2使用包来组织action,action是struts2的基本“程序单位”n 配置元素时必须指定name属性,该属性是引用该包的唯一标识n extends属性值必须是另一个包的name属性n 因为struts2的配置文件是从上到下处理的,所以父包应该在子包前面定义n 命名空间主要是为了处理同一个web应用中包含同名action的情形。同一个命名空间里不能有同名的action,不同命名空间里可以有同名的actionn struts搜索命名空间的顺序u 命名空间只有一个级别。如果请求的url是/bookservice/search/get.action,系统将先在/bookservice/search的命名空间(存在)下查找名为get的action,如果在该命名空间内找到名为get的action,则由该action处理用户请求;如果在该命名空间内没有找到名为get的action,系统将直接进入默认的命名空间中查找名为get的actin,而不会在/bookservice的命名空间下查找名为get的action。u 默认命名空间和根命名空间的区别:默认命名空间可以处理任何命名空间下的action请求,根命名空间只会处理根命名空间下的请求。l action的基本配置n 定义元素时,需要指定name属性,name默认不允许使用“/”,如果想使用“/”,需要设置struts.enable.slashesinactionnames=truel 使用action的动态方法调用n 动态方法调用允许在一个action内包含多个控制处理逻辑n 使用动态方法调用,应该确保struts.enable.dynamicmethodinvocation = truefunction regist()var myform = document.forms0;myform.action = login!registl 指定method属性及使用通配符n 使用method属性实现一个action包含多个处理逻辑n 使用通配符简化struts.xml配置n 通配符可以在method、class和result中使用n 不建议超链接直接连接到某个视图资源,建议将所有请求都交给struts框架处理n /1.jsp第4讲 配置result和异常处理1.配置resultl 理解处理结果n 元素定义逻辑视图和物理视图之间的映射关系n 浏览者、控制器和视图资源之间的顺序图如下:l struts2支持的结果类型n dispatcher:指定使用jsp作为视图的结果类型(默认值)n redirect:直接跳转到其它url的结果类型n redirectaction:直接跳转到其它action的结果类型n plaintext:用于显示某个页面的原始代码的结果类型l plaintext结果类型n location:指定实际的资源视图n charset:指定输出页面时所使用的字符集/xxx.jsputf-8不设置该选项易出现中文乱码l redirect结果类型与dispatcher的区别:n 重定向会丢失所有的请求参数、请求属性和action处理结果n 重定向地址栏会发生变化l redirectaction结果类型:直接将请求重定向到另一个actionn actionname:指定重定向的action名n namespace:指定重定向的action所在的命名空间n 包括同一命名空间的重定向和不同命名空间的重定向l 全局结果n 使用标签定义n 如果一个action包含了与全局结果同名的结果集,则action里的局部result会覆盖全局result。2. 异常处理l 在action中手动处理异常,缺点:异常处理与代码耦合,一旦需要改变异常处理方式,必须修改代码!l struts2中的声明式异常:以声明式的方式管理异常处理n action接口中execute方法签名n 在struts.xml中配置异常处理n 前提:打开struts2的异常处理功能.l 声明式异常捕获n 在struts.xml文件中配置元素u exception:指定异常类型u result:指定逻辑视图名n 异常映射u 局部异常映射:元素的子元素u 全局异常映射:元素的子元素n 实例:u 抛出myexception和sqlexception/exception.jsp/exception.jsp/exception.jsp/error.jsp/welcome.jspn 全局异常映射的result属性值通常不要使用局部结果,局部异常映射的result属性值既可以使用全局结果,也可以使用局部结果l 输出异常信息n n 第5讲 struts2的国际化1. 加载全局资源文件l 配置basename:2. 访问国际化消息l 用输出国际化消息. l 用表单元素输出国际化信息(key属性)l 在action中输出国际化消息. actionsupport类的gettext方法3. 输出带占位符的国际化消息l 在jsp页面中填充国际化消息里的占位符 l 在action中填充国际化消息里的占位符. gettext(string atextname,list args). gettext(string key, string args)4. 加载资源文件的方式l 包范围资源文件. 在包的根路径下建立多个文件名为package_lauguage_perties的文件. action优先使用包范围的资源文件l action范围资源文件. 在action类所在路径建立actionname_language_perties文件. action优先加载action范围资源文件. action范围的资源文件,允许不同action使用相同的key表示不同的字符串l 临时指定资源文件. 借助于标签,在jsp页面输出国际化消息时指定国际化资源的位置. 第6讲 struts2的类型转换1.问题的提出l struts2框架需要解析http请求参数,并将请求参数传给控制器组件。l 问题:http请求参数都是字符串类型,action中定义的是java数据类型,struts2框架必须将这些字符串参数转换成相应的数据类型。2.struts2内建的类型转换器l boolean和booleanl char和characterl int和integerl long和longl float和floadl double和doublel date:日期格式使用用户请求所在locale的short格式l 数组:在默认情况下,数组元素是stringl 集合:在默认情况下,假定集合元素类型为string,创建一个新的arraylist封装所有的字符串l com.opensymphony.xwork2.conversion.impl.xworkbasicconverter(内置类型转换类)3.基于ognl的类型转换l username 赋值给action中属性名为username的属性l bean.firstname 赋值给action中属性名为bean对象的firstname属性4.自定义类型转换器l 需求:实现username,password与user类型之间的转换l 自定义类型转换器需要继承defaulttypeconverter类/类型转换器必须重写convertvalue方法,该方法需要完成双向转换public object convertvalue(map context, object value, class totype)/当需要将字符串向user类型转换时if (totype = user.class )/系统的请求参数是一个字符串数组string params = (string)value;/创建一个user实例user user = new user();/只处理请求参数数组第一个数组元素,/并将该字符串以英文逗号分割成两个字符串string uservalues = params0.split(,);/为user实例赋值user.setname(uservalues0);user.setpass(uservalues1);/返回转换来的user实例return user;else if (totype = string.class )/将需要转换的值强制类型转换为user实例user user = (user) value;return ; return null ;5. 注册类型转换器l struts2支持三种方式来注册类型转换器. 注册局部类型转换器:仅仅对某个action的属性起作用. 注册全局类型转换器:对所有action的特定类型的属性都会生效. 用注解来注册类型转换器:通过注解方式来注册类型转换器l 局部类型转换器. 注册局部类型转换器使用局部类型转换文件指定. 局部类型转换文件的文件名应为actionnperties形式. 类型转换文件应该和action类文件放在相同的位置. 内容:=l 全局类型转换器. 全局类型转换器对指定类型的属性起作用. 文件名:perties. 放在web-inf/classes路径下. 内容:=l 用注解注册类型转换器. typeconversion(converter=com.xawx.web.converter.hyphenconverter)6. 基于struts2的自定义类型转换器l struts2提供了一个strutstypeconverter抽象类,该抽象类是defaulttypeconverter的子类,strutstypeconverter类简化了类型转换器的实现public class userconverter extends strutstypeconverter /实现将字符串类型转换成复合类型的方法public object convertfromstring(map context, string values , class toclass)/创建一个user实例user user = new user();/只处理请求参数数组第一个数组元素,/并将该字符串以英文逗号分割成两个字符串string uservalues = values0.split(,);/为user实例赋值user.setname(uservalues0);user.setpass(uservalues1);/返回转换来的user实例return user;/实现将复合类型转换成字符串类型的方法public string converttostring(map context, object o)/将需要转换的值强制类型转换为user实例user user = (user) o;return ;第7讲 struts2的输入校验1.关于输入校验l 为什么学习输入校验?. 输入校验是所有web应用必须处理的问题。. 通过输入页面收集的数据既有正常用户的误输入,也有恶意用户的恶意输入。. 健壮的系统必须将这些非法输入阻止在应用之外,防止非法输入进入系统。l 输入校验:捕获异常输入时,应用程序直接返回,提示浏览者必须重新输入。l 输入校验分为客户端校验和服务器端校验。. 客户端校验:过滤正常用户的误操作,主要通过javascript代码完成。. 服务器端校验:通过在应用中编程实现,是整个应用阻止非法数据的最后防线。2.基于xml配置方式的输入校验l 使用struts的校验框架进行校验,无须对程序代码进行任何改变,只需编写校验规则文件即可,校验规则文件指定每个表单域应该满足怎么的规则。l 需求:表单验证. name和pass只能是字母、数字和下划线,且长度必须在4到25之间;. age必须在1-150之间;. birth必须在1900-01-01 2050-02-21之间。l 为action指定校验文件. actionclassname-validation.xml. 保存在与action class文件相同的路径下l 编写输入校验文件:com.opensymphony.xwork2.validator.validators下的default.xml中找到true必须输入名字您输入的用户名只能是字母和数字,且长度必须在4到25之间true必须输入密码您输入的密码只能是字母和数字,且长度必须在4到25之间1150年纪必须在1到150之间1900-01-012050-02-21生日必须在$min到$max之间l 校验过程. 当输入校验失败后,struts2将返回名为“input”的逻辑视图,因此需要配置。. 校验成功后,执行action中相应的方法。l 显示校验错误. l 提示. 类型转换失败的提示消息,输入校验的提示消息都被封装成fielderror,并被放入actioncontext中,并且校验失败后都返回“input”逻辑视图,都可以使用标签输出错误提示。. 如果开发者使用了struts2标签来生成表单,则表单标签会自动输出错误提示。. 以上校验规则对action中所有处理逻辑有效。3.国际化提示消息l 为标签指定key属性,该属性指定的是国际化提示消息对应的key。. . $gettext(name.requried)4.短路校验器l 元素可以指定short-circuit属性,这个属性指定该校验器是否是短路校验器,默认值为false。l 对应同一个字段内的多个校验器,如果一个短路校验器失败,其他校验器都根本不会继续校验。5.校验文件的搜索规则l 一个action中可能包含多个处理逻辑,struts2允许为不同的处理逻辑指定不同的校验规则l 例如:一个action既处理login又处理registerl 为校验规则文件名增加actionalias来指定需要校验的具体处理逻辑. actionclassname-actionalias-validation.xml. registeraction-login-validation.xmll struts2搜索校验规则文件的顺序为. baseactionclassname-validation.xml. baseactionclassname -baseactionalias-validation.xml. actionclassname-validation.xml. actionclassname-actionalias-validation.xml. 自上而下,起作用的校验规则是所有校验规则之和,如果两个校验规则文件中指定的校验规则冲突,则使用下面文件中的校验规则6.内建校验器l struts2提供了大量的内建校验器,可以满足大部分应用的校验需求l 必填校验器required:指定的字段必须有值name must not be nulll 必填字符串校验器requirestring:字段值必须非空且长度大于0truename is requiredl 整数校验器int:包括int,short,long,要求字段的整数值必须在指定的范围内5150l 日期校验器date:要求字段的日期必须在指定的范围内1900-01-012050-02-21l 字段表达式校验器fieldexpression:要求指定字段满足一个逻辑表达式,当表达式返回true时,通过校验,否则校验失败。l 邮件地址校验器email:要求字符串如果非空,则必须是合法的邮件地址l 网址校验器url:要求字符串如果非空,则必须是合法的url地址l 转换校验器conversion:检查被检查字段在类型转换过程中是否出现错误。truel 字符串长度校验器stringlength:被检查字段的长度必须在指定的范围之内420l 正则表达式校验器regex:被检验字段是否匹配一个正则表达式7. 手动完成输入校验l 手动编程实现对所有方法的校验. 重写validate()方法. 校验失败调用addfielderror方法. 如果struts2发现系统的fielderror不为空,将会自动跳转到input逻辑视图. 配置input视图. 使用输出校验失败信息l 手动编程实现对特定方法的校验. 重写validatexxx()方法. xxx为action对应的处理逻辑方法. 如果同时重写了validate()和validatexxx()方法,则两个方法都会起作用,先调用validatexxx(),再调用validate()l validate()和validatexxx()方法中添加的fielderror,struts表单标签不会自动显示这些fielderror提示,必须使用标签显示输出错误提示。8. struts2输入校验的流程. 类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成action的属性值。. 在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到actioncontext中,co
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位e类课件
- 公司消防安全培训制度课件
- 《窗》泰格特获奖课件
- 销售上半年的工作总结
- 领导汇报职业规划
- 患者呕吐用药护理规范
- 广东省湛江市霞山区2023-2024学年高一上学期第一次月考生物试卷及答案
- 总经办月工作总结
- 行政部门月度汇报
- 2025私募股权投资合同委托监管协议范本
- 部队军事体能训练课件
- 狗猫鼠全文赏析课件
- 国有企业外部董事个人履职报告
- 船舶拆解资金管理办法
- 增值税发票培训知识课件
- 2025年对酒驾醉驾问题谈心谈话记录内容范文
- 【《以儿歌为载体的小班幼儿生活自理能力提升路径分析》11000字】
- 2025年《3~6岁儿童学习与发展指南》试题(+答案)
- 2025年秋招:中国银行笔试题库及答案
- 2025年汽车驾驶员(技师)考试试题及答案(含答案)
- 微生物-昆虫互作机制-洞察及研究
评论
0/150
提交评论