1.MVC设计模式
Model I模式:开发Web应用分为两种情况:
> 纯JSP技术方式开发
> JSP+JavaBean方式开发
Model I 模式不足:
> JSP页面中嵌入大量Java代码,可读性差
> 大量代码在JSP中难以复用
> 后期维护及扩展难度大
Model II模式:把JSP中嵌入的控制代码和业务逻辑处理代码提取出来,放入单独的类(Servlet和JavaBean)中。也就是JSP+Servlet+JavaBean。
Model II模式体现了基于MVC(Model View Controller 模型-视图-控制器 )的设计模式,简单的说Model II模式就是将数据显示、流程控制和业务逻辑处理分离,使之相互独立。
MVC设计模式:
当一个程序按照模型、视图、控制器三部分进行实现时,我们就可以称之为基于MVC模式开发的应用程序。
MVC由三部分组成:
Model:模型,主要用于数据和业务的处理。
View:视图,用于数据的显示。
Controller:控制器,用于进行流程控制。 (MVC框架的核心:Controller)
MVC设计模式特点:
> 一个模型可以对应多个视图
> 显示与逻辑控制的分离
> 分层控制,减低了代码间的耦合。
2.DTD验证XML文档
1.DTD:文档类型定义(Document Type Definition)DTD用来描述XML文档的结构。
一个DTD文档可能包含如下内容:
> 元素的定义规则
> 元素之间的关系规则
> 属性的定义规则
DTD作用:
> 使每个XML文件可以携带一个自身格式的描述。
> DTD使不同组织的人可以使用一个通用DTD来交换数据
> DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。
2.声明DTD
DOCTYPE关键字
3.使用外部DTD验证XML
DOCTYPE SYSTEM是关键字
DTD元素
DTD元素的定义语法:
> Element:是关键字
> Name是元素名称
> Content是元素类型
常用的元素类型:
> #PCDate:可以包含任何字符数据,但不能在其中包含任何子元素。
> 纯元素类型,只包含子元素,子元素外没有文本。
》 #PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素。如:
》 纯元素类型-只包含子元素,并且这些子元素外没有文本。如:
DTD元素中某些符号的用途:
():用来给元素分组
|:在列出的对象中选择一个
,:对象必须按照指定的顺序出现
*:该对象允许出现0次到多次
?:可以出现,但最多只能出现1次
+:可以出现,但至少出现一次 可以出现多次
DTD属性:
在DTD声明属性时,需要使用ATTList
DTD元素中属性类型的描述:
CDate:表示字符类型
ID:表示唯一的ID
IDref:表示为另一个元素的ID
IDrefs:表示其他ID的列表
ENtity:表示一个实体
Entitys::表示一个实体列表
#Requenred:属性值必须的
#IMPLIED:属性值不是必须的
#FIXED:属性值固定的
3.XML文档解析
DOM4J概述
DOM4J是一个易用的、开源的库,可以实现对XML文档的解析。最大特点:使用大量接口。
使用DOM4J操作XML数据步骤:
(1)导入DOM4J Jar包
(2)指定要解析的XML文件
(3)把XML文件转换层Document对象
(4)获得节点属性和文本的值。
Document对象相关:
节点相关:
(1)获取文档的跟元素
(2)取得某节点的单个子元素
(3)取得节点的文字
(4)取得某节点下为“member”的所有子节点并进行遍历
(5)对某节点下的所有子节点进行遍历
(6)在某节点下添加子节点
(7)设置节点文字
(8)删除某节点
(9)添加一个CDATA节点。
属性相关:
(1)取得某节点下的某属性
(2)取得属性的文字
(3)遍历某节点的所有属性
(4)设置某节点的属性和文字
(5)设置属性的文字
4.反射机制
1.Java的反射机制是Java特性之一,是构建框架技术所在。
Java反射机制是指在运行时,动态获取类或对象的信息及动态调用对象的功能。
Java反射具有3个动态性质:
> 运行时生成对象实例
> 运行期间调用方法
> 运行时更改属性
通过Java反射可以实现以下功能:
> 在运行时判断任意对象所属的类
> 在运行时构造任意类的对象
> 在运行时判断任意类所具有的方法和属性
> 在运行时调用任意对象的方法
2.Java反射常用API
反射常用的Java 类:如下
Class类—可获取类和类的成员信息
Field类—可访问类的属性
Method类—可调用类的方法
Constructor类—可调用类的构造方法
在Java中使用反射的基本步骤:
(1)导入java.lang.reflect.*。
(2)获得需要操作的类的java.lang.class对象
(3)调用Class的方法获取Filed、Method等对象。
(4)使用反射API进行操作。
反射的使用:
1.获取Class对象
2.从Class对象获取信息
3.创建对象
执行NewInstance()方法时实际上是利用无参构造方法来创建该类的实例。
5.构建基于MVC模式的框架
1.定义Action接口
2.实现自定义Action接口
3.实现Controller类,获取自定义Action
4.实现Controller类,调用execute方法
5.配置ActionFilter,修改web.xml文件
6.升级Colltroller控制器
实现MVC设计模式的重点是实现控制器,MVC设计模式的目标是保证模型和视图的分离,在Java Web应用开发中可以采用Servlet 和Filter实现控制器,实现业务逻辑的JavaBean充当模型的角色,使用JSP等页面技术充当视图的角色,基于框架开发的时候,需要依据的规则和顺序。
MVC设计模式把系统分为以下三个模块。
模型(Model):JavaBean(Java类)
视图(View):JSP或HTML文件
控制器(Controller):Servlet或者是Filter
开发MVC框架的实现步骤:
> 将请求发送到控制器(基于Filter API实现)调用功能
> 定义一个Action接口,用于表示用户请求的功能
> Action调用功能,完成业务操作,获取操作的结果,最后将结果返回给视图
1.Struts2概述
Struts2的由来:
Struts1 缺陷:
1.表现层支持单一
2.对Servlet API的依赖
3.不利于代码重用
=>Struts2 以WebWork设计思想为核心,吸收了Struts 的部分优点,建立了一个兼容WebWork和Struts1的MVC框架。
Struts 2 目录结构:
apps目录:Struts2示例应用程序
docs目录:Struts2指南、向导、API文档
lib目录:Struts 2的发行包及其依赖包
src目录:Struts 2项目源代码
2.Struts2 的应用
使用Struts 2 开发程序的基本步骤
> 加载Struts2 类库
> 配置web.xml文件
> 开发视图层页面
> 开发控制层Action
> 配置struts.xml文件
> 部署、运行项目
Action接口中常量字符串逻辑含义:
SUCCESS:表示程序处理正常,返回给用户成功后的结果。
NONE:正常结束,无任何返回提示
ERROR:处理结果失败
INPUT:需要更多用户输入才能顺利执行
LOGIN:需要用户正确登录后才能顺利执行
Package:用于定义Struts2处理请求的逻辑单元,name属性必须唯一,用来指定包的名称,extends 属性类型Java的extends关键字,用于指定要扩展的包。
Action:用于配置Struts2框架的Action类,Action元素将一个请求的URL(Action的名字)对应到一个Action类。name属性必须,用来表示Action的名字,Class属性可选,用于设定Action类的全限定名。
Result:用来处理Action类处理结束后,系统下一步做什么,name属性表示Result的逻辑视图名称,必须与Action类返回的字符串进行匹配,而Result元素的值表示与逻辑视图名称对应的物理资源之间的映射,用来指定这个结果对应的实际资源的位置。
struts.xml
package元素
包的作用:简化维护工作,提高重用性
包可以“继承”已定义的包,并可以添加自己包的配置
name属性为必需的且唯一,用于指定包的名称
extends属性指定要扩展的包
namespace属性定义该包中action的命名空间 ,为可选属性
文件名 说 明
1.struts2-core-xxx.jar Struts 2框架的核心类库
2.xwork-core-xxx.jar XWork类库,Struts 2的构建基础
3.ognl-xxx.jar Struts 2 使用的一种表达式语言类库
4.freemarker-xxx.jar Struts 2的标签模板使用类库
5.javassist-xxx.GA.jar 对字节码进行处理
6.commons-fileupload-xxx.jar 文件上传时需要使用
7.commons-io-xxx.jar Java IO扩展
8.commons-lang-xxx.jar 包含了一些数据类型的工具类
开发Struts 2应用的基本环节
确认环境
是否添加了Struts 2框架支持文件
是否配置了Filter
功能实现
编写Action类
配置struts.xml文件
编写视图
3.Struts2访问ServletAPI对象
(1)使用ActionContext类获取Servlet API对象对应的Map对象
(2)Struts2向Action注入Servlet API对象对应的Map对象
4.Struts2 数据校验
Struts 2的提供了数据验证机制
继承ActionSupport类来完成Action开发
ActionSupport类不仅对Action接口进行简单实现,同时增加了验证、本地化等支持
5.Struts2标签
Struts2标签主要分为两大类:
UI标签(UI Tag)和通用标签(Generic Tag)。
UI标签可分为三类:表单标签、非表单标签和Ajax标签。
常用表单标签
标 签 说 明
常用的通用标签:
名称 标 签 说 明
条件标签
迭代
迭代标签
value属性:需要进行遍历的集合对象
status属性:表示当前迭代对象的一个实例
id属性:当前迭代元素的id,可直接访问元素,该参数可选
总结:
Action的实现方式
实现Action接口
继承Action接口实现类ActionSupport类
Struts 2中提供了解耦和耦合两种方式实现对Servlet API的访问
与Servlet API解耦的访问方式
> 通过ActionContext类进行访问。
> Struts2向Action注入
与Servlet API耦合的访问方式
> 通过ServletActionContext类进行访问
> Struts2向Action注入
ActionSupport类提供了对数据验证的支持validate()方法
Struts 2提供强大的标签支持
表单标签和通用标签
1.Struts2执行过程解析
(1)web.xml:任何一个Web应用程序都是基于请求/响应模式进行构建的,所有无论采用哪种MVC框架,都离不开Web.xml文件的配置。
Web.xml不是Struts2特有的文件,只有在Web应用程序中配置Web.xml文件,MVC框架才能真正的与Web应用融合起来。
因此:Web.xml文件是所有Java Web应用程序都需要的核心文件。
(2)Action:
在MVC中,控制器由两部分组成:
> 核心控制器(Filter):用于拦截用户请求,对请求进行处理
> 业务控制器(Action):调用相应的Model类实现业务处理,返回结果。
(3)Result:
Result 的作用是实现结果视图的调用,并决定视图以哪种形式展现给客户端,简单的说就是用来设定在Action处理结束后,系统下一步做什么。
Struts2的配置文件:
1.Struts.xml:Struts2的核心配置文件,主要负责管理Struts2框架的业务控制器Action
Package:
2.Struts-default.xml:默认配置文件默认设置自动加载。
3.Struts-plugin.xml:插件使用的配置文件。
2.Action的配置
(1)Action的作用
1.封装工作单元
2.数据转移的场所
3.返回结果字符串
Method属性:
Struts2在根据Action元素的Method属性查找执行方法时有两种途径:
> 查找与Method属性值完全一样的方法
> 查找doMethod()形式的方法。
Action中动态方法调用:“!”
actionName! methodName.action
通配符:name属性支持通配符“*”
配置默认的action:使用
3.Result的配置
(1)常用结果类型
1.dispatcher类型
默认结果类型,后台使用RequestDispatcher转发请求
2.redirect类型
后台使用的sendRedirect()将请求重定向至指定的URL
3.redirectAction类型
主要用于重定向到Action
(2)动态结果:使用${attributeName}访问Action中的属性,实现动态结果配置
(3)全局结果:在global-results元素中嵌套Result元素实现全局结果访问
1.Struts2结构分析
核心接口和类:
名称 作用
ActionMapper 根据请求的URI查找是否存在对应Action调用
ActionMapping 保存调用Action的映射信息,如namespace、name等
ActionProxy 在XWork和真正的Action之间充当代理
ActionInvocation 表示Action的执行状态,保存拦截器、Action实例
Interceptor 在请求处理之前或者之后执行的Struts 2组件
2.Struts2的拦截器
为什么需要拦截器?
早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足、可扩展性降低
Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦
Struts 2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能
拦截器方法在Action执行之前或者之后执行
拦截器栈
从结构上看,拦截器栈相当于多个拦截器的组合
在功能上看,拦截器栈也是拦截器
拦截器与过滤器原理很相似
为Action提供附加功能时,无需修改
Action代码,使用拦截器来提供
拦截器的工作原理:围绕Action和Result的执行而执行
拦截器有一个三阶段的、有条件的执行周期:
三阶段执行周期:
拦截器的执行过程是一个递归的过程
> 做一些Action执行前的预处理
> 将控制交给后续拦截器或返回结果字符串
> 做一些Action执行后的处理
拦截器的配置:
(1)通过
(2)通过
Struts 2自带拦截器:
params拦截器
负责将请求参数设置为Action属性
servletConfig拦截器
将源于Servlet API的各种对象注入到Action
fileUpload拦截器
对文件上传提供支持
exception拦截器
捕获异常,并且将异常映射到用户自定义的错误页面
validation拦截器
调用验证框架进行数据验证
workflow拦截器
调用Action类的validate(),执行数据验证
Struts 2默认拦截器栈:
struts-default.xml中定义一个defaultStack拦截器栈,并将其指定为默认拦截器
只要在定义包的过程中继承struts-default包,那么defaultStack将是默认的拦截器
自定义拦截器:
实现Interceptor接口
void init():初始化拦截器所需资源
void destroy():释放在init()中分配的资源
String intercept(ActionInvocation ai) throws Exception
实现拦截器功能
利用ActionInvocation参数获取Action状态
返回结果码(result)字符串
继承AbstractInterceptor类
提供了init()和destroy()方法的空实现
只需要实现intercept方法即可
推荐使用
拦截器是Struts 2的核心
在框架中可以设置多个拦截器形成拦截器链
自定义拦截器的实现
实现Interceptor接口
继承Abstract Interceptor类
在Struts 2框架中实现文件上传需要在项目中添加commons-fileupload环境
commons-fileupload-x.x.x..jar
commons-io-x.x.x..jar
3.Struts2实现文件上传
Commons-FileUpload组件
Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目
Commons-FileUpload组件特点
使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能
能够全程控制上传内容
能够对上传文件的大小、类型进行控制
环境准备:
环境要求
commons-fileupload-xxx.jar
commons-io-xxx.jar
获取方式
http://commons.apache.org/fileupload下载Commons-FileUpload组件
http://commons.apache.org/io下载Commons-IO组件
实现步骤
设置表单提交属性
编写文件上传处理Action
配置Action
实现多文件上传:
表单设置
多个File控件
name属性相同
Action的修改
将三个属性的类型修改成数组类型
//获取提交的多个文件
private File[] upload;
//封装上传文件的类型
private String[] uploadContentType;
//封装上传文件名称
private String[] uploadFileName;
4.Struts2实现文件下载
1.stream结果类型
将文件数据(通过InputStream获取)直接写入响应流
相关参数的配置
名称 作用
contentType 设置发送到浏览器的MIME类型
contentLength 设置文件的大小
contentDisposition 设置响应的HTTP头信息中的Content-Disposition参数的值
inputName 指定Action中提供的inputStream类型的属性名称
bufferSize 设置读取和下载文件时的缓冲区大小
contentType类型设置:
指定文件下载的类型:
文件类型 类型设置
Word application/msword
Execl application/vnd.ms-excel
PPT application/vnd.ms-powerpoint
图片 image/gif , image/bmp,image/jpeg
文本文件 text/plain
html网页 text/html
可执行文件 application/octet-stream
文件下载:
实现步骤
编写下载文件Action
获取InputStream输入流
配置Action
指定下载文件的类型、下载形式等
使用Struts 2框架实现文件下载时,需要通过stream结果类型来实现
contentType:下载文件的文件类型
inputStream:对应实现的InputStream属性
contentDisposition:一方面表示文件的处理方式,另一方面指定下载文件的显示文件名称
bufferSize:指定下载文件时的缓冲区大小
1.OGNL简介
什么是OGNL
Object Graph Navigation Language
开源项目,取代页面中Java脚本,简化数据访问
和EL同属于表达式语言,但功能更为强大
1.表达式语言
2.类型转换器
2.OGNL在框架中的作用
1.数据的流入
2.数据的流出
3.ValueStack值栈
由Struts 2框架创建的存储区域,具有栈的特点
Action的实例会被存放到值栈中
OGNL访问值栈按照从上到下的顺序靠近栈顶的同名属性会被读取
OGNL在Struts 2中的作用
表达式语言
将表单或Struts 2标签与特定的Java数据绑定起来,用来将数据移入、移出框架
类型转换
数据进入和流出框架,在页面数据的字符串类型和Java数据类型之间进行转换
3.类型交换
1.为什么进行类型转换?
在基于HTTP协议的Web应用中
客户端请求的所有内容都以文本编码方式传输到服务器端
服务器端的编程语言却有着丰富的数据类型
2.内置转换器
Struts2框架中可以完成大多数常用的类型转换,这些常用的类型转换是Struts2框架提供的类型转换器完成的。
内置类型转换器 说 明
String 将int、long、double、boolean、String类型的数组或者java.util.Date类型转换为字符串
boolean/Boolean 在字符串和布尔值之间进行转换
char/Character 在字符串和字符之间进行转换
date 在字符串和日期类型之间进行转换。具体输入输出格式与当前的Locale相关
数组和集合 在字符串数组和数组对象、集合对象间进行转换
多值类型的数据处理
数组
public class ArraysDataTransferAction extends ActionSupport {
private String[] hobbies;
private Double[] numbers = new Double[3];
//省略setter&getter&execute方法
}
集合
public class ListDataTransferAction extends ActionSupport {
private List hobbies;
private List
private List
//省略setter&getter&execute方法
}
创建自定义类型转换器:
继承StrutsTypeConverter抽象类
继承org.apache.struts2.util. StrutsTypeConverter类
应用于全局范围的类型转换器
在src目录创建xwork-conversion.properties
应用于特定类的类型转换器
在特定类的相同目录下创建一个名为ClassName-conversion.properties的属性文件
处理类型转换错误:
向用户输出类型转换错误的前提条件
启动StrutsConversionErrorInterceptor拦截器
拦截器已经包含在defaultStack拦截器栈中
Action要继承ActionSupport类
其实是要实现ValidationAware接口
配置input结果映射
页面使用Struts 2表单标签或
Struts 2表单标签内嵌了输出错误信息功能
普通HTML标签需使用
1.修改所有类型的转换错误信息
思路
修改xwork.default.invalid.fieldvalue键的值
实现
在struts.xml中指定资源文件的基名
在src目录下创建资源文件并修改键值
2.定制特定字段的类型转换错误信息
思路
在Action范围的资源文件中添加I18N消息键invalid.fieldvalue.xxx
实现
在Action包下创建RegisterAction.properties,指定键值
4.OGNL表达式
OGNL:对象导航语言,一个开源项目,工作在视图层,用来简化数据的访问操作OGNL比EL功能更加强大。
OGNL表达式注意事项:
访问Bean的属性:Bean的类型必须遵循JavaBean规范
必须具有无参构造:setter/getter方法符合JavaBean规范
访问集合对象:可以使用属性名[index]的方式访问
列表、数组:可以使用属性名[key]的方式访问
Map对象:使用size或者length获取集合长度
Struts 2下使用OGNL:
访问非值栈对象
非值栈对象 访问方式 等价访问方式
application #application.username #application['username'] application.getAttribute("username")
session #session.username #session['username'] session.getAttribute("userName")
request #request.username #request['username'] request.getAttribute("username")
parameters #parameters.username #parameters['username'] request.getParameter("username")
attr #attr.username#attr['username'] 按pageContext–>request–>session–>application顺序查找
5.URL标签和日期标签
URL标签:
value属性:表示指定生成URL的地址,
name属性:表示传递的参数名称
value属性:表示传递参数所具有的值
日期标签:
format属性:指定格式进行日期格式化
nice属性:该属性只有true和false两个值,用于指定是否输出指定日期与当前时间的时差,默认是false
name属性:表示当前需要格式化的日期
id属性:表示引用该元素的id值
Struts2使用OGNL作为默认的表达式语言,还可以对OGNL进行扩展,最大的扩展就是支持值栈,并将值栈作为OGNL的跟对象。
日期标签可以实现对日期输出的格式化显式,URL标签可以构建一个超链接。
1.Struts2中的数据校验
validate()方法与validateXxx()方法是实现数据校验的两种方式
validate()方法会始终执行
validateXxx()方法会先于validate()方法执行,并对指定方法的请求进行处理
2.Struts2的验证框架
验证框架:
集成日常开发常用的数据校验功能,多种类型校验器的集合
校验器类型 校验器名称 说 明
必填校验器 required 字段不能为空
必填字符串校验器 requiredstring 字段值不能为空长度要大于0
整数校验器 int 字段的整数值的范围
字符串长度校验器 stringlength 字段值的长度的范围
正则表达式校验器 regex 字段是否匹配一个正则表达式
字段表达式校验器 fieldexpression 字段必须满足一个逻辑表达式
日期校验器 date 日期输入是否在指定的范围内
双精度校验器 double 字段值必须是双精度类型
使用验证框架的步骤:
1.编写Action
2.配置Action
3.编写表单
4.编写验证文件和校验规则
3.国际化
国际化(Internationalization:I18N)
使程序在不做任何修改的情况下,可以在不同国家或地区和不同语言环境下,按照当地的语言和格式习惯显示字符
本地化(Localization:L10N)
一个国际化的程序,当它运行在本地机器时,能够根据本地机器的语言和地区设置显示相应字符
国际化和本地化:
Java程序的国际化思路
将程序中的提示信息、错误信息等放在资源文件中,为不同国家/语言编写对应资源文件
资源文件由很多key-value对组成,key保持不变,value随国家/语言不同而不同
这些资源文件使用共同的基名,通过在基名后面添加语言代码、国家和地区代码来进行区分
实现国际化步骤:
1.在struts.xml中指定资源文件的基名及存储路径
2.按照需求创建对应的三个资源文件,存放相应资源
3.实现JSP页面信息的国际化显示
4.实现验证错误信息的国际化显示
资源文件的范围:
全局资源文件
所有包的所有Action类都可以访问
导致资源文件变得非常庞大臃肿,不便于维护
包范围资源文件
对应包下创建package_language_country.properties
处于该包及子包下的action才可以访问该文件
Action范围资源文件
命名格式ActionClassName_language_country.properties
只有单个Action可以访问
1.认识Ajax
Ajax:异步刷新技术
无刷新:不刷新整个页面,只刷新局部
无刷新的好处
只更新部分页面,有效利用带宽
提供连续的用户体验
提供类似C/S的交互效果,操作更方面
传统Web与Ajax的差异:
差异 方式 说 明
发送请求方式不同 传统Web 提交表单方式发送请求
Ajax技术 异步引擎对象发送请求
服务器响应不同 传统Web 响应内容是一个完整页面
Ajax技术 响应内容只是需要的数据
客户端处理方式不同 传统Web 需等待服务器响应完成并重新加载 整个页面后用户才能进行操作
Ajax技术 可以动态更新页面中的部分内容
用户不需要等待请求的响应
XMLHttpRequest:整个Ajax技术的核心,提供异步发送请求的能力 ,
常用方法
方 法 说 明
open(String method, String url, …) 用于创建一个新的HTTP请求
send(String data) 发送请求到服务器端
setRequestHeader( String header, String value) 设置请求的HTTP头信息
常用属性
readystate: XMLHttpRequest的状态信息
就绪状态码 说 明
0 XMLHttpRequest 对象未完成初始化
1 XMLHttpRequest 对象开始发送请求
2 XMLHttpRequest 对象的请求发送完成
3 XMLHttpRequest 对象开始读取响应
4 XMLHttpRequest 对象读取响应结束
常用属性
status:HTTP的状态码
状态码 说 明
200 服务器响应正常
400 错误请求,如语法错误
403 没有访问权限
404 访问的资源不存在
500 服务器内部错误
statusText :返回当前请求的响应状态
responseText:获得响应的文本内容
responseXML:获得响应的XML文档对象
使用Ajax验证用户名:
使用文本框的onBlur事件
使用Ajax技术实现异步交互
创建XMLHttpRequest对象
通过 XMLHttpRequest对象设置请求信息
向服务器发送请求
创建回调函数,根据响应状态动态更新页面
步骤:
编写待验证姓名表单
编写JavaScript方法验证用户名
使用Ajax进行处理
1. 创建XMLHttpRequest对象
2. 设置在服务器完成响应后要运行的回调函数
3. 设置请求信息
4. 发送请求
编写服务器端处理客户端请求 编写回调函数处理服务器端返回数据
2.使用Jquery实现Ajax
传统方式实现Ajax的不足
方法、属性、常用值较多不好记忆,步骤繁琐,浏览器兼容问题
jQuery常用Ajax方法:
$.ajax()
$.get()
$.post()
$.getJSON()
load()
常用属性参数:$.ajax()
属性名 说 明
String url 发送请求的地址,默认为当前页地址
String type 请求方式(POST或GET,默认为GET)
Number timeout 设置请求超时时间
Object data 或String data 发送到服务器的数据
String dataType 预期服务器返回的数据类型,包括: XML、HTML、Script、JSON、JSONP、text
boolean global 表示是否触发全局Ajax事件,默认为true
常用函数参数:
函 数 说 明
function beforeSend( XMLHttpRequest xhr) 发送请求前调用的函数参数xhr:可选
function complete( XMLHttpRequest xhr, String ts) 请求完成后调用的函数参数xhr:可选参数 ts:可选,描述请求类型的字符串
function success( Object result,String ts) 请求成功后调用的函数参数result:可选, 服务器返回的数据参数ts:可选,描述请 求类型的字符串
function error( XMLHttpRequest xhr, String em,Exception e) 请求失败时被调用的函数参数 xhr:可选参数em:可选,错误信息参数e: 可选,捕获的异常对象
使用$.ajax() 实现异步交互:
$.ajax({
url : url, //要提交的URL路径
type : "get", //发送请求的方式
data : data, //要发送到服务器的数据
dataType : "text", //指定传输的数据格式
success : function(result) { //请求成功后要执行的代码
},
error : function() { //请求失败后要执行的代码
}
});
$.get()简介:
常用参数:
参数名 说 明
String url 规定将请求发送到目标URL
Object data 或String data 可选。规定连同请求发送到服务器的数据
function success( Object result, String status, XMLHttpRequest xhr) 可选。请求成功后调用的函数
参数result:可选。服务器返回的结果数据
参数status:可选。请求的状态参数xhr:可选
String dataType 可选。预期服务器返回的数据类型,包括:XML、 HTML、Script、JSON、JSONP、text
$.post()简介
参数名 说 明
String url 规定将请求发送到哪个URL
Object data 或String data 可选。规定连同请求发送到服务器的数据
function success(Object result,String status,XMLHttpRequest xhr) 可选。请求成功后调用的函数
参数result:可选,服务器返回的结果数据参数status:
可选,请求的状态参数xhr:可选
String dataType 可选。预期服务器返回的数据类型,可用类型有:XML、HTML、 Script、JSON、JSONP、text
load()简介
参数名 说 明
String url 规定将请求发送到哪个URL
Object data 或String data 可选。规定连同请求发送到服务器的数据
function callback( Object result, String status, XMLHttpRequest xhr) 可选。请求完成后调用的函数
参数result:服务器返回的结果数据
参数status:请求的状态
3.认识JSON
JSON(JavaScript Object Notation)
一种轻量级的数据交换格式,通常用于在客户端和服务器之间传递数据
{"id":4,"name":"梅西","pwd":"6666"}
为什么使用JSON?
JSON出现之前的数据交互方式: XML
XML难于解析,体积比较大,读写不够灵活
JSON优点
轻量级交互语言,结构简单。易于解析。
JSON对象:var JSON对象 = {key:value,key:value,……};
var person = {"name":"张三","age":30};
JSON数组:var JSON数组 = [value,value,……];
var countryArray = ["中国","美国","俄罗斯"];
var personArray = [{"name":"张三","age":30},
{"name":"李四","age":40}]
$.getJSON()简介:
参数名 说 明
String url 将请求发送到哪个URL
Object data或String data 可选。连同请求发送到服务器的数据
function success(
Object result,
String status,
XMLHttpRequest xhr) 可选。请求成功后运行的函数参数result:服务器 端响应的结果数据参数status:请求的状态
总结:
Ajax主要包括的技术:
XMLHttpRequest
JavaScript
DOM + CSS
XML、JSON或HTML等
使用Ajax需要以下步骤
创建XMLHttpRequest对象
设置回调函数
初始化XMLHttpRequest组件
发送请求
使用Ajax正确处理服务器数据的条件
XMLHttpRequest的readystate属性值为4,且status属性值为200, 即 “数据读取结束且服务器响应正常 ”
jQuery提供的Ajax方法:$.ajax() $.get() $.post() $.getJSON() load()
JSON是一种轻量级的数据交换格式
jQuery的所有参数都是以JSON格式出现
注意在Java中的JSON格式写法,其key值必须为字符串
1.jQuery插件简介
jQuery插件简介:
插件(Plug-in)
是遵循一定接口规范编写的程序
是原有系统平台功能的扩展和补充
只能运行在规定的系统平台下,而不能单独运行
jQuery插件是指基于jQuery脚本库开发出来的扩充函数库,jQuery的官方插件叫做jQuery UI
常用jQuery UI插件:
dialog对话框插件
tabs选项卡插件
menu菜单插件
2.jQueryUI常用插件
dialog插件
属性 类型 说明
Boolean autoOpen 属性 设置该组件被调用时的打开状态。默认值为true,即打开对话框
Object buttons 或
Array buttons 属性 显示一个按钮,可以设置该按钮的显示文本和点击函数
Boolean modal 属性 设置组件是否使用模式窗口。默认为false
close() 方法 执行关闭对话框操作
open() 方法 执行打开对话框操作
beforeClose(event,ui) 事件 当dialog尝试关闭时,此事件将被触发参数说明:event为事件对象, ui为当前插件对象
close(event,ui) 事件 当dialog被关闭后,此事件将被触发
open(event,ui) 事件 当dialog被打开后,此事件将被触发
tabs插件:
menu插件
属性 类型 说明
Object icons 属性 设置该组件使用菜单图标
Boolean disabled 属性 设置菜单不可用
option(String name) 方法 获取指定选项的值
expand([event]) 方法 打开当前菜单项的子菜单
focus(event,ui) 事件 当菜单获取焦点或任何菜单项被打开时,触发该事件
3.动态UI
作用
提高用户体验度
降低服务器压力
4.延迟加载
5.Easy UI应用
easy UI是类似于jQuery UI的插件库
它提供了丰富的各种常用插件
tree
datagrid
dialog
window
tabs
……
tree插件:
属性 说明 默认值
String url 获取远程数据的URL null
Boolean animate 定义当节点展开折叠时是否显示动画效果 false
Boolean checkbox 定义是否在每个节点前边显示checkbox false
Boolean cascadeCheck 定义是否级联选中 true
Boolean onlyLeafCheck定义是否只在叶节点前显示checkbox false
Array data 加载的节点数据 null
插件
是遵循一定接口规范编写的程序,是原有系统平台功能的扩展和补充只能运行在规定的系统平台下,而不能单独运行。
jQuery插件:是指基于jQuery脚本库开发出来的扩充函数库
jQuery UI
easy UI
其他
jQuery UI 常用插件
dialog 插件构建普通对话框和form对话框
tabs插件构建普通选项卡和动态选项卡
menu插件构建普通菜单和图标菜单
autocomplete插件实现自动完成功能
lazyload 插件
第三方作者提供的插件
实现图片延迟加载效果
easy UI插件
tree插件实现动态树形菜单
datagrid插件构建列表展示远程数据
1.使用stream类型的Result实现Ajax
步骤一:编写Action代码
定义一个InputStream类型的成员变量
给该变量添加getter和setter方法
执行业务操作,将响应数据赋值给该成员变量
步骤二:配置struts.xml
定义stream类型的result结果集
使用标签指定响应数据类型以及输出结果
步骤三:编写JSP实现用户名验证
定义提交数据的table表单
编写验证用户名的JavaScript方法
关键步骤
导入struts2-json-plugin-xxx.jar
在struts.xml中定义package并继承json-default
指定
2.使用JSON插件实现JSON类型的Result
JSON类型的Result:
参数 作用 默认值 适用场景
root 指定要序列化的根对象 当前Actin中所有有返回值的getter方法的值 用于指定不需要 序列化key值的数据
includeProperties 指定根对象中要序列化的属性 当前根对象中的所有属性 用于需要序列化 的属性较少的情况
excludeProperties 指定根对象中要排除的属性 null 用于需要排除序列化的属性较 少的情况
excludeNullProperties 指定根对象中是否序列化值为空的属性 false 用于需要过滤空值的情况
使用datagrid插件的load()方法附加参数,可以将查询数据发送到服务器端,关键代码:$('#dg').datagrid('load',{name:name});
在struts.xml中设置相应的result结果集,将root参数值指定为datagrid需要展示的数据变量名
使用datagrid实现分页,需要在服务器端定义两个默认参数page和rows,用来接收客户端传递的分页参数
使用stream类型的Result
实现步骤
定义一个InputStream类型的成员变量
给该变量添加getter和setter方法
将要发送到客户端的数据赋值给该变量
根据业务需求合理指定param参数
作用
返回二进制数据,配合jQuery实现Ajax
param参数:contentType、inputStream
实现JSON类型的Result
实现步骤
添加第三方插件:struts2-json-plugin-xxx.jar
在struts.xml中指定package继承json-default
指定
根据业务需求合理指定param参数
作用
返回JSON格式数据,配合jQuery实现Ajax
param参数:root、 includeProperties、 excludeProperties、 excludeNullProperties