《SSH培训教程(共189张).pptx》由会员分享,可在线阅读,更多相关《SSH培训教程(共189张).pptx(189页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、20222022年年5 5月月新员工培训THUNISOFTStruts+Hibernate+Spring新员工培训课程总体目标 我们的目标是:能够熟练运用当前流行的java开源框架:Struts、Hibernate以及Spring来构建灵活、易于扩展的多层Web应用程序。THUNISOFTStruts+Hibernate+Spring新员工培训多层架构概述 C/S:以数据库为中心 B/S:多层架构才是真正的目的 B/S多层架构将显示、业务运算、数据库等功能完全分离,杜绝彼此的耦合与影响,从而实现松耦合和良好的可维护性。 呈现层(UI Layer/Presentation Layer) stru
2、ts 业务逻辑层(Business Layer) spring 持久化层(Persistence Layer) hibernate20222022年年5 5月月开源MVC框架THUNISOFTStruts+Hibernate+Spring新员工培训Struts课程目标 深入理解MVC模式 掌握Struts体系架构 掌握Struts开发流程 熟练掌握Struts的配置方法THUNISOFTStruts+Hibernate+Spring新员工培训回顾Servlet 在web.xml中如何配置? Servlet如何和页面对应起来? 我们自己写的Servlet需要从哪个类继承?THUNISOFTStr
3、uts+Hibernate+Spring新员工培训Struts是什么?Struts的目标是提供一个开发Web应用的开源框架。Struts鼓励基于M2模式(即MVC设计模式)来开发程序。注意:Struts只是MVC的一种实现方式,不使用Struts也可以使用/实现MVC。因为MVC是一种模式,而Struts则是一种实现。ModelViewControllerTHUNISOFTStruts+Hibernate+Spring新员工培训Model1与Model2设计模式简介 以JSP为中心的开发模型,称为Model1(JSP+JAVABEAN) 业务逻辑与表示逻辑混和,不利维护与重用 HTML中嵌入了
4、大量的JAVA代码 验证、流程控制、更新程序的状态全部在JSP中完成 基于MVC模式的框架 MVC将问题进行分解 模型包含应用程序的核心功能。模型封装了应用程序的状态。它对视图或控制器一无所知。 视图提供模型的表示。它是应用程序的 外观。视图可以访问模型的读方法,但不能访问写方法。此外,它对控制器一无所知。 控制器对用户的输入作出反应。它创建并设置模型。 THUNISOFTStruts+Hibernate+Spring新员工培训Model2THUNISOFTStruts+Hibernate+Spring新员工培训Struts框架概览THUNISOFTStruts+Hibernate+Sprin
5、g新员工培训Struts框架概览 浏览器 web容器将对来自HTTP的每个请求创建一个request对象,并用一个response对象作出响应 控制器 控制器接收来自浏览器的请求,在struts中,是由一个servlet来充当控制器的角色,struts-config.xml文件配置控制器 模型 在struts中,由Action类充当业务逻辑的包装器,ActionForm是程序的状态 视图 JSP文件THUNISOFTStruts+Hibernate+Spring新员工培训Struts框架组件ActionServlet类控制导航流ActionServlet根据URI来决定哪个Action类被用于
6、处理请求,Action可以校验输入,并访问业务层以便从数据库检索信息Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中,并传入ActionAction在完成业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward对象中的路径来调用页面完成响应Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个请求URI,当请求路径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMap
7、ping对象将告诉ActionServlet哪个Action类会被调用、哪个ActionForm类被用于传递页面数据以及哪些ActionForward将被用于转向有关Action、ActionForm、ActionForward等信息,Struts通过一个配置文件:struts-config.xml文件来定义。THUNISOFTStruts+Hibernate+Spring新员工培训Struts1.X 和Struts2.X Struts1.X 与Struts2.X 的差异较大 Struts1.X 应用更加广泛 Struts2.X 实际上是另外一个框架Webwork发展而来的 后续课程将会有对w
8、ebwork/Struts2.X的介绍以及实例操作THUNISOFTStruts+Hibernate+Spring新员工培训快速开始一个Struts项目 第一个项目,实现用户登录操作 用户将看到一个登录页面,要求用户输入用户名以及密码 如果用户名以及密码都是admin,提示登录成功 否则提示登录失败1、用Eclipse创建一个J2EE Web应用项目,如右图所示2、下载并解压Struts项目*从Apache网站下载struts最新版*将压缩包解压到一个目录,此目录为STRUTS_HOME目录3、将STRUTS_HOME/lib目录下的所有.jar文件拷贝到刚创建的web项目的WebConten
9、t/WEB-INF/lib目录下4、配置ActionServlet:修改web项目的web.xml文件,添加如下Servlet映射配置(转下一页)THUNISOFTStruts+Hibernate+Spring新员工培训web.xml 的配置 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 2 action *.do THUNISOFTStruts+Hibernate+Spring新员工培训我们将需要创建如下文件 一个ActionForm LoginActionForm.java 一
10、个Action LoginAction.java struts-config.xml文件 三个页面 登录页面 login.jsp 登录成功提示页面 login_success.jsp 登录失败提示页面 login_error.jsp 就这些!没别的了!THUNISOFTStruts+Hibernate+Spring新员工培训创建LoginActionForm.javaActionForm是一个JavaBean,需继承org.apache.struts.action.ActionForm类,它捕获通过HTTP请求传送的参数ActionForm针对每个HTML表单中的字段具有一个对应的属性Acti
11、onServlet匹配请求中的参数和ActionForm中的属性,并调用ActionForm中的setter方法,将参数传入ActionForm我们的login.jsp有username和password两个表单字段(下面将会看到),所以,我们需要定义ActionForm中相应的setter方法:setUsername和setPassword方法ActionForm中的getter/setter方法,可以通过Eclipse集成环境,自动生成ActionForm中的内部属性全部定义为私有的(private),并通过公共(public)的getter/setter方法来访问package com.
12、bjsxt.strutstest;import org.apache.struts.action.ActionForm;public class LoginActionForm extends ActionForm private String username;private String password;/* * return Returns the password. */public String getPassword() return password;/* * param password The password to set. */public void setPasswo
13、rd(String password) this.password = password;/* * return Returns the username. */public String getUsername() return username;/* * param username The username to set. */public void setUsername(String username) this.username = username;THUNISOFTStruts+Hibernate+Spring新员工培训创建LoginAction.javaAction是一个Ja
14、va类,需继承org.apache.struts.action.Action类ActionServlet将会组装ActionForm,并将它传递给ActionAction 通常负责:输入校验调用业务逻辑类执行业务逻辑操作决定返回哪个ActionForward我们的LoginAction做了如下事情,这些是一个Action通常都会做的最典型的事情:将输入的ActionForm强制转换为LoginActionForm从LoginActionForm对象中获取用户名以及密码的数据信息执行用户名及密码的逻辑判断操作(在通常的情况下,要将这些业务逻辑交给专门的类去处理,这里这样做是为了演示的需要)根据业
15、务逻辑执行的结果,决定返回哪个ActionForward,我们在这里使用success这个标识来表示登录成功页面,用error标识来表示登录失败页面public class LoginAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception /将ActionForm强制转换为LoginActionFormLoginAction
16、Form loginForm = (LoginActionForm)form;/从LoginActionForm中提取从页面表单传递过来的参数String username = loginForm.getUsername();String password = loginForm.getPassword();/根据这些参数,执行业务逻辑操作if(admin.equals(username) & admin.equals(password)/如果用户名和密码均为admin,则转向登录成功页面return mapping.findForward(success);else/否则转向登录失败页面re
17、turn mapping.findForward(error);THUNISOFTStruts+Hibernate+Spring新员工培训创建Struts配置文件struts-config.xml 在WebContent/WEB-INF目录下创建struts-config.xml文件 并添加如下内容(空白的struts-config.xml),紧接着,我们将往这个空白的配置文件中添加其它配置信息 struts-config.xml文件,是由ActionServlet读取的配置文件,它定义了所有关于Action、ActionForm、ActionForward等的详细信息THUNISOFTStr
18、uts+Hibernate+Spring新员工培训添加ActionForm配置,配置LoginActionForm 我们在struts-config.xml文件中,在标签的内部,添加如下配置: 标签内部可以包含多个标签 标签必须指定name和type属性 name属性是给此ActionForm一个标识名称 type属性指定了此ActionForm是哪个类,必须是全路径的类名THUNISOFTStruts+Hibernate+Spring新员工培训添加Action配置,配置LoginAction我们在struts-config.xml文件中,紧接着标签的下面,添加对LoginAction的配置标
19、签可以配置的重要属性包括:path-从页面上通过一个什么样的URL路径来访问Action(不包含.do)type 访问这个URL的时候,调用哪个Action类,这是Action的全路径类名name 这个属性用来标识哪个ActionForm将被创建,并将提交的表单组件给它scope FormBean的作用域范围,可以取值为session和request,一般取值都是requestTHUNISOFTStruts+Hibernate+Spring新员工培训创建login.jsp 在WebContent目录下创建login.jsp文件,如右边所示 添加一个表单,action为login.do,这个lo
20、gin.do的意思,将会告诉struts的ActionServlet,它将需要调用哪个Action来处理这个表单的请求 添加输入域username,这个username的表单字段,必须跟LoginActionForm中的属性一致 添加密码输入域password请登录请输入用户名: 请输入密码: THUNISOFTStruts+Hibernate+Spring新员工培训创建login_success.jsp和login_error.jsplogin_success.jsp登录成功欢迎您,您已经成功登录!您创建的第一个Struts应用程序已成功运行!login_error.jsp登录失败您的登录失
21、败了,可能原因是用户名或密码不正确,请返回重新输入 返回登录页面THUNISOFTStruts+Hibernate+Spring新员工培训启动Tomcat并运行login.jsp 运行login.jsp之后,能看到如下所示的登录表单 输入用户名admin和密码admin,将能看到登录成功的界面 输入其它用户名或密码,将能看到登录失败的界面THUNISOFTStruts+Hibernate+Spring新员工培训在这个简单的应用程序背后发生了什么? 当你从浏览器输入地址:http:/localhost:8088/Struts-Test/login.jsp,Tomcat将按通常情况来处理这个JSP
22、并返回浏览器 当你提交表单,实际上是提交到了这样一个URL地址:http:/localhost:8088/Struts-Test/login.do,Tomcat将会根据web.xml的配置,将这个请求发送给相应的Servlet,在我们的应用中,Tomcat将会把这个请求发送给org.apache.struts.action.ActionServlet这个类(请参看web.xml的配置) 然后ActionServlet根据struts-config.xml的配置信息,调用LoginAction对象去处理这个请求,在此之前,它会将页面表单的请求数据封装到LoginActionForm对象中,并传递
23、给LoginAction LoginAction返回一个ActionForward对象,包含了将要转向的路径信息 ActionServlet根据这个ActionForward对象所包含的路径信息,调用相应的页面去执行响应 流程图请参考下一页THUNISOFTStruts+Hibernate+Spring新员工培训LoginAction应用程序的流程图THUNISOFTStruts+Hibernate+Spring新员工培训Struts项目架构图THUNISOFTStruts+Hibernate+Spring新员工培训Struts工作流程图THUNISOFTStruts+Hibernate+Sp
24、ring新员工培训Struts与MVC 视图(View) 在使用Struts框架的web应用程序中,JSP以及相关的技术(如Taglib)等共同组成视图层,这一层的主要职责是显示用户界面。Struts提供了很多机制让我们能更加轻松地创建视图 控制器(Controller) Struts中,ActionServlet是控制器层组件 模型(Model) 模型包括:系统的内部状态以及改变系统状态的动作 Struts中的Action和ActionForm是模型的一部分 Struts建议把”做什么”(Action)和”如何做”(业务逻辑)相分离THUNISOFTStruts+Hibernate+Spri
25、ng新员工培训创建业务逻辑处理类(Model) 使用单例模式(Singleton)来创建业务逻辑处理类 创建UserManager业务逻辑处理类 创建validate方法 创建UserNotFoundException 创建PasswordErrorExceptionpackage com.bjsxt.strutstest;public class UserManager private static UserManager userManager;private UserManager()public static synchronized UserManager getInstance()
26、if(userManager = null)userManager = new UserManager();return userManager;public void validate(String username,String password)throws UserNotFoundException,PasswordErrorExceptionif(!admin.equals(username)throw new UserNotFoundException();if(!admin.equals(password)throw new PasswordErrorException();TH
27、UNISOFTStruts+Hibernate+Spring新员工培训Action中如何调用业务逻辑处理类? 我们看下面的代码:try UserManager.getInstance().validate(username,password);return mapping.findForward(success); catch (UserNotFoundException e) e.printStackTrace(); catch (PasswordErrorException e) e.printStackTrace();return mapping.findForward(error);
28、通过添加业务逻辑处理类,我们将验证逻辑转移到了业务逻辑处理层THUNISOFTStruts+Hibernate+Spring新员工培训页面之间数据的传递 如何将数据从Action中传递到下一个JSP页面? 一般使用request.setAttribute方法: 在Action中,使用request.setAttribute(String name,Object data)方法往request中设置参数 在JSP中,使用request.getAttribute(String name)来获取相应的参数 在原来LoginAction的基础上编写相应的代码,测试页面数据传递 传递登录成功者的帐号信息
29、到成功页面,并显示THUNISOFTStruts+Hibernate+Spring新员工培训进一步理解Struts控制流THUNISOFTStruts+Hibernate+Spring新员工培训细节:所有的页面请求由容器接收 Struts的核心组件是ActionServlet,像其它所有Servlet一样,它是生存在容器中的,比如Tomcat、WebLogic等,当容器启动的时候,它会读取web.xml文件(部署描述符),告诉容器它会装入哪些Servlet 一个标准的Servlet是通过servlet-mapping来设定,哪些请求,将会被提交到哪些servlet中 Struts的servle
30、t-mapping配置一般是: action *.do 这样配置的意思是:任何以.do结尾的URL请求,都会被发送到ActionServlet进行处理THUNISOFTStruts+Hibernate+Spring新员工培训小结 MVC基本结构 Struts的主要组成部分 如何编写ActionForm 如何编写Action 如何在配置文件中定义映射URL、Action以及ActionForm 如何获取从页面传递到Action的数据 如何将数据从Action传递到下一个页面 如何将业务逻辑与表示层分离 需牢记原则:不要在Action中进行业务逻辑的处理,业务逻辑应交给专门的Model层去做 在业
31、务逻辑层抛出异常,并在Action中捕捉和处理THUNISOFTStruts+Hibernate+Spring新员工培训Struts Taglib 易于使用,能代替直接在页面上写JAVA脚本 便于重用 用Struts Taglib实现成功页面 在以后的开发中,将逐步介绍一些常用的TaglibTHUNISOFTStruts+Hibernate+Spring新员工培训尝试简单的tag lib使用 在JSP文件的头部添加如下声明: 关于struts tag lib的说明,可以查看相关的参考文档 常用的struts tag lib 和 和 THUNISOFTStruts+Hibernate+Sprin
32、g新员工培训JSTL 简介:SUN的标准Taglib库 JSP标准标签库(JSP Standard Tag Library,JSTL ) 迭代和条件判断 数据管理格式化 XML 操作 数据库访问 函数标签库 表达式语言(EL) EL隐式对象 存取器 运算符THUNISOFTStruts+Hibernate+Spring新员工培训在项目中使用JSTL 拷贝jstl.jar和standard.jar到WEB-INF/lib目录下 在JSP中添加伪指令 常用JSTL标记 、和 THUNISOFTStruts+Hibernate+Spring新员工培训进一步理解ActionForm ActionFor
33、m的要求 必须扩展自org.apache.struts.action.ActionForm 如果要获取表单的值,必须定义一个public属性 如果要求在将ActionForm传递到Action之前进行校验,必须实现validate方法 如果想要在组装前初始化属性,必须实现reset方法 DynaActionForm 举例说明DynaActionForm的配置 DynaActionForm的使用THUNISOFTStruts+Hibernate+Spring新员工培训ActionForm作为表单字段收集器 通过HTTP提交表单数据 通过HTTP上传文件 通过例子演示文件上传的简易方法 通过HTT
34、P提交空字段 修改原来的JSP文件,提交空字段THUNISOFTStruts+Hibernate+Spring新员工培训ActionForm作为类型转换器 所有从表单提交到后台的数据均为字符串类型 如何利用ActionForm自动转换int数据类型 举例说明 如何利用ActionForm自动转换boolean数据类型 举例说明 如何利用ActionForm自动转换Date类型 定义Converter 注册Converter 举例说明 如何利用ActionForm自动转换Double类型 举例说明THUNISOFTStruts+Hibernate+Spring新员工培训ActionForm作为传
35、输对象 ActionForm 可以被其它bean或者过程作为数据载体。 Transfer 对象 (也称为值对象(value object) )用来通过发送粗糙规整的数据视图来交换精细规整的数据。 ActionForm 的各个属性都必须是可变的。 提示: 使用粗糙规整 ActionForm来减小类维护。 应用中的表单一般共享属性 创建一个基本的 ActionForm,具有表单需要的所有属性THUNISOFTStruts+Hibernate+Spring新员工培训ActionForward ActionForward能做什么? 在Action中,经常问的问题是:“OK,操作成功了,然后呢?” Ac
36、tionForward会回传给ActionServlet ActionForward中的路径,可以是一个带参数的URI ActionForward的属性 name path redirect className 转发(forward)与重定向(redirect) 全局ActionForward与局部ActionForwardTHUNISOFTStruts+Hibernate+Spring新员工培训动态创建ActionForward 将ActionForward定义在一个Struts 配置文件中是个好的选择 但也可以在Action中动态创建ActionForward,而不需要在配置文件中指定 如
37、下所示: ActionForward forward = new ActionForward(/do/itemEdit?action=edit); 举例说明THUNISOFTStruts+Hibernate+Spring新员工培训ActionMapping 理解ActionMapping path forward type name scope validate input parameter unknow ActionMappingTHUNISOFTStruts+Hibernate+Spring新员工培训Scope属性 在Action映射配置中,Scope属性可以取值为:request或se
38、ssion Scope属性表示:Struts框架在将ActionForm对象(与目标Action匹配的ActionForm)传送到Action之前,会将ActionForm对象保存的位置 如:scope=“request”配置,将指示struts调用request.setAttribute(“ActionForm名称”,ActionForm对象)方法,将ActionForm对象保存到request。 其中,ActionForm名称与struts-config.xml配置中的ActionForm名称一致,如:,其中uploadForm就是其名称。 我们明白scope属性的意义之后,就可以利用st
39、ruts的这些特性,来解决开发过程中的某些常见问题THUNISOFTStruts+Hibernate+Spring新员工培训常见问题:如何在程序出现异常的时候返回录入界面重新录入 假设现在要在一个页面上输入用户的信息(可能会有十几个属性值需要输入),用户不小心输入了一个重复的帐号,而帐号是不允许重复的,这个时候,系统应该提示用户有关帐号重复的信息,同时让用户重新选择一个帐号。 这种情况下,我们需要返回用户录入界面,让用户修改帐号字段。 现在的问题是:如何在返回这个录入界面的时候,将用户输入的其它信息保持住?THUNISOFTStruts+Hibernate+Spring新员工培训搞定Actio
40、n对象 如果应用需要保存一个记录到数据库中,典型的过程可能是 ActionForward提供一个链接到输入页面 ActionForm捕获输入 ActionMapping配置Action Action将输入送到数据库中(通常会将这一步操作委托给业务逻辑类去实现) J2EE是一个多线程的环境,服务器针对每个请求启动一个线程来处理。是一个多线程的环境,服务器针对每个请求启动一个线程来处理。所以有可能会有多个线程同时访问一个所以有可能会有多个线程同时访问一个Servlet实例的情况实例的情况 在在Struts里面也是一样的,有可能会有多个线程同时访问一个里面也是一样的,有可能会有多个线程同时访问一个A
41、ction实例实例的情况的情况 所以必须保证所以必须保证Action类中的方法具有类中的方法具有“可重入性可重入性”,即不能在,即不能在Action的的方法里改变实例变量的值方法里改变实例变量的值THUNISOFTStruts+Hibernate+Spring新员工培训Action的主要职责 校验输入数据 调用业务逻辑方法 检测处理异常 根据逻辑进行转向操作THUNISOFTStruts+Hibernate+Spring新员工培训I18N问题 什么是I18N问题? 在英文中, 国际化(Internationalization)被缩写为I18N, 即只取首尾两个字母, 中间字母为18个 问题在哪
42、里? 页面字符串硬编码 异常消息的硬编码 提示信息的硬编码THUNISOFTStruts+Hibernate+Spring新员工培训Java如何支持I18N? 一个简单的例子 不支持I18N的例子 NoI18NSample.java 支持I18N的例子 我们需要将硬编码文本转移到外部的资源文件 编写MessagesBundle.properties 编写MessagesBundle_zh_CN.properties 编写MessagesBundle_en_US.properties 编写I18NSample.java 运行I18NSample.java 乱码? 因为资源文件必须是Latin-1
43、或Unicode编码(如udddd)的字符 使用native2ascii工具,将中文资源文件进行转换THUNISOFTStruts+Hibernate+Spring新员工培训Java支持I18N的编码过程总结 1、创建属性文件(可能要用native2ascii工具转换) 2、定义Locale对象 3、创建一个ResourceBundle对象 ResourceBundle对象用于分离跟本地相关的数据 如果找不到相应语言或国家代码的属性文件,将使用默认的属性文件(即没有标识语言和国家代码的属性文件:MessagesBundle.properties) 其创建方式如下:message = Resou
44、rceBundle.getBundle(MessagesBundle, currentLocale); 第一个参数,表示要从哪些资源属性文件中(MessagesBundle_XX.properties)获取数据 第二个参数,是一个Locale对象,表示要选择哪个资源属性文件 4、从ResourceBundle对象中获取数据THUNISOFTStruts+Hibernate+Spring新员工培训Locale对象 我们通过指定一个语言代码和国家代码来创建一个Locale对象 国家代码是可选的 语言代码是小写字母;国家代码是大写字母语言代码是小写字母;国家代码是大写字母 Locale.getDef
45、ault()可以获得系统当前的Locale Java都支持哪些语言代码和国家代码? DateFormat.getAvailableLocales() 语言代码标准:http:/ftp.ics.uci.edu/pub/ietf/http/related/iso639.txt 国家代码标准:http:/userpage.chemie.fu-berlin.de/diverse/doc/ISO_3166.html 与Locale相关的数据: 消息文本(带参数?) 日期(时间) 货币(数字) 等等。THUNISOFTStruts+Hibernate+Spring新员工培训Struts如何支持I18N 1
46、、需要在struts配置文件中指定资源属性文件的位置和名称,如 2、在相应的位置放置相应的文件 3、在JSP页面中使用来输出文本,以避免硬编码 以登录页面的国际化作为例子讲解 创建相应的资源属性文件 用标签替换登录页面的硬编码文本 测试(更改网页显示语言,以便测试不同的版本)THUNISOFTStruts+Hibernate+Spring新员工培训关于message-resources 配置中parameter的值 parameter的值,可以指定资源文件的位置和名称 举例: 表示在类路径根目录(WEB-INF/classes目录)下有MessageResources_XX_XX.proper
47、ties文件(注意:国家代码可以省略,跟java中对资源属性文件的处理一样) 表示在类路径根目录下,有一个resources目录,在这个resources目录中存放着所有的application_XX_XX.properties资源属性文件THUNISOFTStruts+Hibernate+Spring新员工培训如何用程序切换网页显示的语言 struts利用在session中存放一个Locale对象来达到设置当前语言的目的 默认的情况下,struts根据网页向后台提交时所包含的语言编码信息来提供缺省的Locale对象,这就是我们为什么可以通过更改网页显示语言设置,就能显示不同的语言文字的原因。
48、 struts在session中存放的这个Locale对象,取名为:Globals.LOCALE_KEY 的值,Globals是struts框架提供的一个对象 利用这个原理,我们可以用编程的方式来手工切换整个应用系统的语言。 举例说明 ChangeLanguageActionTHUNISOFTStruts+Hibernate+Spring新员工培训Struts消息处理 为什么需要消息处理? 比如登录成功的提示 比如创建失败的提示 等等总之,程序总是要通过界面来跟用户交互,所以,在交互的在交互的过程中过程中,就产生了众多的消息文本 struts提供了专门的处理机制,来将这些消息文本国际化,避免消
49、息文本的硬编码 消息处理,就是在Action和JSP之间传递的消息文本的处理(区别于JSP页面硬编码文本的消息,JSP页面消息可以使用标签来处理) Struts交互消息,是通过ActionMessages等对象,以及相应的标签来处理的THUNISOFTStruts+Hibernate+Spring新员工培训 如何创建消息对象? ActionMessages与ActionMessage对象 ActionMessages对象是ActionMessage对象的集合 一个ActionMessage对象,代表一个国际化消息文本(字符串) 如何创建ActionMessages对象? ActionMessa
50、ges messages = new ActionMessages(); 如何创建ActionMessage对象? ActionMessage msg = new ActionMessage(“key”); 其构造方法带的参数,就是一个在资源属性文件中的key,所以,它能表示一个国际化消息文本 如何将ActionMessage对象添加到ActionMessages对象中? messages.add(“message_id”,msg); 第一个参数(message_id)表示本ActionMessage对象在ActionMessages对象中区别于其它ActionMessage对象的标识符THU