第一章- 动态网页开发基础
三大领域:B/S (网站)C/S(QQ)嵌入式开发(苹果,安卓手机)
动态网页/静态网页:
所需技术:htm,css,数据库,javascript,xml,一门高级语言(java,C#,PHP)
主流的动态网页技术:jsp/asp.net/php
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,[1] 也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache Nginx IIS(Microsoft的Internet信息服务器(Internet Information Services,IIS)
常见的web服务器:
1. weblogic oracle 公司
2. websphere IBM公司
3. Jboss 免费的开源的
4. tomcat 小型的
http: 特点 【断开式】 每一次都是全新的
1.JSP为什么出现?
在开发Web网站时,发现使用servlet做界面比较麻烦,于是又有了一种新技术JSP
2.Jsp是什么?
5. jsp运行在服务器
6. jsp(java server page)
7. jsp的基础是servlet(相当于给servlet做个包装)
8. jsp是综合技术jsp=java代码+html+css+javascript+jsp标签
9. jsp无需配置,如果你修改了jsp代码,不需要重新reload web应用
10. jsp访问:http://IP:8080/web应用名/jsp路径(jsp路径从WebRoot开始算)
3. JSP是编译执行,PHP为解释执行
计算机语言:机器语言,汇编语言,高级语言
机器语言 0和1
汇编语言 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆
高级语言 高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言
高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:解释类 编译类
解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。
编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.OBJ)才能执行,只有目标文件而没有源代码,修改很不方便
二,B/S架构与C/S架构
1. 基于B/S架构的web应用程序由于不再受到安装客户端的限制,访问极其简便,因此越来越多地被企业采用。 在此需要特别说明的是B/S架构的出现不是对C/S架构的否定,而是对C/S架构的一种变化或者改进
2. B/S架构工作原理:
浏览器接受用户的输入
浏览器向服务器端发送请求
数据处理
发送响应
三,URL(统一资源定位符)的组成
1. HTTP协议: 服务器域名或IP 端口号 路径
举例:http://www.sohu.com/news/index.html
默认的http端口号为80,
端口号与网络协议相关
四,Tomcat的获取与安装
1. Tomcat安装完毕后要设置TOMCAT_HOME环境变量设置方法与java环境变量步骤类似,设置值为Tomcat的安装目录
2. Tomcat启动与停止
通过服务器实现启动或停止
通过控制面板>管理工具>服务>鼠标右击Apache Tomcat选择启动停止
通过Tomcat菜单中的Monitor Tomcat工具启动或停止Tomcat服务
通过所有程序>Apache Tomcat XX>Monitor Tomcat>General选择启动或停止
五,Tomcat目录结构
/bin 存放各种平台下用于启动和停止Tomcat的脚本文件
/conf 存放Tomcat服务器的各种配置文件,其中最重要的是server.xml
/lib 存放Tomcat服务器所需的各种JAR文件
/logs 存放Tomcat的日志文件
/temp Tomcat运行时用于存放临时文件
/webapps Web应用的发布目录
/work Tomcat把由JSP生成的Servlet放于此目录下
端口号的配置:
Tomcat目录下>conf>server.xml 打开后找到<Connector>节点然后修改port属性
http://localhost:8080/
Web应用的目录结构,web应用是位于tomcat/webapps目录下的一个子目录
/ web的根目录存放各类jsp,html
/WEB-INF 存放应用程序所使用的各种资源包括web.xml
/WEB-INF/classes 存放class文件
/WEB-INF/lib 存放JAR文件
配置web应用起始页:
修改web.xml文件中的以下两个标签,注意标签名
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
第二章-JSP的组成
JSP的执行过程: 翻译阶段
编译阶段
执行阶段
JSP页面组成:静态内容 ,指令,表达式 ,小脚本 ,声明 ,注释
JSP中的注释:HTML注释,JSP注释标记,
JSP指令元素page
Language属性
Import属性
contentType属性
举例 <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
jsp表达式:其语法为<%= java表达式%>,容器会先计算表达式的值或者变量的值,然后将结果输出的页面
Jsp声明 可以定义变量和方法,其中变量的值会一直保持,页面刷新不会重置该变量的值
定义在小脚本里面的变量,每次刷新页面会重置该变量的值
jsp页面中的代码执行加载顺序
java是在生成页面时在服务器端运行的代码,jsp在服务器的servlet里运行,而javascript和html都是页面生成完在浏览器端运行的代码。所以加载执行顺序是是java>jsp>js。
第三章-jsp数据交互
JSP内置对象:request,response,out,application,session
Request对象专门用于处理客户端请求
Request方法:String getParamenter(根据页面表单组件名称获取页面提交数据)
String[] getParamenterValues(获取一个页面表单组件对应多个值时的用户请求数据)
Void setCharacterEncoding(解决中文乱码)
Request.getRequsestDispacher(path)(返回一个javax.servlet.RequestDispacher对象,该对象用forward方法用于转发请求)
一, JSP内置对象response
1. response对象与request对象相对应,它用于响应客户端输出信息
2. response对象几个常用方法
addCookie(Cookie cookie) 在客户端添加Cookie
setContentType(String type) 设置HTTP响应的contentType类型
setCharacterEncoding(String chareet)设置响应所采用的字符编码类型
重点:( sendRedirect(String path) 将请求重新定位到一个不同的URL上)
二, 转发与重定向
1什么是转发:
使用request的getRequestDispatcher()方法即可实现
转发就是将客户端发送请求道服务器,Web服务器内部的方法在容器内完成处理和请求和转发,然后将目标资源发送给浏览器,不管服务器内部如何处理,浏览器都只提出了一个请求,因而客户端的URL地址不会发生改变,因此可以共享request范围内的数据
举例:request.getRequestDispatcher("welcome.jsp").forward(request, response)
转发的作用:在多个页面交互的过程中实现请求术数据的共享。
2什么是重定向
使用response对象的sendRedirect()方法。
重定向的执行结果就是客户端重新向服务器请求一个地址链接,由于是发送新的请求因而上次请求中的数据将丢失这种行为就是重定向
response.sendRedirect("welcome.jsp")]
重定向和转发的区别
区别一:
重定向时浏览器上的网址改变
转发是浏览器上的网址不变
区别二:
重定向实际上产生了两次请求
转发只有一次请求
重定向:
发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器
转发:
发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器
区别三:
重定向时的网址可以是任何网址
转发的网址必须是本站点的网址
详解:
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起
三, Jsp访问数据库
1. JDBC链接数据库 贾琏欲执事(红楼梦)
贾—》导包(jar import java.sql.*;)
琏à 连接字符串 (IP,数据库名称,用户名,密码)连接对象
欲—》sql语句
执—》增删改查
事—》关闭
王熙凤(女强人,强势 管家)—》贾琏(满有才)
(1) 加载JDBC驱动。
(2) 与数据库建立链接。
(3) 发送SQL语句,并得到返回结果。
(4) 处理返回结果。
(5) 数据库访问结束后,进行资源释放。
使用JSP访问数据库,就是将JDBC访问数据库代码嵌入到JSP页面中,实现步骤与java相同。
第四章-状态管理
一. cookie
(一) 在jsp中使用cookie
1. 使用page指令
<%@page import=”javax.servlet.http.cookie”%>
2. 创建cookie对象
Cookie newCookie=new Cookie(String key,Object value);
3. 写入cookie
Response.addCookie(newCookie);
4. 读取cookie
Cookie[] cookies=request.getCookies();
(二) cookie对象的几个方法60*60*24
void setMaxAge(int expiry) 设置有效期,单位秒
void setValue(String value)
String getName()
String getValue()
Int getMaxAge() 获取有效期,单位秒
二. session
(一) session对象的几个常用方法
void setAttribute(String key,Object value);
Object getAttribute(String key)
void invalidate() 设置session对象失效
String getId() 获取session id
void setMaxInactiveInterval(int interval) 设置session的非活动时间
int getMaxInactiveInterval() 获取session的有效非活动时间
(二) session和cookie的区别
1. session是在服务器端保存用户信息,cookie是在客户端保存用户信息
2. session中保存的是对象,cookie中保存的是字符串
3. session对象随会话结束而关闭,cookie可以长久保存在客户端
4. cookie通常用于保存不重要的用户信息,重要的信息使用session保存
session和cookie
默认情况下,浏览器同一个进程的不同页面共享临时Cookie,这个Cookie保存的SessionID成为服务器端识别Session的依据
Seesion对象有效期:一次会话(浏览器关闭可能导致会话结束)怎么判断会话结束:IE进程结束,重新打开或换个浏览器,否则在桌面上重新打开一个浏览器是指一个seesion对象
类似于生活中 当登录某个网站 关闭了改窗口 重新 打开时 依旧有效
Seesion是保存在服务器中但是通过Cookie来实现
1. 重定向是客户端跳转,共有二次请求 转发是服务器端跳转 只有最开始打开页面的一次请求
对Cookie的赋值只有等下一次浏览请求时才能生效
1.page代表JSP这个实例本身(用的少)
2.PageContext(域对象,存放数据只能在当前页面有效)
3.session(域对象,存放数据在一次会话有效)
4.applaction(域对象 存放数据在整个Web应用运行周期有效)
5.cookie是由服务器端生成,发送给客户端浏览器的,浏览器会将其保存在某个目录下的文本文件中。
通过cookie,可以实现浏览器与服务器之间的数据传递。
就WEB开发来说,一个会话就是用户通过浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。
session与cookie均能实现信息的保存,但是二者的区别如下。
session是在服务器端保存用户信息,cookie是在客户端保存用户信息。
session中保存的是对象,cookie保存的是字符串。
session对象随会话结束而关闭,cookie可以长期保存在客户端。
cookie通常用于保存不重要的用户信息。我们可以降低代码的冗余问题,并且修改起来也更加方便
三.include指令:<%@ include file=”应用文件路径”%>
JSP的四种范围,分别为page、request、session、application
application:
全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
session:
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
request:
请求作用域,就是客户端的一次请求。
page:
一个JSP页面。
以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filte
四.application
(一)常用方法:
void serAttribute(String key,Object value)
Object getAttribute(String key)
String getRealPath(String path) 返回相对路径的真实路径
五.对象的范围
(一)page范围:单一jsp页面的范围
pageContext.setAttribute(“属性名”,属性值)
(二) request范围:
request.setAttribute(“属性名”,属性值)
(三) session范围,可以跨越多个请求
session.setAttribute(“属性名”,属性值)
(四) application范围,全局有效
application.setAttribute(“属性名”,属性值)
六.jsp的常用内置对象:out,request,response,session,application
第五章-JSP应用优化
一.JNDI
JNDI的全称是java命名与目录接口(Java Naming and Directory Interface),通过指定一个资源名称,将该名称与某一资源或服务相关联。
二.数据库连接池
数据库连接池以数据源的方式体现,在Tomcat中配置数据源的步骤如下。
(1) 配置context.xml文件。
<Resource name="jdbc/news" auth="Container" type="javax.slq.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="SYSTEM"
password="whhp" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:orcl" />
(2) 配置web.xml文件。
<web-app>
<resource-ref>
<description>news DataSource</description>
<res-ref-name>jdbc/news</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
(3) 添加驱动,将数据库驱动的jar文件复制到Tomcat安装目录下的lib目录中。
(4) 进行代码编写,使用lookup( )方法获得数据源对象。
Context ctx=new InitialContext( );
DataSource ds=(DataSource)ctx.looup(“java:comp/env/jdbc/news”);
Connection con=ds.getConnection( );
三.JavaBean
(1)JavaBean是Java中可以跨平台的重用组件。
(2)JavaBean在应用中主要负责封装数据和封装业务处理。
(3)JavaBean的定义要遵循一定的规则,体现在以下几个方面:
1.公有类,并提供无参的公有构造方法.
2.属性私有。
3.具有公有的访问属性珠getter和setter方法。
第六章 jsp开发业务应用
分页
分页就是显示数据,能够按照指定格式显示,布局清晰,不受信息数量限制。
目前的分页方式有多种,一种是将所有查询结果保存在session对象或集合中,翻页的时候从session或集合取出一页所需的数据显示。这种方法有两个主要的缺点:一是用户看到的可能是过期数据;二是如果量非常大,查询一次结果集会耗费很长时间,并且存储的数据也会占用大量内存,效率明显下降。
用SmartUpload组件实现文件上传
SmartUpload组件式一个实现文件上传的免费组件,虽然已不再提供更新,但由于使用简单方便依然被非常广泛地使用。
使用SmartUpload组件具有以下几个特点。
使用简单:SmartUpload组件可以方便地 到JSP文件中,在JSP文件中编写少量代码即可完成文件的上传和下载功能,十分方便
能够全程控制上传内容:使用SmartUpload组件提供的对象及操作方法,可以获得全部上传文件的信息,包括文件名称,类型,大小等,方便操作。
能够对上传文件的大小,类型进行控制:为了避免在上传过程中出现异常数据,在Smartupload组件中,专门提供了相应的方法用于限制不符合要求的文件数据。
SmartUpload组件的常用方法
如果想项目中使用SmartUpload组件
语法格式如下:
<% page import=”jcom.jspsmart.upload.*” %
SmartUpload组件的应用
<% page import=”com.jspsmart.upload.*” %>
<%
SmartUpload su =new SmartUpload();
//初始化SmartUpload对象
Su.initialize(pageContext);
Try{
Su.upload();
} catch(Exception e){
e.printSackTrace();
out.println(“你选择的文件上传失败!”);
}
//得到单个上传文件的信息
Com.jspsmart.upload.File file=su.getFiles().getFile(0);
//设置文件在服务器的保存位置
String filepath=”upload\\”;
Filepath+=file.getFileName();
//文件另存为
File.saveAs(filepath,smartUpload.SAVE_VIRTUAL);
%>
第八章-JSTL和EL
EL表达式
作用:快速定位到作用域中的变量及其属性。
特点:1.自动转换类型。
2.使用简单
语法: ${EL表达式}
操作符:
.操作符: 可以获取对象的某个属性值(例:${employee.computer})
[]操作符: 既可以获取对象的某个属性值,也可以获取数组型对象的某个下标的值(例:${employee[“computer”]}, ${list[0]})
EL隐式对象
作用域访问对象:pageScope,requestScope,sessionScope,applicationScope。与page,request,session,application内置函数用法一致,可以访问作用域内设置的函数。(例requestScope.name)
参数访问对象:param,paramValues。可以访问对应标签的name属性值和JSTL中定义的变量。(例:${param.name} ${paramValues.habits})
JSP隐式对象:pageContext提供对页面信息和JSP内置对象的访问
[注:若查找时不指定作用域范围,则会照pageScope-requestScope―sessionScope―applicationScope顺序查找]
JSTL标准标签库
作用:可实现对页面中的逻辑控制
[注:使用前要导入核心标签库:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %> ]
通用标签
1.定义变量或重新赋值
<c:set var=”变量名” value=”值” scope=”范围”/>
<c:set value=”值” target=”目标对象” property=”对象属性名” />
2. 输出内容
<c:out value=”值” default=”为空时显示的默认值” />
3.移除变量
<c:remove var=”变量名” scope=”范围” />
条件标签
<c:if test=”判断条件” var=”变量名” scope=”范围”>
内容…
</c:if>
举例<c:set var="isLogin" value="${not empty sessionScope.userId}"/>
<c:if test="${not login}">
…登录表单
</form>
</c:if>
迭代标签
<c:forEach var=”当前成员引用名” items=”集合” varStatus=”属性名”
begin=”开始位置,默认为0”
end=”结束位置”
step=”递增量,默认为1”>
</c:forEach>
varStatus属性值:
current 当前迭代项
index索引
count 迭代计数
first 是否为第一次迭代
last 是否为最后一迭代
begin/end/step 标签的开始/结束/步长值
<!-- 循环输出商品信息 -->
<c:forEach var="product" items="${requestScope.products}" varStatus="status">
<!-- 如果是偶数行,为该行换背景颜色 -->
<tr <c:if test="${status.index % 2 == 1 }">style="background-color:rgb(219,241,212);"</c:if>>
<td>${product.name }</td>
<td>${product.area }</td>
<td>${product.price }</td>
</tr>
</c:forEach>
逻辑运算符:
&& and
|| or
! not
关系运算符:
!= ne
== eq
〉 gt
< lt
>= ge
<= le
空:empty
第十一章-Servlet基础
1.servlet
1.1 servlet ==>Java类
1.2 该java程序要遵守servlet开发规范(怎么遵守?通过 继承servlet接口)
1.3 servlet 是运行在服务器上的
1.4 servlet是jsp的基础
1.5 tomcat 3个功能: jsp容器 Web服务器 Servlet容器
3.servlet生命周期
3.1当用户第一次访问 servlet时,tomcat会帮忙把servlet对象创造出来(只有一个servlet对象)
3.2 然后调用init()方法 (只执行一次)
3.3以多线程的方式来处理客服端的请求 (调用了service()方法)
3.4 service()会自动根据 客服端来调用 doGet()或doPost()
3.5 servlet退出服务 (正常关闭才会调用,比如 关闭tomcat或更改.class文件 ,直接X掉web(浏览器)不会调用service())
二。servlet表单验证
1.创建web应用程序
2.在jsp文件中编写表单
!-- action提交的文件名与web.xml中标签<url-pattern>的名字一致-->
<form action="kevin">
username:
<input type="text" name="username" />
<br />
password:
<input type="password" name="password">
<br />
<input type="submit" value="submit" />
</form>
3.编写 servlet (Java类)LoginServlet(类名)
在类中获取表单的相关参数,并通过输出流输出
String username = req.getParameter("username");
String password = req.getParameter("password");
req.setCharacterEncoding("GBK"); //输出转换为中文
resp.setContentType("text/htmll;charset=GBK");//设置输出为中文
PrintWriter out = resp.getWriter();
out.println("<html><head><title>Login message</title></head>");
out.println("<body>");
out.println("username: "+username);
out.println(" password: "+password);
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
4.在web项目的web.xml中添加信息
<servlet>
<servlet-name>L</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>L</servlet-name>
<url-pattern>/kevin </url-pattern>
</servlet-mapping>
5.发布项目 ,启动tomcat
6.在网页中输入地址
http://localhost:8080/jspch1101/index.jsp,输入用户名和密码点提交后会跳转到servlet页面
Servlet是一个符合特定规范的java程序,在服务器端运行,处理客户端请求并作出响应。
一、在调用Servlet时,首先要在程序中导入Servlet所需的包。
1.impoet java.io.*;
2.import javax.servlet.*;
3.import javax.servlet.http.*;
二、创建用于Web应用时Servlet继承自HttpServlet类。
三、实现doGet()或者doPost()方法。
四、Servlet的生命周期
1. 加载和实例化 (Servlet容器根据Servlet类的位置加载Servlet类,成功加载后,由容器创建
Servlet的实例)
2. 初始化 (init()方法只能被调用一次)
3. 服务 (调用Servlet的service()方法处理客户端请求)
4. 销毁 (销毁实例之前调用destroy()方法)
五、Servlet的编译和部署
编译产生的class文件放入web应用的WEB-INF/classes目录下
文件夹层次与包一致
例如 org.jbit.servlet.HelloServlet的class文件全路径为
WEB-INF/classes/org/jbit/servlet/HelloServlet.class
1.web.xml文件的配置
<web-app>
<servlet>
<servlet-name>TServlet</servlet-name>
<servlet-class>ff.TServlet</servlet-class>
<init-param> //获得初始化参数
<param-name>initParam</param-name>
<param-value>Hello Servlet</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>TServlet</servlet-name>
<url-pattern>/TServlet</url-pattern>
</servlet-mapping>
<context-param> //获得上下文参数
<param-name>contextParam</param-name>
<param-value>Hello Servlet</param-value>
</context-param>
</web-app>
对于GenericServlet类中的init()和init(ServletConfig config)
在开发中我们是使用GenericServlet的子类HttpServlet的,而HttpServlet继承了GenericServlet中
的init()和init(ServletConfig config)方法,而在init(ServletConfig config)中会调用init()的,
而且系统会在init(ServletConfig config)方法中执行下面语句:
public void init(ServletConfig config){
this.config = config;//this.config为GenericServlet类的config
init();
}
其实在父类的有参init方法中会隐式的调用无参的init的方法,仅此而已,没什么难的,初始化时永远都调用的是有参的init的方法。
在GenericServlet中,从servlet接口带来的init(ServletConfig config)对它进行重写时,如果忘了调用super.init(config)时,就会出现空指针异常,为了解决这样的
情况,GenericServlet中于是有了一个无参的init()方法,推荐大家重写init方法时,
重写无参的init()方法.
(第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。
通常我们在编写集成自GenericServlet的Servlet类时,只需重写第一种不带参数的init()方法就可以了。如果覆盖了第一种init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码调用。)
web.xml文件中Servlet映射路径<url-pattern>
对于如下的一些映射关系:
• Servlet1 映射到 /abc/*
• Servlet2 映射到 /*
• Servlet3 映射到 /abc
• Servlet4 映射到 *.do
注意: *.do这种形式优先级别最低
<load-on-startup>-1</load-on-startup>、
· load-on-startup标记容器是否在启动的时候实例化并调用其init()方法的优先级。
· 它的值表示servlet应该被载入的顺序
· 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
· 如果值小于0或未指定时,则表示只有在第一次请求的容器才在该servlet调用初始化函数
· 正值越小,servlet的优先级越高,应用启动时就越先加载。
· 值相同时,容器就会自己选择顺序来加载。
第十二章 - Ajax
一、 什么是Ajax
Ajax是几个单词首字母的缩写:Asynchronous(异步的) JavaScript And Xml。Ajax并不是一种全新的技术,而是整合了几种现在的技术:JavaScript、XML和CSS。主要是JavaScript,我们通过JavaScript的XMLHttpRequest对象完成发送请求到服务器并获得返回结果的任务,然后使用JavaScript更新局部的网页,异步指的是,JavaScript脚本发送请求后并不是一直等着服务器的响应数据。XML一般用于请求数据和响应数据的封装,CSS用于美化页面样式。
二、 XMLHttpRequest
1、 XMLHttpRequest的常用方法
Open(method,URL,async): 建立于服务器的连接,method参数指定请求的HTTP方法;URL参数指定请求的地址;async参数指定是否使用异步请求,其值为true或false。
Send(conetent): 发送请求,content参数指定请求的参数。
SetRequestHeader(header,value): 设置请求的头信息。
2、 XMLHttpRequest的常用属性
Onreadystatechange: 指定XMLHttpRequest对象的回调函数。
ReadyState: XMLHttpRequest的状态信息
0 表示已经创建一个对象,但还没初始化
1 表示对象开始发送信息
2 表示对象的请求发送完成
3 对象开始读取响应
4 对象读取响应结束
Status HTTP的状态码,仅当ReadyState的值为3或4时,status属性才能使用
200 服务器响应正常
400 无法找到请求的资源
403 没有访问权限
404 访问的资源不存在
500 服务器内部错误
ResponseText: 获得响应的文本信息
ResponseXML: 获得响应的XML文档对象
三、 使用Ajax技术实现异步的步骤
1、 创建XMLHttpRequest对象。
2、 通过XMLHttpReuqest对象设置请求信息。
3、 向服务器发送请求。
4、 创建回调函数,当XMLHttpRequest对象状态改变时,根据响应状态动态更新页面。
四、 Ajax的工作过程
1、 通过XMLHttpRquest对象向服务器发送信息。
2、 使用XMLHttpRequets对象解析服务器响应数据
3、 通过JavaScript脚本动态更新页面
举例
function doAjax(){
createXMLHttpRequest();
var name = document.getElementById("uname").value;
var pwd = document.getElementById("upwd").value;
if(XMLHttp!=null){
var url ="LoginServlet?uname="+name+"&upwd="+pwd;
XMLHttp.open("POST",url,true);
XMLHttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded;");
XMLHttp.onreadystatechange=processRequest;
XMLHttp.send(null);
}else{
alert("不能创建XMLHttpRequest对象实例")
}
}
function processRequest() {
var messdiv = document.getElementById(“mess”);
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200) {
//responseText表示请求完成后,返回的字符串信息 if (xmlhttp.responseText == "false")
messdiv.innerHTML = "用户名可以使用";else
messdiv.innerHTML = "用户名已被使用"; } else {
alert("请求处理返回的数据有错误");
}
}
}