Struts1---从入门到精通.ppt

上传人:豆**** 文档编号:25011300 上传时间:2022-07-09 格式:PPT 页数:67 大小:1.30MB
返回 下载 相关 举报
Struts1---从入门到精通.ppt_第1页
第1页 / 共67页
Struts1---从入门到精通.ppt_第2页
第2页 / 共67页
点击查看更多>>
资源描述

《Struts1---从入门到精通.ppt》由会员分享,可在线阅读,更多相关《Struts1---从入门到精通.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、成为软件行业的武林高手成为软件行业的武林高手少林派少林派 (照着练照着练)注重根基,循序渐进注重根基,循序渐进多学,多练,多思,多改。多学,多练,多思,多改。武当派武当派 (想着练想着练)善长技巧,以柔克刚善长技巧,以柔克刚多掌握一些编程技巧,多去考虑一下性能,效率,重构一些代码多掌握一些编程技巧,多去考虑一下性能,效率,重构一些代码,多分析一下代码的优劣性多分析一下代码的优劣性逍遥派逍遥派 (创新练创新练)任意发挥,注重人性化设计(如何让使用者更易上手,更易于使任意发挥,注重人性化设计(如何让使用者更易上手,更易于使用)用),注重美感(交互性强),注重哪种架构(语言)的优劣选择,注重美感(交

2、互性强),注重哪种架构(语言)的优劣选择,编程软件就是设计一件艺术作品。编程软件就是设计一件艺术作品。Struts1 Lession 1Struts1 Lession 1为什么要用为什么要用SSH框架框架 使用框架,可以让我们更简单的开发,更容易的架构项目,更好的提升程序性能.Struts工作流程工作流程第一个第一个struts程序程序多层架构概述多层架构概述JAVA EE开发的体系结构开发的体系结构管理模型层管理模型层springController控制层控制层1、Servlet2、Struts1(MVC)3、Struts2(webwork)Hibernate(mybatis)DBDAOPO

3、View视图层视图层JspHtmlflashService多层架构概述多层架构概述分层的目的:分层的目的:将显示、业务逻辑、数据访问等功能完全分开,避免相将显示、业务逻辑、数据访问等功能完全分开,避免相互之间的影响,实现模块间的松耦合,简化维护成本互之间的影响,实现模块间的松耦合,简化维护成本。所谓所谓“耦合耦合”,指将两个元素像链子一样连接在一,指将两个元素像链子一样连接在一起。在软件领域,起。在软件领域,“耦合耦合”一般指软件组件之间的一般指软件组件之间的依赖程度。依赖程度。 呈现层:用呈现层:用struts实现实现MVC 。业务逻辑层:用业务逻辑层:用spring持久化层:用持久化层:用

4、hibernateStrutsStruts是什么?是什么?Struts的目标是提供一个开发的目标是提供一个开发Web应用的开源框架。应用的开源框架。Struts鼓励基于鼓励基于M2模式(即模式(即MVC设计模式)来开发程序。设计模式)来开发程序。回顾回顾Model1设计模式设计模式以以JSP为中心的开发模型,称为为中心的开发模型,称为Model1(JSP+JAVABEAN )。1.业务逻辑与表示逻辑混和,不利维护与重用。业务逻辑与表示逻辑混和,不利维护与重用。2. HTML中嵌入了大量的中嵌入了大量的JAVA代码代码3.验证、流程控制、更新程序的状态全部在验证、流程控制、更新程序的状态全部在J

5、SP中完成中完成回顾回顾Model2设计模式设计模式ModelViewControllerMVCMVCMVCMVC是一种设计模式是一种设计模式M是指是指数据模型数据模型,V是指是指用户界面用户界面,C则是则是控制器控制器。使用使用MVC的目的是将的目的是将M和和V的实现代码分离的实现代码分离C确保确保M和和V的同步,的同步,用来控制用来控制M层和层和V层层,一旦,一旦M改变,改变,V应该同步更新。应该同步更新。被推荐为被推荐为Sun公司公司J2EE平台的设计模式。平台的设计模式。StrutsStruts实现的实现的MVCMVC框架框架 web.xmlStrutsStruts框架组件框架组件Ac

6、tionServlet类控制导航流。类控制导航流。ActionServlet根据根据URI来来决定哪个决定哪个Action类类被用于处理请求,被用于处理请求,Action可以可以校验输入校验输入,并访问业务层以便从,并访问业务层以便从数据库检索信息。数据库检索信息。Action需要知道页面提交了哪些内容,所以由需要知道页面提交了哪些内容,所以由ActionServlet根据请求根据请求URI来决定来决定将请求参数绑定将请求参数绑定到哪个到哪个ActionForm中,并中,并传入传入Action。Action在完成业务逻辑后,返回一个在完成业务逻辑后,返回一个ActionForward对象对象,

7、ActionServlet根据根据ActionForward对象中的对象中的路径来调用页面完成响应路径来调用页面完成响应。Struts将这些信息绑定在一个将这些信息绑定在一个ActionMapping对象对象中,一个中,一个ActionMapping对应一个请求对应一个请求URI,当请求路径到达的时候,当请求路径到达的时候,ActionServlet就会就会查询查询ActionMapping对象,对象,ActionMapping对象将对象将告诉告诉ActionServlet哪个哪个Action类会被类会被 调用调用、哪个、哪个ActionForm类被用于传类被用于传 递页面数据以及哪些递页面数

8、据以及哪些ActionForward 将被用于转向。将被用于转向。Action、ActionForm、 ActionForward等,等,Struts通过一通过一 个配置文件:个配置文件:struts-config.xml文件来文件来 定义。定义。String path = request.getRequestURI();path = path.subString(path.indexOf(/, 1), path.lastIndexOf(.);开始一个开始一个StrutsStruts项目项目在在Apache网站上下载网站上下载Struts,将文件解压。将,将文件解压。将lib路径下的所路径下的

9、所有有JAR文件复制到文件复制到Web应用的应用的WEB-INF/lib路径下。路径下。http:/www.apache.org 官方网站官方网站http:/struts.apache.org/下载下载struts例例:http:/struts.apache.org/download.cgi#struts1310 1.31版本版本或在或在MyEclipce的集成环境中加载的集成环境中加载Struts的的JAR文件。文件。第一个第一个Struts项目,实现用户登录操作项目,实现用户登录操作配置配置ActionServletActionServlet配置配置ActionServlet :修改修改w

10、eb项目的项目的web.xml文件,添加如下文件,添加如下Servlet映射配置。映射配置。 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 2 action *.do (可选可选)没有单位,表示的是没有单位,表示的是服务器启服务器启动的时候初始化加载的顺序动的时候初始化加载的顺序, 数值数值越越大大,加载优先级别越,加载优先级别越低低。 如果我如果我们在们在web服务器启动的时候加载多个服务器启动的时候加载多个程序,程序, 那么就用这个数值的相对大那么就用这个数值的相对大小来确定那

11、几个程序的加载顺序。小来确定那几个程序的加载顺序。 给容器一个给容器一个action servlet的权重。如果设置为的权重。如果设置为2,则,则允许其他允许其他servlet在需要的时候首先装入在需要的时候首先装入 这段告诉容器将匹配这段告诉容器将匹配*.do格式的文件请求转发到格式的文件请求转发到action servlet。这就是我们所配的。这就是我们所配的action。不匹配这种格式的文件请求将。不匹配这种格式的文件请求将不被不被struts处理。处理。 参数参数:config 缺省值缺省值:/WEB-INF/struts-config.xml 说明说明:包含配置信息的包含配置信息的x

12、ml文件上下问相关路径文件上下问相关路径 参数参数:debug 缺省值缺省值:0 说明说明: 调试的详细级别,控制针对这个调试的详细级别,控制针对这个servlet将记录多少信息。将记录多少信息。 接受的值为接受的值为0(off)和和1(最不严格最不严格)直到直到6(最严格最严格)。 大多数大多数struts组件设置为级别组件设置为级别0或或2 参数参数:detail 缺省值缺省值:0 说明说明: 用来处理应用配置文件的用来处理应用配置文件的Digester的的调试详细级别调试详细级别。 接受的值为接受的值为0(off)和和1(最不严格最不严格)直到直到6(最严格最严格)。 编写几个必要的文件

13、编写几个必要的文件一个一个ActionForm(UserForm)填充页面表单封装成一个类填充页面表单封装成一个类一个一个Action(LoginAction)通过通过action调用业务逻辑,转发等操作进行处理调用业务逻辑,转发等操作进行处理struts-config.xml文件文件Struts核心配置文件。核心配置文件。JSP页面页面登录页面登录页面 (login.jsp)成功页面(成功页面(welcome.jsp)失败页面(失败页面(error.jsp)创建创建struts-config.xmlstruts-config.xml在在WEB-INF目录下创建目录下创建struts-conf

14、ig.xml文件,并添加如下内容文件,并添加如下内容 struts-config.xml文件,是由文件,是由ActionServlet读取的配置文件,它读取的配置文件,它定义了所有关于定义了所有关于Action、ActionForm、ActionForward等的详细等的详细信息信息创建创建ActionFormActionFormActionForm是一个是一个JavaBean,需继承,需继承org.apache.struts.action.ActionForm类,它类,它捕获捕获通过通过HTTP请求传送的参数请求传送的参数ActionForm针对每个针对每个HTML表单中的字段表单中的字段具

15、有一个对应的属性具有一个对应的属性ActionServlet匹配请求中的参数和匹配请求中的参数和ActionForm中的属性,并中的属性,并调用调用ActionForm中的中的setter方法方法,将参数传入,将参数传入ActionFormActionForm中的中的内部属性内部属性全部定义为全部定义为私有私有的(的(private),并),并通过通过公共公共(public)的的getter/setter方法来访问方法来访问创建创建ActionActionAction是一个是一个Java类,需继承类,需继承org.apache.struts.action.Action类类ActionServl

16、et将会组装将会组装ActionForm,并将它传递给,并将它传递给ActionAction 通常负责:通常负责:输入输入校验校验调用业务逻辑类调用业务逻辑类执行业务逻辑操作执行业务逻辑操作决定返回哪个决定返回哪个ActionForward添加添加ActionFormActionForm配置配置在在struts-config.xml文件中,在文件中,在标签的内部,标签的内部,添加如下配置:添加如下配置: 标签内部可以包含多个标签内部可以包含多个标签标签标签必须指定标签必须指定name和和type属性属性name属性是给此属性是给此ActionForm一个标识名称一个标识名称type属性指定了此

17、属性指定了此ActionForm是哪个类,必须是全路径的类名是哪个类,必须是全路径的类名添加添加ActionAction配置配置在在struts-config.xml文件中,紧接着文件中,紧接着标签的下面,标签的下面,添加对添加对LoginAction的配置:的配置: 标签可以配置的重要属性包括标签可以配置的重要属性包括path-从页面上通过一个什么样的从页面上通过一个什么样的URL路径来访问路径来访问Action(不包(不包含含.do)type 访问这个访问这个URL的时候,调用哪个的时候,调用哪个Action类,这是类,这是Action的的全路径类名全路径类名name 这个属性用来标识哪个

18、这个属性用来标识哪个ActionForm将被创建,并将提交将被创建,并将提交的表单组件给它的表单组件给它scope FormBean的作用域范围,可以取值为的作用域范围,可以取值为session和和request,一般取值都是,一般取值都是request创建创建jspjsp文件文件创建创建login.jsp文件,添加一个表单,文件,添加一个表单,action为为login.do,这,这个个login.do的意思,将会告诉的意思,将会告诉struts的的ActionServlet,它将,它将需要调用哪个需要调用哪个Action来处理这个表单的请求。来处理这个表单的请求。创建创建welcome.j

19、sp文件,输入登录成功的欢迎信息文件,输入登录成功的欢迎信息创建创建error.jsp文件,输入登录失败的提示信息文件,输入登录失败的提示信息运行流程运行流程从浏览器输入地址:从浏览器输入地址:http:/localhost:8080/StrutsDemo/login.jsp,Tomcat将按通常将按通常情况来处理这个情况来处理这个JSP并返回浏览器。并返回浏览器。提交表单,实际上是提交到了这样一个提交表单,实际上是提交到了这样一个URL地址:地址:http:/localhost:8080/StrutsDemo/login.do,Tomcat将会根据将会根据web.xml的配置,将这个请求发送

20、给相应的的配置,将这个请求发送给相应的Servlet,在我们的应,在我们的应用中,用中,Tomcat将会把这个请求发送给将会把这个请求发送给org.apache.struts.action.ActionServlet这个类。这个类。然后然后ActionServlet根据根据struts-config.xml的配置信息,调用的配置信息,调用LoginAction对象去处理这个请求,在此之前,它会将页面表单对象去处理这个请求,在此之前,它会将页面表单的请求数据封装到的请求数据封装到UserForm对象中,并传递给对象中,并传递给LoginAction。LoginAction返回一个返回一个Acti

21、onForward对象,包含了将要对象,包含了将要转向的转向的路径信息路径信息。ActionServlet根据这个根据这个ActionForward对象所包含的路径信息,对象所包含的路径信息,调用相应的页面去执行响应。调用相应的页面去执行响应。运行流程图运行流程图Struts1 lession 2Struts1 lession 2Struts与与mvc单例模式单例模式Struts中的标签中的标签 html,bean,logicStruts中的国际化中的国际化StrutsStruts与与MVCMVC视图(视图(View)在使用在使用Struts框架的框架的web应用程序中,应用程序中,JSP以及

22、相关的技术(如以及相关的技术(如Taglib)等共同)等共同组成视图层组成视图层,这一层的主要职责是,这一层的主要职责是显示用户界面显示用户界面。Struts提供了很多机制让我们能更加轻松地创建视图提供了很多机制让我们能更加轻松地创建视图控制器(控制器(Controller)Struts中,中,ActionServlet是是控制器层组件控制器层组件模型(模型(Model)模型包括:系统的内部状态以及改变系统状态的动作模型包括:系统的内部状态以及改变系统状态的动作Struts中的中的Action和和ActionForm是是模型模型的一部分的一部分Struts建议把建议把”做什么做什么”(Acti

23、on)和和”如何做如何做”(业务逻辑业务逻辑)相分离相分离创建业务逻辑处理类创建业务逻辑处理类使用单例模式使用单例模式(Singleton)来创建业务逻辑处理类来创建业务逻辑处理类将将Action中的业务处理代码移到这个类中中的业务处理代码移到这个类中创建一些异常处理类,由这个类来产生,由创建一些异常处理类,由这个类来产生,由Action来捕获。来捕获。一般一般Singleton模式通常有几种形式模式通常有几种形式:public class Singleton private Singleton()/注意这是注意这是private 只供内部调用只供内部调用private static Sing

24、leton instance = new Singleton();/这里提供了这里提供了一个供外部访问本一个供外部访问本class的静态方法的静态方法,可,可以直接访问以直接访问public static Singleton getInstance() return instance; 第二种形式第二种形式:public class Singleton private Singleton() private static Singleton instance = null;public static synchronized Singleton getInstance() if (instan

25、ce=null)instancenew Singleton();return instance; 页面之间数据的传递页面之间数据的传递如何将数据从如何将数据从Action中传递到下一个中传递到下一个JSP页面?页面?一般使用一般使用request.setAttribute方法:方法:在在Action中,使用中,使用request.setAttribute(String name,Object data)方法往方法往request中设置参数中设置参数在在JSP中,使用中,使用request.getAttribute(String name)来获取相应的来获取相应的参数参数容器接收页面请求容器接收

26、页面请求Struts的核心组件是的核心组件是ActionServlet,像其它所有,像其它所有Servlet一样,一样,它是它是生存在容器中的生存在容器中的,比如,比如Tomcat、WebLogic等,当容器启等,当容器启动的时候,它会读取动的时候,它会读取web.xml文件(部署描述符),告诉容器它文件(部署描述符),告诉容器它会装入哪些会装入哪些Servlet一个标准的一个标准的Servlet是通过是通过servlet-mapping来设定,哪些请求,来设定,哪些请求,将会被提交到哪些将会被提交到哪些servlet中中Struts的的servlet-mapping配置一般是:配置一般是:

27、action *.do 这样配置的意思是:任何以这样配置的意思是:任何以.do结尾的结尾的URL请求请求,都会被发送到都会被发送到ActionServlet进行处理进行处理StrutsStruts标签库标签库Jsp页面应该避免使用页面应该避免使用java脚本,因为这些脚本会大大降低脚本,因为这些脚本会大大降低jsp页面的页面的可读性,但可读性,但jsp页面依然需要具备动态输出的功能,通过标签可以完成页面依然需要具备动态输出的功能,通过标签可以完成表现层的输出表现层的输出Struts主要提供了如下主要提供了如下3个标签库个标签库html:用于生成:用于生成html的标签的标签bean:用于:用于

28、完成程序国际化完成程序国际化,输出,输出ActionForm的属性值的属性值等等logic:用于完成:用于完成循环,选择流程控制循环,选择流程控制等等在在web.xml中引入标签库定义。然后在每个中引入标签库定义。然后在每个JSP文件中引入。或者无需文件中引入。或者无需在在web.xml中定义,但在中定义,但在JSP文件中添加如下声明:文件中添加如下声明: htmlhtml标签标签html标签标签使用使用struts的的html标签最终将被解释为标准的标签最终将被解释为标准的html标签。标签。里面的标签基本上都和里面的标签基本上都和html标签一一对应标签一一对应建议以后使用建议以后使用st

29、ruts自带的自带的html标签标签 用户名用户名 密码密码 性别性别 男男 女女 爱好爱好篮球篮球看书看书 睡觉睡觉 编程编程 备注备注 提交提交 or 清除清除 取消取消 beanbean标签标签bean标签标签 输出输出bean里面的属性值里面的属性值 将某个将某个bean中的属性定义成脚本可以访问的变量中的属性定义成脚本可以访问的变量 输出国际化信息输出国际化信息 会自动查找会自动查找struts-config.xml中配置的资源文件中配置的资源文件中的中的hello这个键的值。这个键的值。用来定询问变量用来定询问变量a1,它的值是它的值是hello写出写出a1变量的值。变量的值。lo

30、giclogic标签标签logic标签标签 存在存在 是否是否包含包含给定的字符串给定的字符串 logic:iterate id=a collection= indexId=index在四种作用域中能够找到变量在四种作用域中能够找到变量list,直接写在,直接写在name后面后面StrutsStruts标签通用属性标签通用属性属性名称属性名称说明说明name指出对应指出对应Bean的名字的名字 。如果给出了。如果给出了scope属性,则仅仅在属性,则仅仅在scope中查找。否则,根据规定的顺序(中查找。否则,根据规定的顺序(page、request、 session 或或 applicatio

31、n)在各种)在各种scope中查找。中查找。property指出指出Bean中的某个属性,可以在其中检索值。如果没有标明,中的某个属性,可以在其中检索值。如果没有标明,则使用对象本身的值。则使用对象本身的值。Struts1 lession 3Struts1 lession 3选学选学国际化问题(国际化问题(I18N问题)问题)Struts处理消息处理消息Struts处理异常处理异常Struts验证框架验证框架Form验证验证Action验证验证I18NI18N问题问题什么是什么是I18N问题?问题?在英文中,在英文中, 国际化(国际化(Internationalization)被缩写为)被缩写

32、为I18N, 即只即只取首尾两个字母,取首尾两个字母, 中间字母为中间字母为18个个 有哪些问题有哪些问题? 页面字符串硬编码页面字符串硬编码 异常消息的硬编码异常消息的硬编码 提示信息的硬编码提示信息的硬编码JavaJava如何支持如何支持I18NI18N?java程序的国际化主要通过如下程序的国际化主要通过如下3个类完成个类完成java.util.Localejava.util.ResourceBundlejava.text.MessageFormat 将程序中的标签和提示等信息放在资源文件中。每个将程序中的标签和提示等信息放在资源文件中。每个程序需要所有支持的国家和语言,都必须提供对应的

33、程序需要所有支持的国家和语言,都必须提供对应的资源文件。资源文件是资源文件。资源文件是key-value对,每个资源文件中对,每个资源文件中的的key是不变的,但是不变的,但value则随不同国家和语言而变化则随不同国家和语言而变化资源文件的命名要规范:资源文件的命名要规范:myMessage.properties (默认的资源文件默认的资源文件) myMessage_zh_CN.properties (简体中文的资源文件简体中文的资源文件) myMessage_en_US.properties (英文的资源文件英文的资源文件)资源文件要用资源文件要用native2ascii工具进行转换。工具

34、进行转换。JavaJava如何支持如何支持I18NI18Njava程序示例程序示例 /取得缺省的取得缺省的Locale Locale l = Locale.getDefault(); /绑定资源文件绑定资源文件 ResourceBundle rb = ResourceBundle.getBundle(myResource, l); System.out.println(rb.getString(error.empty.name); /格式化消息文本格式化消息文本 MessageFormat mf = new MessageFormat(rb.getString(error.time); Sys

35、tem.out.println(mf.format(new Objectnew Date();国际化后台示例国际化后台示例Locale currentLocale = Locale.getDefault();System.out.println(default country= + currentLocale .getCountry();System.out.println(default language= + currentLocale .getLanguage();/currentLocale = new Locale(en, US);/currentLocale = new Local

36、e(zh, CN);ResourceBundle rb = ResourceBundle.getBundle(com.fd.struts.ApplicationResources, currentLocale);MessageFormat mf = new MessageFormat(rb.getString(notNull);System.out.println(mf.format(new Object密码密码);StrutsStruts如何支持如何支持I18NI18N需要在需要在struts配置文件中指定资源属性文件的位置和名称,如配置文件中指定资源属性文件的位置和名称,如在在JSP页面中

37、使用页面中使用来输出文来输出文本,以避免硬编码本,以避免硬编码message-resources 中中parameter的值,可以指定资源文件的位的值,可以指定资源文件的位置和名称置和名称表示表示在类路径根目录(在类路径根目录(WEB-INF/classes目录)下有目录)下有myResources_XX_XX.properties文件文件表示在类路径根目录下,有一个表示在类路径根目录下,有一个resources目录,在这个目录,在这个resources目录中存放着所有的目录中存放着所有的myResources _XX_XX.properties资源属性文件资源属性文件StrutsStruts

38、如何支持如何支持I18NI18Nstruts利用在利用在session中存放一个中存放一个Locale对象来达到设置当前语对象来达到设置当前语言的目的言的目的默认的情况下,默认的情况下,struts根据网页向后台提交时所包含的语言编码根据网页向后台提交时所包含的语言编码信息来提供缺省的信息来提供缺省的Locale对象,这就是我们为什么可以通过更改对象,这就是我们为什么可以通过更改网页显示语言设置,就能显示不同的语言文字的原因。网页显示语言设置,就能显示不同的语言文字的原因。struts在在session中存放的这个中存放的这个Locale对象,取对象,取值值:org.apache.struts

39、.Globals.LOCALE_KEYStrutsStruts消息处理消息处理为什么需要消息处理?为什么需要消息处理?比如登录成功的提示比如登录成功的提示比如创建失败的提示比如创建失败的提示等等等等总之,程序总是要通过界面来跟用户交互,所以,总之,程序总是要通过界面来跟用户交互,所以,在交互的过程中,就产生了众多的消息文本,就产生了众多的消息文本struts提供了专门的处理机制,来将这些消息文本国际化,提供了专门的处理机制,来将这些消息文本国际化,避免避免消息文本的硬编码消息文本的硬编码消息处理,就是在消息处理,就是在Action和和JSP之间传递的消息文本的处理之间传递的消息文本的处理(区别

40、于(区别于JSP页面硬编码文本的消息,页面硬编码文本的消息,JSP页面消息可以使用页面消息可以使用标签来处理)标签来处理)Struts交互消息,是通过交互消息,是通过ActionMessages等对象,以及相应的等对象,以及相应的标签来处理的标签来处理的如何创建消息对象?如何创建消息对象?ActionMessages与与ActionMessage对象对象ActionMessages对象是ActionMessage对象的集合一个ActionMessage对象,代表一个国际化消息文本(字符串)如何创建如何创建ActionMessages对象?对象?ActionMessages messages =

41、 new ActionMessages();如何创建如何创建ActionMessage对象?对象?ActionMessage msg = new ActionMessage(“key”);其构造方法带的参数,就是一个在资源属性文件中的key,所以,它能表示一个国际化消息文本如何将如何将ActionMessage对象添加到对象添加到ActionMessages对象中?对象中?messages.add(“message_id”,msg);第一个参数(message_id)表示本ActionMessage对象在ActionMessages对象中区别于其它ActionMessage对象的标识符消息对象

42、如何传递?消息对象如何传递?首先要决定的是,要传递的消息是首先要决定的是,要传递的消息是普通消息还是还是错误消息?普通消息:即普通的消息文本错误消息:即提示错误的消息文本本质上,这两种消息没有什么区别,都是消息文本,但是如果一个页面同时需要显示普通的消息文本和错误消息文本的时候,就需要进行区分了,比如不同类型的消息文本可能要用不同的样式来显示通过一句简单的代码,将通过一句简单的代码,将ActionMessages对象保存到对象保存到HttpServletRequest对象中对象中保存普通消息:this.saveMessages(request,messages);保存错误消息:this.sav

43、eErrors(request,messages);这就是调用父类(Action)所提供的方法saveMessages()/saveErrors()来保存消息对象实际上,父类的saveMessages()方法,将消息对象保存在了request中,并命名为Globals.MESSAGE_KEY saveErrors()方法,将消息对象保存在了request中,并命名为Globals.ERROR_KEY 标签标签标签只显示错误消息标签只显示错误消息标签与标签与标签类似,但无标签类似,但无id属性属性标签通过提供标签通过提供header/footer属性以及属性以及prefix/suffix属性来定

44、制每条消息的显示格式属性来定制每条消息的显示格式header/footer 定义整个错误消息显示之前(之后)要显示的内容,定义整个错误消息显示之前(之后)要显示的内容,这些内容也是在资源属性文件中定义的一些这些内容也是在资源属性文件中定义的一些key值,默认的情况下,值,默认的情况下,它们的取值分别为:它们的取值分别为:errors.header和和errors.footerprefix/suffix 定义每条错误消息显示之前(之后)要显示的内容,定义每条错误消息显示之前(之后)要显示的内容,这些内容也是在资源属性文件中定义的一些这些内容也是在资源属性文件中定义的一些key值,默认的情况下,值

45、,默认的情况下,它们的取值分别为:它们的取值分别为:errors.prefix和和errors.suffix举例如下:举例如下: errors.header= errors.prefix= errors.suffix= errors.footer=StrutsStruts的异常自动处理机制的异常自动处理机制编程式异常处理编程式异常处理即我们在即我们在Action中调用业务逻辑层对象的方法时,用中调用业务逻辑层对象的方法时,用try catch的的方式来截获异常之后,手工对异常进行处理方式来截获异常之后,手工对异常进行处理我们以前的开发过程中,都是使用编程式的异常处理我们以前的开发过程中,都是使

46、用编程式的异常处理在编程式异常处理的时候,我们可以使用在编程式异常处理的时候,我们可以使用struts的消息处理机制来的消息处理机制来对这些异常信息进行处理对这些异常信息进行处理自动异常处理机制自动异常处理机制即在即在Action中不捕捉异常,而是将异常抛出给中不捕捉异常,而是将异常抛出给struts框架处理框架处理我们需要在配置文件中指示我们需要在配置文件中指示struts如何处理这些被抛出的异常如何处理这些被抛出的异常 使用使用元素来定义自动异常处理元素来定义自动异常处理元素的配置及使用元素的配置及使用元素的配置,指示了元素的配置,指示了struts如何处理异常的方式如何处理异常的方式在通

47、常的情况下,我们得到异常以后,需要将页面导航到一个在通常的情况下,我们得到异常以后,需要将页面导航到一个错误提示的页面,提示错误信息错误提示的页面,提示错误信息元素配置的关键属性是:元素配置的关键属性是:key 即这个异常所对应的错误提示消息文本的即这个异常所对应的错误提示消息文本的key,这个,这个key的值,的值,需要在资源属性文件中进行定义需要在资源属性文件中进行定义type 即定义需要处理哪种类型的即定义需要处理哪种类型的Exceptionpath 定义一旦出现异常,需要转向哪个页面来进行提示,如果定义一旦出现异常,需要转向哪个页面来进行提示,如果不定义不定义path属性,默认情况下,

48、将使用属性,默认情况下,将使用Action配置中的配置中的input属性属性的值来作为转向的页面的值来作为转向的页面如何显示错误消息?如何显示错误消息?在在JSP页面中,使用页面中,使用标签,即可将其异常对应的错标签,即可将其异常对应的错误消息文本进行显示误消息文本进行显示public class ByZeroException extends Exceptionpublic ByZeroException(String message)super(除零异常除零异常); 页面中:页面中:ActionFormActionForm对象对象ActionForm的要求的要求必须扩展自必须扩展自org.

49、apache.struts.action.ActionForm如果要获取表单的值,必须定义与表单元素一一对应的属性如果要获取表单的值,必须定义与表单元素一一对应的属性如果要求在将如果要求在将ActionForm传递到传递到Action之前进行校验,必须实现之前进行校验,必须实现validate方法方法如果想要在组装前初始化属性,必须实现如果想要在组装前初始化属性,必须实现reset方法方法DynaActionForm使用动态使用动态ActionForm,可以完全不再需要书写,可以完全不再需要书写ActionForm,所有,所有ActionForm只需要在只需要在struts-config.xm

50、l文件中配置即可文件中配置即可元素属性:元素属性:name,type进一步了解进一步了解ActionForm对象对象ActionForm作为表单字段收集器作为表单字段收集器ActionForm作为类型转换器作为类型转换器(所有从表单提交到后台的数据均为字符所有从表单提交到后台的数据均为字符串类型串类型,利用利用ActionForm自动转换自动转换int、double、boolean等数据类型等数据类型)ActionForm 可以被其它可以被其它bean或者过程作为数据载体或者过程作为数据载体动态动态ActionFormActionForm 使用动态使用动态Form实现用户登录实现用户登录 以配

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁