Struts2浅谈

01——自定义MVC

1.MVC设计模式

Model I模式:开发Web应用分为两种情况:

> 纯JSP技术方式开发

> JSP+JavaBean方式开发

Model I 模式不足:

> JSP页面中嵌入大量Java代码,可读性差

> 大量代码在JSP中难以复用

> 后期维护及扩展难度大

Model II模式:把JSP中嵌入的控制代码和业务逻辑处理代码提取出来,放入单独的类(ServletJavaBean)中。也就是JSP+Servlet+JavaBean

Model II模式体现了基于MVCModel View Controller 模型-视图-控制器 )的设计模式,简单的说Model II模式就是将数据显示、流程控制和业务逻辑处理分离,使之相互独立。

MVC设计模式:

当一个程序按照模型、视图、控制器三部分进行实现时,我们就可以称之为基于MVC模式开发的应用程序。

MVC由三部分组成:

Model:模型,主要用于数据和业务的处理。

View:视图,用于数据的显示。

Controller:控制器,用于进行流程控制。 (MVC框架的核心:Controller

MVC设计模式特点:

> 一个模型可以对应多个视图

> 显示与逻辑控制的分离

> 分层控制,减低了代码间的耦合。

2.DTD验证XML文档

1.DTD:文档类型定义Document Type DefinitionDTD用来描述XML文档的结构。

一个DTD文档可能包含如下内容:

> 元素的定义规则

> 元素之间的关系规则

> 属性的定义规则

DTD作用:

> 使每个XML文件可以携带一个自身格式的描述。

> DTD使不同组织的人可以使用一个通用DTD来交换数据

> DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。

2.声明DTD

DOCTYPE关键字

3.使用外部DTD验证XML

DOCTYPE SYSTEM是关键字

DTD元素

DTD元素的定义语法:

> Element:是关键字

> Name是元素名称

> Content是元素类型

常用的元素类型:

> #PCDate:可以包含任何字符数据,但不能在其中包含任何子元素。

> 纯元素类型,只包含子元素,子元素外没有文本。

》 #PCDATA-可以包含任何字符数据,但是不能在其中包含任何子元素。如:<!ELEMENT title (#PCDATA)>

》 纯元素类型-只包含子元素,并且这些子元素外没有文本。如:<!ELEMENT poem (author,title,content)>

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的方法获取FiledMethod等对象。

(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):JavaBeanJava类)

视图(View):JSPHTML文件

控制器(Controller):Servlet或者是Filter

开发MVC框架的实现步骤:

> 将请求发送到控制器(基于Filter API实现)调用功能

> 定义一个Action接口,用于表示用户请求的功能

> Action调用功能,完成业务操作,获取操作的结果,最后将结果返回给视图

02——Struts2初体验

1.Struts2概述

Struts2的由来:

Struts1 缺陷:

1.表现层支持单一

2.对Servlet API的依赖

3.不利于代码重用

=>Struts2 WebWork设计思想为核心,吸收了Struts 的部分优点,建立了一个兼容WebWorkStruts1MVC框架。

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 属性类型Javaextends关键字,用于指定要扩展的包。

Action:用于配置Struts2框架的Action类,Action元素将一个请求的URLAction的名字)对应到一个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)Struts2Action注入Servlet API对象对应的Map对象

4.Struts2 数据校验

Struts 2的提供了数据验证机制

继承ActionSupport类来完成Action开发

ActionSupport类不仅对Action接口进行简单实现,同时增加了验证、本地化等支持 

5.Struts2标签

Struts2标签主要分为两大类:

UI标签(UI Tag通用标签(Generic Tag

UI标签可分为三类:表单标签、非表单标签Ajax标签。

常用表单标签

标  签 说   明

<s:form></s:form> 表单标签

<s:textfield></s: textfield > 文本输入框

<s:password></s: password > 密码输入框

<s:textarea></s: textarea > 文本域输入框

<s:radio></s: radio > 单选按钮

<s:checkbox></s: checkbox > 多选框

<s:submit /> 提交标签

<s:reset /> 重置标签

<s:hidden /> 隐藏域标签

常用的通用标签:

名称 标  签 说   明

条件标签 <s:if>……</s:if> 根据表达式的值,

<s:elseif>……</s:elseif> 判断将要执行的内容

<s:else>……</s:else>

迭代 <s:iterator>……</s: iterator > 用于遍历集合

迭代标签

value属性:需要进行遍历的集合对象

status属性:表示当前迭代对象的一个实例

id属性:当前迭代元素的id,可直接访问元素,该参数可选

总结:

Action的实现方式

实现Action接口

继承Action接口实现类ActionSupport

Struts 2中提供了解耦耦合两种方式实现对Servlet API的访问

Servlet API解耦的访问方式

> 通过ActionContext类进行访问。

> Struts2Action注入

Servlet API耦合的访问方式

> 通过ServletActionContext类进行访问

> Struts2Action注入

ActionSupport类提供了对数据验证的支持validate()方法

Struts 2提供强大的标签支持

表单标签和通用标签

03——Struts2配置详解

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.xmlStruts2的核心配置文件,主要负责管理Struts2框架的业务控制器Action

Package: <Name namespace extends>

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:使用<default-action-ref>

3.Result的配置

(1)常用结果类型

1.dispatcher类型

默认结果类型,后台使用RequestDispatcher转发请求 

2.redirect类型 

后台使用的sendRedirect()将请求重定向至指定的URL 

3.redirectAction类型 

主要用于重定向到Action 

(2)动态结果:使用${attributeName}访问Action中的属性,实现动态结果配置

(3)全局结果:在global-results元素中嵌套Result元素实现全局结果访问

04——Struts2深入

1.Struts2结构分析

核心接口和类:

名称 作用

ActionMapper 根据请求的URI查找是否存在对应Action调用

ActionMapping 保存调用Action的映射信息,如namespacename

ActionProxy  在XWork和真正的Action之间充当代理 

ActionInvocation 表示Action的执行状态,保存拦截器、Action实例 

Interceptor 在请求处理之前或者之后执行的Struts 2组件

2.Struts2的拦截器

为什么需要拦截器?

早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足、可扩展性降低 

Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦

Struts 2大多数核心功能是通过拦截器实现的,每个拦截器完成某项功能 

拦截器方法在Action执行之前或者之后执行

拦截器栈

从结构上看,拦截器栈相当于多个拦截器的组合

在功能上看,拦截器栈也是拦截器 

拦截器与过滤器原理很相似

Action提供附加功能时,无需修改

Action代码,使用拦截器来提供

拦截器的工作原理:围绕ActionResult的执行而执行

拦截器有一个三阶段的、有条件的执行周期:

三阶段执行周期:

拦截器的执行过程是一个递归的过程 

> 做一些Action执行前的预处理

> 将控制交给后续拦截器或返回结果字符串

> 做一些Action执行后的处理

拦截器的配置:

(1)通过<interceptor.../>元素来配置拦截器

(2)通过<interceptor-ref.../>元素来使用拦截器

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组件

CommonsApache开放源代码组织的一个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/bmpimage/jpeg

文本文件 text/plain

html网页 text/html

可执行文件 application/octet-stream

文件下载:

实现步骤

编写下载文件Action

获取InputStream输入流

配置Action

指定下载文件的类型、下载形式等

使用Struts 2框架实现文件下载时,需要通过stream结果类型来实现

contentType:下载文件的文件类型

inputStream:对应实现的InputStream属性

contentDisposition:一方面表示文件的处理方式,另一方面指定下载文件的显示文件名称

bufferSize:指定下载文件时的缓冲区大小

05——OGNL

1.OGNL简介

什么是OGNL 

Object Graph Navigation Language

开源项目,取代页面中Java脚本,简化数据访问

EL同属于表达式语言,但功能更为强大 

1.表达式语言

2.类型转换器

2.OGNL在框架中的作用

1.数据的流入

2.数据的流出

3.ValueStack值栈

Struts 2框架创建的存储区域,具有栈的特点

Action的实例会被存放到值栈中

OGNL访问值栈按照从上到下的顺序靠近栈顶的同名属性会被读取

OGNLStruts 2中的作用

表达式语言

将表单或Struts 2标签与特定的Java数据绑定起来,用来将数据移入、移出框架 

类型转换 

数据进入和流出框架,在页面数据的字符串类型和Java数据类型之间进行转换

3.类型交换

1.为什么进行类型转换?

在基于HTTP协议的Web应用中

客户端请求的所有内容都以文本编码方式传输到服务器端

服务器端的编程语言却有着丰富的数据类型

2.内置转换器

Struts2框架中可以完成大多数常用的类型转换,这些常用的类型转换是Struts2框架提供的类型转换器完成的。

内置类型转换器 说    明

String 将intlongdoublebooleanString类型的数组或者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<Double> numbers;

    private List<User> users;

    //省略setter&getter&execute方法

}

创建自定义类型转换器:

继承StrutsTypeConverter抽象类

继承org.apache.struts2.util. StrutsTypeConverter类 

应用于全局范围的类型转换器

src目录创建xwork-conversion.properties

应用于特定类的类型转换器

在特定类的相同目录下创建一个名为ClassName-conversion.properties的属性文件

处理类型转换错误:

向用户输出类型转换错误的前提条件

启动StrutsConversionErrorInterceptor拦截器 

拦截器已经包含在defaultStack拦截器栈中 

Action要继承ActionSupport类 

其实是要实现ValidationAware接口 

配置input结果映射

页面使用Struts 2表单标签或<s:fielderror>标签

Struts 2表单标签内嵌了输出错误信息功能

普通HTML标签需使用<s:fielderror>标签输出转换错误 

1.修改所有类型的转换错误信息 

思路

修改xwork.default.invalid.fieldvalue键的值

  实现

struts.xml中指定资源文件的基名

<constant name="struts.custom.i18n.resources" value="message"/> 

src目录下创建资源文件并修改键值

2.定制特定字段的类型转换错误信息 

思路

Action范围的资源文件中添加I18N消息键invalid.fieldvalue.xxx 

实现

Action包下创建RegisterAction.properties,指定键值

4.OGNL表达式

OGNL:对象导航语言,一个开源项目,工作在视图层,用来简化数据的访问操作OGNLEL功能更加强大。

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的地址,

<s:param />表示需要传递的参数信息

name属性:表示传递的参数名称

value属性:表示传递参数所具有的值

日期标签:

format属性:指定格式进行日期格式化

nice属性:该属性只有truefalse两个值,用于指定是否输出指定日期与当前时间的时差,默认是false

name属性:表示当前需要格式化的日期

id属性:表示引用该元素的id

Struts2使用OGNL作为默认的表达式语言,还可以对OGNL进行扩展,最大的扩展就是支持值栈,并将值栈作为OGNL的跟对象。

日期标签可以实现对日期输出的格式化显式,URL标签可以构建一个超链接。

06——Struts2 数据校验和国际化

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.国际化

国际化(InternationalizationI18N

使程序在不做任何修改的情况下,可以在不同国家或地区和不同语言环境下,按照当地的语言和格式习惯显示字符

本地化(LocalizationL10N

一个国际化的程序,当它运行在本地机器时,能够根据本地机器的语言和地区设置显示相应字符

国际化和本地化:

Java程序的国际化思路

将程序中的提示信息、错误信息等放在资源文件中,为不同国家/语言编写对应资源文件

资源文件由很多key-value对组成,key保持不变,value随国家/语言不同而不同

这些资源文件使用共同的基名,通过在基名后面添加语言代码、国家和地区代码来进行区分

实现国际化步骤:

1.struts.xml中指定资源文件的基名及存储路径

2.按照需求创建对应的三个资源文件,存放相应资源

3.实现JSP页面信息的国际化显示

4.实现验证错误信息的国际化显示

资源文件的范围:

全局资源文件 

所有包的所有Action类都可以访问

导致资源文件变得非常庞大臃肿,不便于维护  

包范围资源文件 

对应包下创建package_language_country.properties

处于该包及子包下的action才可以访问该文件

Action范围资源文件

命名格式ActionClassName_language_country.properties 

只有单个Action可以访问

08——AjaxJquery

1.认识Ajax

Ajax:异步刷新技术

无刷新:不刷新整个页面,只刷新局部

无刷新的好处

只更新部分页面,有效利用带宽

提供连续的用户体验

提供类似C/S的交互效果,操作更方面

传统WebAjax的差异:

差异 方式 说      明

发送请求方式不同 传统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 对象读取响应结束

常用属性

statusHTTP的状态码 

状态码 说    明

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 请求方式(POSTGET,默认为GET

Number timeout 设置请求超时时间

Object data String data 发送到服务器的数据

String dataType 预期服务器返回的数据类型,包括: XMLHTMLScriptJSONJSONPtext

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 HTMLScriptJSONJSONPtext

$.post()简介

参数名 说    明

String url 规定将请求发送到哪个URL

Object data String data 可选。规定连同请求发送到服务器的数据

function success(Object result,String status,XMLHttpRequest xhr) 可选。请求成功后调用的函数

参数result:可选,服务器返回的结果数据参数status

可选,请求的状态参数xhr:可选

String dataType 可选。预期服务器返回的数据类型,可用类型有:XMLHTML ScriptJSONJSONPtext

load()简介

参数名 说    明

String url 规定将请求发送到哪个URL

Object data String data 可选。规定连同请求发送到服务器的数据

function callback( Object result, String status, XMLHttpRequest xhr) 可选。请求完成后调用的函数

参数result:服务器返回的结果数据

参数status:请求的状态

3.认识JSON

JSONJavaScript  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 dataString data 可选。连同请求发送到服务器的数据

function success( 

  Object result,

  String status, 

  XMLHttpRequest xhr) 可选。请求成功后运行的函数参数result:服务器 端响应的结果数据参数status:请求的状态

总结:

Ajax主要包括的技术:

XMLHttpRequest

JavaScript

DOM + CSS

XMLJSONHTML

使用Ajax需要以下步骤

创建XMLHttpRequest对象

设置回调函数

初始化XMLHttpRequest组件

发送请求

使用Ajax正确处理服务器数据的条件

XMLHttpRequestreadystate属性值为4,且status属性值为200 即 “数据读取结束且服务器响应正常 ”

jQuery提供的Ajax方法:$.ajax() $.get() $.post() $.getJSON() load()

JSON是一种轻量级的数据交换格式

jQuery的所有参数都是以JSON格式出现

注意在Java中的JSON格式写法,其key值必须为字符串

09——Jquery常用插件

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插件构建列表展示远程数据

10——JqueryStruts2综合应用

1.使用stream类型的Result实现Ajax

步骤一:编写Action代码

定义一个InputStream类型的成员变量 

给该变量添加gettersetter方法

执行业务操作,将响应数据赋值给该成员变量

步骤二:配置struts.xml

定义stream类型的result结果集

使用<param>标签指定响应数据类型以及输出结果

步骤三:编写JSP实现用户名验证

定义提交数据的table表单

编写验证用户名的JavaScript方法

关键步骤

导入struts2-json-plugin-xxx.jar

struts.xml中定义package并继承json-default

指定<result>type属性指定为“json

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实现分页,需要在服务器端定义两个默认参数pagerows,用来接收客户端传递的分页参数

使用stream类型的Result

实现步骤

定义一个InputStream类型的成员变量 

给该变量添加gettersetter方法

将要发送到客户端的数据赋值给该变量

根据业务需求合理指定param参数

作用

返回二进制数据,配合jQuery实现Ajax 

param参数:contentTypeinputStream

实现JSON类型的Result

实现步骤

添加第三方插件:struts2-json-plugin-xxx.jar

struts.xml中指定package继承json-default

指定<result>type属性为“json

根据业务需求合理指定param参数

作用

返回JSON格式数据,配合jQuery实现Ajax 

param参数:root、 includeProperties、 excludeProperties、 excludeNullProperties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值