第1讲 搭建Struts2环境与简单应用开发.doc

上传人:文库蛋蛋多 文档编号:2387594 上传时间:2023-02-17 格式:DOC 页数:45 大小:1.15MB
返回 下载 相关 举报
第1讲 搭建Struts2环境与简单应用开发.doc_第1页
第1页 / 共45页
第1讲 搭建Struts2环境与简单应用开发.doc_第2页
第2页 / 共45页
第1讲 搭建Struts2环境与简单应用开发.doc_第3页
第3页 / 共45页
第1讲 搭建Struts2环境与简单应用开发.doc_第4页
第4页 / 共45页
第1讲 搭建Struts2环境与简单应用开发.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《第1讲 搭建Struts2环境与简单应用开发.doc》由会员分享,可在线阅读,更多相关《第1讲 搭建Struts2环境与简单应用开发.doc(45页珍藏版)》请在三一办公上搜索。

1、第1讲 搭建Struts2环境与简单应用开发1. Struts2框架l Struts2由传统的Struts1和WebWork两个经典MVC框架发展而来l Struts2是一个非常优秀的MVC框架2. MVC思想概述MVC思想将应用中各组件按功能进行分类,不同的组件使用不同技术充当,甚至推荐了严格分层,不同组件被严格限制在其所在层内,各层之间以松耦合的方式组织在一起,从而提供良好的封装。Model1(JSP+JavaBean):JSP页面接收处理客户端请求,对请求处理后直接做出响应。用少量的JavaBean来处理数据库连接、数据库访问等操作。JSP页面身兼View和Controller两种角色,

2、将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性低,增加了应用的扩展和维护的难度。Model2(JSP+Servlet+JavaBean):属于MVC架构的设计模式。MVC思想将一个应用分为三个基本部分:Model(模型)、View(视图)、Controller(控制器),这三个部分以最少的耦合协同工作,从而提高应用的可扩展性和维护性。MVC有如下特点:l 多个视图对于一个模型,一旦模型发生变化,易于维护;l 模型返回的数据与显示逻辑分离;l 应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性;l 控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因

3、此,控制层可以说是包含了用户权限的概念;l MVC更符合软件工程化管理的精神。3. Struts2的下载和安装下载并搭建Struts2环境:(1). 下载Struts2.2.1;(2). 找到开发Struts2应用需要使用到的jar文件;(3). 编写Struts2的配置文件;(4). 在web.xml中加入Struts2框架的启动配置。开发Struts2最少需要的jar文件:(1). struts2-core-2.2.1.1.jar:Struts2框架的核心类库;(2). xwork-core-2.2.1.1.jar:XWork类库,Struts2在其上构建;(3). ognl-3.0.ja

4、r:对象图导航语言(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

5、的配置文件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的内容后,

6、以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 只有当包都继承了st

7、ruts-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

8、 表单+Actionl Struts标签+Actionl 国际化总结:l 添加国际化配置l 添加国际化文件mess.properties、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). 配置处

9、理结果和物理视图资源之间的对应关系。(6). 编写视图资源。如果Action需要把数据传给视图资源,则可以借助于OGNL表达式。2.Struts2的处理流程l 控制器包括核心控制器和业务控制器l 业务控制器与物理视图解耦:若需要将某个视图名映射到不同视图资源,无须修改XxxAction的代码,只需修改配置文件。3.Struts常量配置l struts.i18n.encoding:指定Web应用的默认编码集,相当于request.setCharacterEncoding()。l struts.custom.i18n.resources:指定国际化资源文件的baseNamel struts.act

10、ion.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路径下的defa

11、ult.properties文件中定义。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 通过struts.properties文件n 通过

12、web.xml文件l Struts2的所有配置文件(包括用户自定义配置文件)都可以用来配置常量,推荐struts.xmll Struts2搜索常量的顺序为struts-default.xml、struts-plugin.xml、struts.xml、struts.properties、web.xml,如果在多个文件中配置了同一个Struts2常量,则后一个会覆盖前一个4.包含其他配置文件l 为了避免struts.xml文件过于庞大,提高struts.xml文件的可读性,可以将一个struts.xml文件分解成多个配置文件,在struts.xml中包含其他配置文件l 第3讲 实现和配置Actio

13、n1.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、Htt

14、pServletSession和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 ActionCo

15、ntext 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 ServletContextA

16、ware:实现接口的Action可以直接访问ServletConext实例n ServletRequestAware:实现接口的Action可以直接访问HttpServletRequest实例n ServletResponseAware:实现接口的Action可以直接访问HttpServletResponse实例l 实例:通过HttpServletResponse为系统添加Cookie对象,实现自动登录l 即使获得HttpServletResponse对象,也不要尝试直接在Action中对客户端生成响应4.使用ServletActionContext访问Servlet API5. 配置Acti

17、onl 包和命名空间n Struts2使用包来组织Action,Action是Struts2的基本“程序单位”n 配置元素时必须指定name属性,该属性是引用该包的唯一标识n extends属性值必须是另一个包的name属性n 因为Struts2的配置文件是从上到下处理的,所以父包应该在子包前面定义n 命名空间主要是为了处理同一个Web应用中包含同名Action的情形。同一个命名空间里不能有同名的Action,不同命名空间里可以有同名的Actionn Struts搜索命名空间的顺序u 命名空间只有一个级别。如果请求的URL是/bookservice/search/get.action,系统将先

18、在/bookservice/search的命名空间(存在)下查找名为get的Action,如果在该命名空间内找到名为get的Action,则由该Action处理用户请求;如果在该命名空间内没有找到名为get的Action,系统将直接进入默认的命名空间中查找名为get的Actin,而不会在/bookservice的命名空间下查找名为get的Action。u 默认命名空间和根命名空间的区别:默认命名空间可以处理任何命名空间下的Action请求,根命名空间只会处理根命名空间下的请求。l Action的基本配置n 定义元素时,需要指定name属性,name默认不允许使用“/”,如果想使用“/”,需要设

19、置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 通配符可以在met

20、hod、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结

21、果类型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包含了与全局结

22、果同名的结果集,则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 抛出MyEx

23、ception和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. 输出带占位符的国际化消息

24、l 在JSP页面中填充国际化消息里的占位符 l 在Action中填充国际化消息里的占位符. getText(String aTextName,List args). getText(String key, String args)4. 加载资源文件的方式l 包范围资源文件. 在包的根路径下建立多个文件名为package_lauguage_country.properties的文件. Action优先使用包范围的资源文件l Action范围资源文件. 在Action类所在路径建立ActionName_language_country.properties文件. Action优先加载Action范

25、围资源文件. 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 f

26、loat和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属性

27、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

28、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支持三种方式来注册类型转

29、换器. 注册局部类型转换器:仅仅对某个Action的属性起作用. 注册全局类型转换器:对所有Action的特定类型的属性都会生效. 用注解来注册类型转换器:通过注解方式来注册类型转换器l 局部类型转换器. 注册局部类型转换器使用局部类型转换文件指定. 局部类型转换文件的文件名应为ActionName-conversion.properties形式. 类型转换文件应该和Action类文件放在相同的位置. 内容:=l 全局类型转换器. 全局类型转换器对指定类型的属性起作用. 文件名:xwork-conversion.properties. 放在WEB-INF/classes路径下. 内容:=l 用

30、注解注册类型转换器. TypeConversion(converter=com.xawx.web.converter.HyphenConverter)6. 基于Struts2的自定义类型转换器l Struts2提供了一个StrutsTypeConverter抽象类,该抽象类是DefaultTypeConverter的子类,StrutsTypeConverter类简化了类型转换器的实现public class UserConverter extends StrutsTypeConverter /实现将字符串类型转换成复合类型的方法public Object convertFromString(M

31、ap 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,

32、Object o)/将需要转换的值强制类型转换为User实例User user = (User) o;return ;第7讲 Struts2的输入校验1.关于输入校验l 为什么学习输入校验?. 输入校验是所有Web应用必须处理的问题。. 通过输入页面收集的数据既有正常用户的误输入,也有恶意用户的恶意输入。. 健壮的系统必须将这些非法输入阻止在应用之外,防止非法输入进入系统。l 输入校验:捕获异常输入时,应用程序直接返回,提示浏览者必须重新输入。l 输入校验分为客户端校验和服务器端校验。. 客户端校验:过滤正常用户的误操作,主要通过JavaScript代码完成。. 服务器端校验:通过在应用中编程

33、实现,是整个应用阻止非法数据的最后防线。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.opensympho

34、ny.xwork2.validator.validators下的default.xml中找到!DOCTYPE validators PUBLIC -/OpenSymphony Group/XWork Validator 1.0.3/ENtrue必须输入名字您输入的用户名只能是字母和数字,且长度必须在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。. message key

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号