Struts1---从入门到精通.ppt_第1页
Struts1---从入门到精通.ppt_第2页
Struts1---从入门到精通.ppt_第3页
Struts1---从入门到精通.ppt_第4页
Struts1---从入门到精通.ppt_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

Struts 开源MVC框架 成为软件行业的武林高手 少林派 照着练 注重根基 循序渐进多学 多练 多思 多改 武当派 想着练 善长技巧 以柔克刚多掌握一些编程技巧 多去考虑一下性能 效率 重构一些代码 多分析一下代码的优劣性逍遥派 创新练 任意发挥 注重人性化设计 如何让使用者更易上手 更易于使用 注重美感 交互性强 注重哪种架构 语言 的优劣选择 编程软件就是设计一件艺术作品 Struts1Lession1 为什么要用SSH框架使用框架 可以让我们更简单的开发 更容易的架构项目 更好的提升程序性能 Struts工作流程第一个struts程序 多层架构概述 JAVAEE开发的体系结构 管理模型层spring Controller控制层1 Servlet2 Struts1 MVC 3 Struts2 webwork Hibernate mybatis DB DAO PO View视图层JspHtmlflash Service 多层架构概述 分层的目的 将显示 业务逻辑 数据访问等功能完全分开 避免相互之间的影响 实现模块间的松耦合 简化维护成本 所谓 耦合 指将两个元素像链子一样连接在一起 在软件领域 耦合 一般指软件组件之间的依赖程度 呈现层 用struts实现MVC 业务逻辑层 用spring持久化层 用hibernate Struts是什么 Struts的目标是提供一个开发Web应用的开源框架 Struts鼓励基于M2模式 即MVC设计模式 来开发程序 回顾Model1设计模式以JSP为中心的开发模型 称为Model1 JSP JAVABEAN 1 业务逻辑与表示逻辑混和 不利维护与重用 2 HTML中嵌入了大量的JAVA代码3 验证 流程控制 更新程序的状态全部在JSP中完成回顾Model2设计模式ModelViewController MVC MVCMVC是一种设计模式M是指数据模型 V是指用户界面 C则是控制器 使用MVC的目的是将M和V的实现代码分离C确保M和V的同步 用来控制M层和V层 一旦M改变 V应该同步更新 被推荐为Sun公司J2EE平台的设计模式 Struts实现的MVC框架 web xml Struts框架组件 ActionServlet类控制导航流 ActionServlet根据URI来决定哪个Action类被用于处理请求 Action可以校验输入 并访问业务层以便从数据库检索信息 Action需要知道页面提交了哪些内容 所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中 并传入Action Action在完成业务逻辑后 返回一个ActionForward对象 ActionServlet根据ActionForward对象中的路径来调用页面完成响应 Struts将这些信息绑定在一个ActionMapping对象中 一个ActionMapping对应一个请求URI 当请求路径到达的时候 ActionServlet就会查询ActionMapping对象 ActionMapping对象将告诉ActionServlet哪个Action类会被调用 哪个ActionForm类被用于传递页面数据以及哪些ActionForward将被用于转向 Action ActionForm ActionForward等 Struts通过一个配置文件 struts config xml文件来定义 Stringpath request getRequestURI path path subString path indexOf 1 path lastIndexOf 开始一个Struts项目 在Apache网站上下载Struts 将文件解压 将lib路径下的所有JAR文件复制到Web应用的WEB INF lib路径下 http www apache org官方网站http struts apache org 下载struts例 http struts apache org download cgi struts13101 31版本或在MyEclipce的集成环境中加载Struts的JAR文件 第一个Struts项目 实现用户登录操作 配置ActionServlet 配置ActionServlet 修改web项目的web xml文件 添加如下Servlet映射配置 actionorg apache struts action ActionServletconfig WEB INF struts config xml2action do 可选 没有单位 表示的是服务器启动的时候初始化加载的顺序 数值越大 加载优先级别越低 如果我们在web服务器启动的时候加载多个程序 那么就用这个数值的相对大小来确定那几个程序的加载顺序 给容器一个actionservlet的权重 如果设置为2 则允许其他servlet在需要的时候首先装入这段告诉容器将匹配 do格式的文件请求转发到actionservlet 这就是我们所配的action 不匹配这种格式的文件请求将不被struts处理 参数 config缺省值 WEB INF struts config xml说明 包含配置信息的xml文件上下问相关路径参数 debug缺省值 0说明 调试的详细级别 控制针对这个servlet将记录多少信息 接受的值为0 off 和1 最不严格 直到6 最严格 大多数struts组件设置为级别0或2参数 detail缺省值 0说明 用来处理应用配置文件的Digester的调试详细级别 接受的值为0 off 和1 最不严格 直到6 最严格 编写几个必要的文件 一个ActionForm UserForm 填充页面表单封装成一个类一个Action LoginAction 通过action调用业务逻辑 转发等操作进行处理struts config xml文件Struts核心配置文件 JSP页面登录页面 login jsp 成功页面 welcome jsp 失败页面 error jsp 创建struts config xml 在WEB INF目录下创建struts config xml文件 并添加如下内容struts config xml文件 是由ActionServlet读取的配置文件 它定义了所有关于Action ActionForm ActionForward等的详细信息 创建ActionForm ActionForm是一个JavaBean 需继承org apache struts action ActionForm类 它捕获通过HTTP请求传送的参数ActionForm针对每个HTML表单中的字段具有一个对应的属性ActionServlet匹配请求中的参数和ActionForm中的属性 并调用ActionForm中的setter方法 将参数传入ActionFormActionForm中的内部属性全部定义为私有的 private 并通过公共 public 的getter setter方法来访问 创建Action Action是一个Java类 需继承org apache struts action Action类ActionServlet将会组装ActionForm 并将它传递给ActionAction通常负责 输入校验调用业务逻辑类执行业务逻辑操作决定返回哪个ActionForward 添加ActionForm配置 在struts config xml文件中 在标签的内部 添加如下配置 标签内部可以包含多个标签标签必须指定name和type属性name属性是给此ActionForm一个标识名称type属性指定了此ActionForm是哪个类 必须是全路径的类名 添加Action配置 在struts config xml文件中 紧接着标签的下面 添加对LoginAction的配置 标签可以配置的重要属性包括path 从页面上通过一个什么样的URL路径来访问Action 不包含 do type 访问这个URL的时候 调用哪个Action类 这是Action的全路径类名name 这个属性用来标识哪个ActionForm将被创建 并将提交的表单组件给它scope FormBean的作用域范围 可以取值为session和request 一般取值都是request 创建jsp文件 创建login jsp文件 添加一个表单 action为login do 这个login do的意思 将会告诉struts的ActionServlet 它将需要调用哪个Action来处理这个表单的请求 创建welcome jsp文件 输入登录成功的欢迎信息创建error jsp文件 输入登录失败的提示信息 运行流程 从浏览器输入地址 http localhost 8080 StrutsDemo login jsp Tomcat将按通常情况来处理这个JSP并返回浏览器 提交表单 实际上是提交到了这样一个URL地址 http localhost 8080 StrutsDemo login do Tomcat将会根据web xml的配置 将这个请求发送给相应的Servlet 在我们的应用中 Tomcat将会把这个请求发送给org apache struts action ActionServlet这个类 然后ActionServlet根据struts config xml的配置信息 调用LoginAction对象去处理这个请求 在此之前 它会将页面表单的请求数据封装到UserForm对象中 并传递给LoginAction LoginAction返回一个ActionForward对象 包含了将要转向的路径信息 ActionServlet根据这个ActionForward对象所包含的路径信息 调用相应的页面去执行响应 运行流程图 Struts1lession2 Struts与mvc单例模式Struts中的标签html bean logicStruts中的国际化 Struts与MVC 视图 View 在使用Struts框架的web应用程序中 JSP以及相关的技术 如Taglib 等共同组成视图层 这一层的主要职责是显示用户界面 Struts提供了很多机制让我们能更加轻松地创建视图控制器 Controller Struts中 ActionServlet是控制器层组件模型 Model 模型包括 系统的内部状态以及改变系统状态的动作Struts中的Action和ActionForm是模型的一部分Struts建议把 做什么 Action 和 如何做 业务逻辑 相分离 创建业务逻辑处理类 使用单例模式 Singleton 来创建业务逻辑处理类将Action中的业务处理代码移到这个类中创建一些异常处理类 由这个类来产生 由Action来捕获 一般Singleton模式通常有几种形式 publicclassSingleton privateSingleton 注意这是private只供内部调用privatestaticSingletoninstance newSingleton 这里提供了一个供外部访问本class的静态方法 可以直接访问publicstaticSingletongetInstance returninstance 第二种形式 publicclassSingleton privateSingleton privatestaticSingletoninstance null publicstaticsynchronizedSingletongetInstance if instance null instance newSingleton returninstance 页面之间数据的传递 如何将数据从Action中传递到下一个JSP页面 一般使用request setAttribute方法 在Action中 使用request setAttribute Stringname Objectdata 方法往request中设置参数在JSP中 使用request getAttribute Stringname 来获取相应的参数 容器接收页面请求 Struts的核心组件是ActionServlet 像其它所有Servlet一样 它是生存在容器中的 比如Tomcat WebLogic等 当容器启动的时候 它会读取web xml文件 部署描述符 告诉容器它会装入哪些Servlet一个标准的Servlet是通过servlet mapping来设定 哪些请求 将会被提交到哪些servlet中Struts的servlet mapping配置一般是 action do这样配置的意思是 任何以 do结尾的URL请求 都会被发送到ActionServlet进行处理 Struts标签库 Jsp页面应该避免使用java脚本 因为这些脚本会大大降低jsp页面的可读性 但jsp页面依然需要具备动态输出的功能 通过标签可以完成表现层的输出Struts主要提供了如下3个标签库html 用于生成html的标签bean 用于完成程序国际化 输出ActionForm的属性值等logic 用于完成循环 选择流程控制等在web xml中引入标签库定义 然后在每个JSP文件中引入 或者无需在web xml中定义 但在JSP文件中添加如下声明 html标签 html标签使用struts的html标签最终将被解释为标准的html标签 里面的标签基本上都和html标签一一对应建议以后使用struts自带的html标签用户名密码性别男女爱好篮球看书睡觉编程 备注提交or清除取消 bean标签 bean标签输出bean里面的属性值将某个bean中的属性定义成脚本可以访问的变量输出国际化信息会自动查找struts config xml中配置的资源文件中的hello这个键的值 用来定询问变量a1 它的值是hello写出a1变量的值 logic标签 logic标签存在是否包含给定的字符串 indexId index 在四种作用域中能够找到变量list 直接写在name后面 Struts标签通用属性 Struts1lession3 选学国际化问题 I18N问题 Struts处理消息Struts处理异常Struts验证框架Form验证Action验证 I18N问题 什么是I18N问题 在英文中 国际化 Internationalization 被缩写为I18N 即只取首尾两个字母 中间字母为18个有哪些问题 页面字符串硬编码异常消息的硬编码提示信息的硬编码 Java如何支持I18N java程序的国际化主要通过如下3个类完成java util Localejava util ResourceBundlejava text MessageFormat将程序中的标签和提示等信息放在资源文件中 每个程序需要所有支持的国家和语言 都必须提供对应的资源文件 资源文件是key value对 每个资源文件中的key是不变的 但value则随不同国家和语言而变化资源文件的命名要规范 myMessage properties 默认的资源文件 myMessage zh CN properties 简体中文的资源文件 myMessage en US properties 英文的资源文件 资源文件要用native2ascii工具进行转换 Java如何支持I18N java程序示例 取得缺省的LocaleLocalel Locale getDefault 绑定资源文件ResourceBundlerb ResourceBundle getBundle myResource l System out println rb getString error empty name 格式化消息文本MessageFormatmf newMessageFormat rb getString error time System out println mf format newObject newDate 国际化后台示例 LocalecurrentLocale Locale getDefault System out println defaultcountry currentLocale getCountry System out println defaultlanguage currentLocale getLanguage currentLocale newLocale en US currentLocale newLocale zh CN ResourceBundlerb ResourceBundle getBundle com fd struts ApplicationResources currentLocale MessageFormatmf newMessageFormat rb getString notNull System out println mf format newObject 密码 Struts如何支持I18N 需要在struts配置文件中指定资源属性文件的位置和名称 如在JSP页面中使用来输出文本 以避免硬编码message resources中parameter的值 可以指定资源文件的位置和名称表示在类路径根目录 WEB INF classes目录 下有myResources XX XX properties文件表示在类路径根目录下 有一个resources目录 在这个resources目录中存放着所有的myResources XX XX properties资源属性文件 Struts如何支持I18N struts利用在session中存放一个Locale对象来达到设置当前语言的目的默认的情况下 struts根据网页向后台提交时所包含的语言编码信息来提供缺省的Locale对象 这就是我们为什么可以通过更改网页显示语言设置 就能显示不同的语言文字的原因 struts在session中存放的这个Locale对象 取值 org apache struts Globals LOCALE KEY Struts消息处理 为什么需要消息处理 比如登录成功的提示比如创建失败的提示等等 总之 程序总是要通过界面来跟用户交互 所以 在交互的过程中 就产生了众多的消息文本struts提供了专门的处理机制 来将这些消息文本国际化 避免消息文本的硬编码消息处理 就是在Action和JSP之间传递的消息文本的处理 区别于JSP页面硬编码文本的消息 JSP页面消息可以使用标签来处理 Struts交互消息 是通过ActionMessages等对象 以及相应的标签来处理的 如何创建消息对象 ActionMessages与ActionMessage对象ActionMessages对象是ActionMessage对象的集合一个ActionMessage对象 代表一个国际化消息文本 字符串 如何创建ActionMessages对象 ActionMessagesmessages newActionMessages 如何创建ActionMessage对象 ActionMessagemsg newActionMessage key 其构造方法带的参数 就是一个在资源属性文件中的key 所以 它能表示一个国际化消息文本如何将ActionMessage对象添加到ActionMessages对象中 messages add message id msg 第一个参数 message id 表示本ActionMessage对象在ActionMessages对象中区别于其它ActionMessage对象的标识符 消息对象如何传递 首先要决定的是 要传递的消息是普通消息还是错误消息 普通消息 即普通的消息文本错误消息 即提示错误的消息文本本质上 这两种消息没有什么区别 都是消息文本 但是如果一个页面同时需要显示普通的消息文本和错误消息文本的时候 就需要进行区分了 比如不同类型的消息文本可能要用不同的样式来显示通过一句简单的代码 将ActionMessages对象保存到HttpServletRequest对象中保存普通消息 this saveMessages request messages 保存错误消息 this saveErrors request messages 这就是调用父类 Action 所提供的方法saveMessages saveErrors 来保存消息对象实际上 父类的saveMessages 方法 将消息对象保存在了request中 并命名为Globals MESSAGE KEYsaveErrors 方法 将消息对象保存在了request中 并命名为Globals ERROR KEY 标签 标签只显示错误消息标签与标签类似 但无id属性标签通过提供header footer属性以及prefix suffix属性来定制每条消息的显示格式header footer 定义整个错误消息显示之前 之后 要显示的内容 这些内容也是在资源属性文件中定义的一些key值 默认的情况下 它们的取值分别为 errors header和errors footerprefix suffix 定义每条错误消息显示之前 之后 要显示的内容 这些内容也是在资源属性文件中定义的一些key值 默认的情况下 它们的取值分别为 errors prefix和errors suffix举例如下 errors header errors prefix errors suffix errors footer Struts的异常自动处理机制 编程式异常处理即我们在Action中调用业务逻辑层对象的方法时 用try catch的方式来截获异常之后 手工对异常进行处理我们以前的开发过程中 都是使用编程式的异常处理在编程式异常处理的时候 我们可以使用struts的消息处理机制来对这些异常信息进行处理自动异常处理机制即在Action中不捕捉异常 而是将异常抛出给struts框架处理我们需要在配置文件中指示struts如何处理这些被抛出的异常使用元素来定义自动异常处理 元素的配置及使用 元素的配置 指示了struts如何处理异常的方式在通常的情况下 我们得到异常以后 需要将页面导航到一个错误提示的页面 提示错误信息元素配置的关键属性是 key 即这个异常所对应的错误提示消息文本的key 这个key的值 需要在资源属性文件中进行定义type 即定义需要处理哪种类型的Exceptionpath 定义一旦出现异常 需要转向哪个页面来进行提示 如果不定义path属性 默认情况下 将使用Action配置中的input属性的值来作为转向的页面如何显示错误消息 在JSP页面中 使用标签 即可将其异常对应的错误消息文本进行显示 publicclassByZeroExceptionextendsException publicByZeroException Stringmessage super 除零异常 页面中 ActionForm对象 ActionForm的要求必须扩展自org apache struts action ActionForm如果要获取表单的值 必须定义与表单元素一一对应的属性如果要求在将ActionForm传递到Action之前进行校验 必须实现validate方法如果想要在组装前初始化属性 必须实现reset方法DynaActionForm使用动态ActionForm 可以完全不再需要书写ActionForm 所有ActionForm只需要在struts config xml文件中配置即可元素属性 name type进一步了解ActionForm对象ActionForm作为表单字段收集器ActionForm作为类型转换器 所有从表单提交到后台的数据均为字符串类型 利用ActionForm自动转换int double boolean等数据类型 ActionForm可以被其它bean或者过程作为数据载体 动态ActionForm 使用动态Form实现用户登录 以配置的方式创建Form 从动态Form中取值 演示示例 使用动态Form开发 用户登录 功能 ActionForm数据校验 ActionForm的代码校检重写ActionForm的validate方法若有错误 把错误消息封装在ActionMessage对象里将多个ActionMessage组合成ActionErrors对象应对action配置input属性jsp页面使用标签输出出错提示结合commons validator jar的校验编写ActionForm使其继承ValidatorForm 编写校验规则文件 validator rules xml和validations xml由配置action的input属性在struts config xml文件中配置元素 负责加载校验规则文件加载国际化资源文件 在JSP页面使用标签 ActionForward对象 ActionForward能做什么 ActionForward会回传给ActionServletActionForward中的路径 可以是一个带参数的URIActionForward的属性namepathredirect全局ActionForward与局部ActionForward 规则 先在局部找 局部没有的话 再到全局找 元素 name path redirect动态创建ActionForward将ActionForward定义在一个Struts配置文件中是个好的选择 但也可以在Action中动态创建ActionForward 而不需要在配置文件中指定 例如 ActionForwardforward newActionForward chap08 welcome jsp ActionMapping对象 理解ActionMappingpath action的访问路径 以 开头type action的完整类名name 与action关联的formbean的标识IDscope 与action关联的formbean的存在范围 request session默认 validate 是否调用validate方法校验input 校验失败转向的路径unknow 处理用户发出的无效ActionURLparameterforwardinclude scope属性 在Action映射配置中 scope属性可以取值为 request或sessionscope属性表示 Struts框架在将ActionForm对象 与目标Action匹配的ActionForm 传送到Action之前 会将ActionForm对象保存的位置如 scope request 配置 将指示struts调用request setAttribute ActionForm名称 ActionForm对象 方法 将ActionForm对象保存到request 其中 ActionForm名称与struts config xml配置中的ActionForm名称一致 如 其中addForm就是其名称 Action对象 如果应用需要保存一个记录到数据库中 典型的过程可能是ActionForm捕获输入ActionMapping配置ActionAction将输入送到数据库中 通常会将这一步操作委托给业务逻辑类去实现 ActionForward提供一个链接到输入页面J2EE是一个多线程的环境 服务器针对每个请求启动一个线程来处理 所以有可能会有多个线程同时访问一个Servlet实例的情况 在Struts里面也是一样的 有可能会有多个线程同时访问一个Action实例的情况 所以必须保证Action类中的方法具有 可重入性 即不能在Action的方法里改变实例变量的值 Action的主要职责校验输入数据调用业务逻辑方法检测处理异常根据逻辑进行转向操作 几种不同的Action DispatchAction 该Action可以在一个action内同时完成多个acti

温馨提示

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

评论

0/150

提交评论