特点:数据库作为server,使用其特定的编程语言,编写业务逻辑,客户端提供操作页面和少量的业务逻辑
缺点:移植性较差,更换数据库时需要重新编程,不适合大型应用
特点:数据库只负责数据的管理;应用服务器提供所有的业务逻辑处理;客户端只负责操作界面
优点:移植性好,适合大型应用
缺点:客户端需要单独安装(限制),开发复杂(需要自定义协议,编写客户端和服务器的通信模块)
特点:数据库只负责数据管理;应用服务器提供所有的业务逻辑处理;客户端只负责操作界面
优点:不需要单独安装客户端,开发相对于CS简单,客户端与服务端都是使用标准的HTTP协议
Sun(Oracle)公司制定的一种用来扩展web服务器功能的组件规范
扩展web服务器功能:
早期的web服务端只能处理静态资源请求,无法根据请求计算后生成相应的HTML页面,但是Servlet可以完成这一个需求,Servlet需要满足一种规范(Servlet运行环境)Tomcat就是一个容器(服务器),提供了Servlet的运行环境
组件规范:
Servlet是一个组件,符合一定的规范,实现部分的功能,并且需要部署到容器中才能运行的软件模组
容器:符合一定规范,提供组件运行环境的一个程序
文字总结:浏览器根据IP建立与容器的连接,浏览器将请求数据打包发送给服务器,服务器接收到后进行拆包,解析请求数据包,封装对象,容器依据路径找到Servlet路径创建对象,然后调用Servlet的service()方法,从respose中获取结果,然后将其进行打成响应数据包,然后通过HTTP协议发送给浏览器,浏览器进行解析执行在客户端进行显示
数字错误是服务器执行完客户端的请求后,返回给客户端执行结果的状态编码,当执行正确时也会返回数字200;
产生原因:web服务器根据请求地址找不到对应的资源
可能情况:
产生原因:web服务器找不到service()方法
可能情况:
可能原因:程序运行过程中出错
可能情况:
请求地址格式:
http://ip:port/project_name/url-pattern
http://localhost:8088/Servlet2008/demo1
请求资源路径:
/project_name/url-pattern
/Servlet2008/demo1
Servlet路径:
/url-pattern
/demo1
由W3C制定的一种应用层协议,用来定义浏览器和服务器之间如何通信以及通信的数据格式
请求行:请求方式+请求资源路径+协议版本
消息头:是一些键值对,通讯的双方通过消息头来传递一些特定的含义
实体内容:只有当请求为post时,实体内容才会有数据(请求参数)
状态行:协议版本+状态码+状态描述
消息头:web服务器返回一些消息头给客户端,例如返回content-type告诉浏览器,服务器返回的数据类型以及字符集
实体内容:程序处理的结果
当web服务器收到HTTP请求时,通信数据由web容器负责封装和提供这些信息被解释成俩个对象
与请求数据对应的是HttpServletRequest对象
当客户端通过Http协议访问服务器时,请求中的所有消息都能封装到这个对象中
作用:读取或写入Http请求数据;获取和设置cookie;取得路径信息;标识Http会话;实现请求转发
与响应数据对应的是HttpServletResponse对象
当服务器通过http协议提供给客户端时,响应中的所有消息都会封装到对象中
作用:设置对客户端的输出内容;设置响应的状态码;设置浏览器的解码方式;设置cookie;实现重定向
getParameter()方法:
常用于传入的参数中,一个名字对应一个值的形式
String request.getParameter(String name);
getParameterValues()方法:
当需要获取参数名相同的多个参数值时使用该方法,用于获取提交表单中的复选框的值,如参数名写错,会产生null
String[ ] request.getParameterValues(String name);
get请求:当需要向服务器请求指定的资源时使用的方法
什么情况下浏览器发送get请求:在浏览器地址栏输入一个地址;点击连接(类似于超链接)
post请求:向服务器提交需要处理的数据,这些数据写在请求数据包的实体内容中
向服务器提交需要处理的数据,表单的默认请求方式为get请求,会将请求数据添加到请求资源的后面,只有提交少量数据,并显示在浏览器地址栏上,不安全
只有将表单的method属性改为post,才会发送post,请求参数添加到实体内容中,可提交大量数据,不会将请求参数显示在地址栏上,相对安全
为什么表单提交中会出现乱码:当表单提交时,浏览器会对中文参数值进行编码(会使用打开表单所在页面时的字符集进行编码)服务器在默认情况下会使用ISO-8859-1去解码,当编码和解码不一致时会出现乱码
确保表单所在的页面按照指定的字符集打开
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
在服务端继续按照这个编码格式去解码,必须添加在读取数据之前,只针对post有效
request.setCharacterEncoding("utf-8")
确保表单所在页面按照制定的字符集打开
进行转译
String name = request.getParameter(“name”);
name = new String(name.getBytes(“iso-8859-1”),”utf-8”);
response.setContentType(“text/html;charset=utf-8”)
优先级:精确匹配 > 后缀匹配 > 通配符匹配
精确匹配
通过将请求资源路径中的具体名称与web.xml中的进行比对,严格匹配相等后找到对应的资源并执行;尽管应用中有当前所需的页面,但是也会执行的servlet
通配符匹配
使用"/*"来匹配0或者多个字符
<url-pattern>/*
/ServletEmp/addEmp.html // 匹配成功
/ServletEmp/abc/a/f/gg/hh/kk/addEmp //匹配成功
后缀匹配
不能使用/开头,使用“*.xx”开头的任意多个字符
<url-pattern>*.do</url-pattern> //会匹配所有以.do结尾的请求
无匹配
如果精确匹配,后缀匹配,通配符匹配都未匹配成功,容器会查找到对应的文件后返回,若找不到则返回404错误
一般情况下Servlet的主要作用是充当控制器的角色即接收请求并分发给不同的资源,这时servlet只要有 一个就可以完成分发请求的过程
服务器向浏览器发送一个302状态码以及一个location消息头(该消息头的值是一个地址,称之为重定向的地址),浏览器收到后立即向重定向的地址发送请求
response.sendRedirect(String url)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZdrsHPfJ-1613106133522)(C:\Users\Melody\AppData\Roaming\Typora\typora-user-images\image-20210208153141422.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWwyZuTh-1613106133529)(C:\Users\Melody\AppData\Roaming\Typora\typora-user-images\image-20210208160305179.png)]
什么是实例化:容器调用Servlet构造器,创建一个Servlet对象
什么适合实例化:
什么是初始化:容器在创建好servlet对象后会立即调用对象的init方法,一般情况下不用写init方法,它会自己实现,init方法只会执行一次
容器在创建好Servlet对象后还会创建一个ServletConfig对象,用来读取在web.xml中内部配置的内的初始化信息,然后将ServletConfig对象作为参数传递给init方法,从而进行初始化操作
实例化,初始化结束后,Servlet容器调用Service()方法,进行业务处理
处理结束后,容器根据自身算法删除Servlet对象,删除前会调用destroy()方法,并且只会执行一次
容器启动后会为每一个web应用创建唯一的一个符合ServletContext接口要求的对象,该对象就是servelt上下文
特点:
特点:Servlet上下文绑定的数据可以被整个应用上的所有组件共享,并且可以一直访问
//获取全局上下文对象
ServletContext application = getServletContext();
Object count = application.getAttribute("count");
if(count == null){
//application.setAttribute("count",1);
application.setAttribute("count",
application.getInitParameter("count"));
}else{
application.setAttribute("count",Integer.parseInt(count.toString())+1);
}
out.println("当前浏览量为:"
+application.getAttribute("count")+"");
JSP的由来:Servlet技术产生之后再使用时最大的麻烦在于使用大量的out.println()语句输出页面,这样的形式再系统变更,维护,预览效果时都不能方便快捷的完成任务,于是JSP应用而生,用来将Servlet中负责显示的语句抽离出来
SUN(Oracle)公司制定的一种服务端动态页面技术的组件规范,JSP是以.jsp为后缀的文件,在读文件中,主要是以HTML和少量的JAVA代码,JSP文件会被容器转换为一个Servlet类,然后执行,JSP的本质上依据是Servlet
HTML标记,CSS,javascript在jsp中编写方式与HTML中的一样
作用:控制页面在浏览器中的显示效果
转译成Servlet的规则:成为Servlet中service()方法的out.println()方法
注释的内容如果包含java代码,这些代码不会被注释
语法规则:
其中若有Java代码,则会被注释,不会编译
语法规则:<%-- 内容 – %>
三种表示:JSP表达式,JSP小脚本,JSP声明
编写位置:页面的任意位置
作用:控制页面中可变内容的产生
语法规则:<%= 内容 %>
合法内容:变量,变量加运算符组成的表达式,有返回值的方法
转译成Servlet的规则:在Service()方法中用out.println()
语句输出的该变量,表达式以及方法的返回值
语法规则:<% 内容 %>
合法内容:能够写在方法里的Java代码都可以作为小脚本
转译成Servlet规则:原封不动成为Servlet中的Service()方法里的一段代码
语法规则:<%! 内容 %>
合法内容:成员属性以及成员方法的声明
转译成Servlet规则:成为Servlet类中的成员属性或成员方法
语法规则:<%@ 指令名 属性=值%>
常用指令:page,include,taglib指令
作用:控制JSP在转译成Servlet类时生成的内容
用于导包,设置页面属性
语法:<%@ page import=”url”%>
在JSP页面转译成Servlet时,能够将其他文件包含进来,可以包含动态的jsp文件,也可以是静态的HTML文件
语法:<%@ include file =”url”%>
在启动时容器自动创建,在JSP文件中可以直接使用的对象
作用:JSP预先创建的这些对象可以简化为对HTTP对象,响应信息的方法
输入输出对象 | request,response,out |
---|---|
作用域通信对象 | Session,application,pageContext |
Servlet | page,config |
异常对象 | exception |
内置对象 | 类型 | 说明 |
---|---|---|
request | HttpServletRequest | 请求信息 |
response | HttpServletResponse | 响应信息 |
out | JspWriter | 输出数据流 |
Session | HttpSession | 会话 |
pageContext | pageContext | 页面上下文 |
application | Application | 全局上下文 |
config | ServletConfig | Servlet配置对象 |
Exception | Throwable | 捕获网页异常 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NSVrnr39-1613106133533)(C:\Users\Melody\AppData\Roaming\Typora\typora-user-images\image-20210209110444374.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KRyZSvzD-1613106133537)(C:\Users\Melody\AppData\Roaming\Typora\typora-user-images\image-20210209110536171.png)]
一个web组件(Servlet/jsp)将未完成的处理通过容器转交给另一个组件继续完成
常规情况:
一个servlet组件获取数据之后(比如调用dao)将这些数据转发给一个JSP,由这些JSP展现这些数据的页面
绑定数据到request对象
实现绑定:request.setAttribute(String name,Object obj)
读取绑定:Object request.getAttribute(String)
其绑定后结果返回值是object类需要进行强转为所转换的类型
若绑定名不存在,返回为null
获得转发器
RequestDispatcher rd = request .getRequestDispatcher(String uri)
uri:为转发的目的地,将未完成的处理继续下去的另一个组件
转发
rd.forward(request,response)
通常情况下2,3步可以合并
request.getRequestAttribute(String uri).forward(request,respons)
使用转发进行跳转指定页面提示说明
在try-catch块中,当catch块中出现异常时跳转到指定页面,而不会出现报错界面,比如500错误等等
将异常抛给容器
在web.xml中配置错误处理的页面节点
<!-- 配置错误处理页面 -->
<error-page>
<exception-type>javax.servlet.ServletException </exception-type>
<location>/error.jsp</location>
</error-page>
Notice:异常只允许抛出service()方法指定的ServiceExecption和IOExecption异常,不能抛出指定范围以外的异常
对于程序本身的异常最好使用编程式的处理方法,如空指针异常
对于系统级别的异常最好使用容器声明式的方式,如数据库连不上
表单提交:
重定向:response.sendReadirect(url)
转发:reuqest.getRequestDispatcher(url)
从当前文件出发到达目的地文件所经过的路径称为相对路径
书写格式不以“/”开头,返回上一级目录以“…/”开头
以“/”开头的路径是绝对路径,不以当前位置做起始,而是以一个固定的位置作为起始到达目标文件所经过的路径
在使用绝对路径时:链接地址,表单提交,重定向从应用名开始写,转发则是从应用名之后开始写
Web应用程序使用的是HTTP协议,而HTTP协议是“无状态”协议,即服务器一旦响应完客户的请求之后,就断开连接,而同一个客户的下一次请求将重新建立网络连接,服务器应用程序有时是需要判断是否为同一个客户发出的多次请求
将客户端与服务器之间的多次交互(一次请求一次响应)当作一个整体并且将多次交互所涉及的数据即状态保存下来
状态指的是数据
管理指的是多次交互产生的对数据的修改
客户端的状态管理技术:将状态保存在客户端,例如Cookie
服务器的状态管理技术:将状态保存在服务端,例如Session
浏览器向web服务器发送请求时,服务器将少量的数据以set-cookie的形式发送给浏览器,浏览器将这些保存下来
当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送给服务器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rGjXvrwh-1613106133541)(C:\Users\Melody\AppData\Roaming\Typora\typora-user-images\image-20210209113443339.png)]
Servlet API提供了javax.servlet.http.Cookie
Cookie c = new Cookie(String name , String value);
response.addCookie(c);
获取客户端的所有Cookie对象 Cookie[] request.getCookie()
获取一个或多个Cookie对象的名称和值 String cookie.getName(); String cookie.getValue();
默认情况下,浏览器会将cookie保存在内存中,只要浏览器不关闭,cookie就一致存在
若希望关闭浏览器cookie仍存在,则需要设置过期时间
void cookie setMaxAge(int seconds) 单位为秒
seconds>0, cookie保存的指定时间
seconds=0,删除cookie
seconds<0,相当于默认情况
只能保存合法的ASCII字符,如需要保存中文,则需要将其转成ASCII字符,即编码
Cookie c =new Cookie(“city”,URLEncoder.encode(“北京”,“utf-8”))
编码后的Cookie为看到实际中文,需要还原后在现实
URLDecode.decode(value,”utf-8”);
浏览器在访问服务器上的某个地方时,会比较cookie的路径与该路径是否匹配,只有匹配的cookie才能发送给服务器
Cookie的默认路径等于添加这个cookie的web组件路径
–如:/appName/file/addCookie.jsp添加了一个Cookie。此时Cookie的路径等于/appName/file
发送cookie的条件:要访问的地址必须是cookie的路劲或者其子路径,浏览器才会发送cookie
Cookie c = new Cookie(“unane”,jack)
c.sePath(“/appname”)
respnse.addCookie(c)
Cookie可以被用户禁止
Cookie会将状态保存在浏览器端,不安全,对于敏感的数据需要加密之后在使用cookie保存
Cookie只能保存少量数据,大约4kb
Cookie的个数是有限制的
Cookie只能保存字符串
浏览器访问web服务器时,服务器会为每一个浏览器在服务器的内存中分配空间,单独创建一个Session对象,该对象有一个ID属性,其值唯一,一般称之为SessionId,并且服务器将这个SessionId(使用cookie方式)发送给浏览器,浏览器再次访问服务器时,会将SessionID发送给服务器,服务器根据SessionID找到对应的Session对象
HttpSession request.getSession(boolean flag)
HttpSession是一个接口,后面返回的是符合接口规范的对象
当flag=true,先查看请求,若没有SessionID,服务器会创建一个新的Session对象;若有SessionID,依据其SessionId可以找到对应的Session对象,则返回,若根据SessionID找不到Session对象,则立即创建,即flag=true时,一定能得到一个Session对象
当flag=false时,没有SessionID或有SessionID但是找不到Session对象,均返回为null,找到则返回
requset.getSession()
等价于request.getSession(true)
,提供该方法是为了书写方便,无论找到或者没找到,都需要返回一Session对象
绑定: void Session.setAttribute(String name,Object obj)
获取: Object Session.getAttribute(String name)
移出: void Session.removeAttribute(String name)
立即删除: Session :Session.invalidate()
用户访问需要保护的资源时,可以使用Session验证的方式来保证其安全性,比如登陆验证,首先使用Session.setAttribute()绑定数据,然后使用Session.getAttribute()方法来读取绑定值,如没有则返回登陆页面
Web服务器会将空闲时间长的Session对象删除,以便节省服务器内存空间,默认空闲时间为30min
容器声明式配置:在web.xml内进行配置
<session-config>
<session-timeout>30</session-timeout> 分钟
</session-config>
编程式配置:利用代码进行配置
Session.setMaxInactiveInterval(60)秒
答:不能用,但是有其他解决办法,服务器默认情况下会使用cookie的方式将SessionId发送给浏览器,如果禁用 cookie,则Sessionid不会被浏览器保存,此时服务器可以使用URL重写的方式发送Sessionid
浏览器在访问服务器上的某个地址时,不在按原来的那个地址而是使用经过重写的地址(即在原来的地址后加上SessionId)
若是链接地址和表单提交:response.EncodeURL(String uri)
若是重定向:response.encodeReadirectURL(String url)
优点:
缺点: Session将状态保存在服务端,占用服务器的内存,如果用户量过大,严重影响服务器的性能
过滤器是Servlet规范定义中定义的一种小型的可插入的web组件,用来拦截Servlet的请求和响应过程以便查看,提取或以某种方式操作操作正在客户端和服务端之间交互的数据
过滤器通常是封装了一些功能的web组件,这些功能很重要,但是对于客户端请求或发送响应来说不是决定向的
如果有多个过滤器都满足过滤请求,则容器依据
的先后顺序,来调用各个过滤器一次执行
<filter>
<filter-name>MyFilter1</filter-name>
<filter-class>org.oracle.filter.MyFilter1</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter1</filter-name>
<url-pattern>/conment</url-pattern>
</filter-mapping>
实现代码的“可插拔性”,即增加或减少某个功能模块,不会影响程序的正常执行,可以将多个相同处理逻辑的模块集中写在过滤器里面,方便代码维护
Servlet规范中定义的一种特殊组件,用来监听Servlet容器产生的事件并进行相应的处理
容器产生的俩大类事件:生命周期相关事件,绑定数据相关事件
在创建,销毁request,session,ServletContext时产生的事件
ServletRequestListener:
创建:requestInitlized(ServletRequestEvent sre)
销毁:requestDestoryed(ServletRequestEvent sre)
HttpSessionListener
创建:sessionCreated(HttpSessionEvent se)
销毁:sessionDestoryed(HttpSessionEvent se)
ServletContextListener
创建:contextInitlized(servletContextEvent sce)
销毁:contextDestoryed(servletContextEvent sce)
容器调用request,session,ServletContext对象的setAttribute,removeAttribute方法时产生的事件
ServletRequestAttributeListener
AttributeAdded(requestAttribute srae)
编写一个java类,在依据监听事件类型选择实现相应的监听接口,在监听器的接口方法中,实现相应的监听处理逻辑,在web.xml中注册监听器
web.xml中配置
<listener>
<listener-class>org.oracle.listener.CountSessionListener</listener-class>
</listener>
JSP中嵌套大量的JAVA代码增加了页面的复杂度,使页面不够整洁,不方便代码维护,为此Sun公司(Oracle)指定JSP标签(类似HTML标签)代替JAVA代码
Apache组织开发的一套标签被Sun公司整合,称之为标准标签库(JSTL)配合EL表达式,以达到减轻JSP文件的复杂度,方便维护JSP文件的目的
是一套简单的计算规则,用于给JSP标签赋值,也可以直接用来输出,其也可以单独使用
EL表达式的作用:访问Bean的属性;输出简单的运行结果;获取请求参数
方法一:${对象名.属性名}
方法二:${对象名[“属性名”]}
执行过程:容器会依次从pageContext
,request
,Session
,application
中查找绑定名称为“user”对象,找到后调用“getName”方法输出
即${user.name}
等价于pageContext/request/session/application.getAttributr(“user”)
User.getName()
;若上面没有user对象,会报500错误,若找到但未给name赋值,则输出为null
在编写EL表达式时,可以指定查找对于绑定名对象的范围,一旦制定了范围,那么在该范围内没有找到对象时,则不会去其他区域找
即${sessionScope.user.name}
在指定的session中寻找
${param.name}
等价于request.getParameter(“name”)
;
${paramValues.city}
等价于request.getParamenterValues(“city”)
;
EL表达式可以做一些简单计算,可以将结果直接输出
算数运算(“+”只能求和,不能做字符串拼接),逻辑运算,关系运算
JSP的标准标签库,JSP标签是sun公司定义的一套标准,后将Apache整合
将JSTL标签对应的jar文件引入当前环境,使用taglib指令导入要使用的JSP标签
<% taglib uri=”” prefix=”” %>,其中uri:jsp标签的命名空间;prefix:命名空间的前缀
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
①语法:
当test属性值为true时,执行标签体的内容,test属性可以使用EL表达式赋值;var属性:指定一个绑定名称;scope属性:指定绑定的范围(pageContext,request,session,application);var和scope联合进行使用
②语法:
<c:choose>
<c:when test=””></c:when>
...
<c:otherwise></c:otherwise>
</c:choose>
when表示一个处理分支,当test属性为true时,执行该分支,可出现一次或者多次;otherwise:表示列外,可出现0次或一次
③用来遍历集合或数组
语法:
<c:forEach var="emp" items="${list }">
<tr>
<td>${
emp.id }</td>
<td>${
emp.name }</td>
<td>${
emp.age }</td>
</tr>
</c:forEach>
Items:指定要遍历的数组和集合,使用EL表达式赋值
Var:指定一个绑定名称,容器每次从集合中取出一个对象,绑定到pagaContext中
Varstatus:指定一个绑定名称,绑定值为一个容器创建的对象,该对象分装了当前的迭代状态
Index:返回被正在迭代对象的下标,下标从0开始
Count:返回第几次迭代,从1开始
Ajax属于客户端和服务端交互的一种技术,全称为Asynchronous JavaScript and XML(JSON),即异步的javascript和xml
浏览器发送请求 --> Tomcat服务器 --> Tomcat将将响应信息给浏览器 --> 浏览器显示响应结果
浏览器发送请求 --> XMLHttpRequest发送 --> Tomcat服务器 --> Tomcat返回结果 --> XMLHttpRequest接受结果 --> 将结果显示到浏览器页面
①readyState:0,1,2,3,4
0:未初始化 – 尚未调用.open()方法;
1:启动 – 已经调用.open()方法,但尚未调用.send()方法;
2:发送 – 已经调用.send()方法,但尚未接收到响应;
3:接收 – 已经接收到部分响应数据;
4:完成 – 已经接收到全部响应数据,而且已经可以在客户端使用了
创建-初始化请求-发送请求-接收数据-解析数据-完成
②responseText:获取服务器返回的文本信息
③responseXML:获取服务器返回的XML信息
④status:Http的响应状态:200 请求成功 ;202 请求被接受但处理未完成 ;400 错误请求 ;404 请求资源未找到 ;500 内部服务器错误
$ajax({}) --> XMLHttpRequset
$ajax({
Url:请求地址,
Type:请求类型get/post,
Data:提交的数据,
Async:同步或异步处理true/false,
DataType:预期服务器返回的数据类型,
Success:成功回调函数,
Error:失败回调函数,
BeforeSend:请求发送回调函数 });
面对需求考虑思维:触发事件源 → 触发事件时机 → 执行什么操作
返回第几次迭代,从1开始
Ajax属于客户端和服务端交互的一种技术,全称为Asynchronous JavaScript and XML(JSON),即异步的javascript和xml
浏览器发送请求 --> Tomcat服务器 --> Tomcat将将响应信息给浏览器 --> 浏览器显示响应结果
浏览器发送请求 --> XMLHttpRequest发送 --> Tomcat服务器 --> Tomcat返回结果 --> XMLHttpRequest接受结果 --> 将结果显示到浏览器页面
①readyState:0,1,2,3,4
0:未初始化 – 尚未调用.open()方法;
1:启动 – 已经调用.open()方法,但尚未调用.send()方法;
2:发送 – 已经调用.send()方法,但尚未接收到响应;
3:接收 – 已经接收到部分响应数据;
4:完成 – 已经接收到全部响应数据,而且已经可以在客户端使用了
创建-初始化请求-发送请求-接收数据-解析数据-完成
②responseText:获取服务器返回的文本信息
③responseXML:获取服务器返回的XML信息
④status:Http的响应状态:200 请求成功 ;202 请求被接受但处理未完成 ;400 错误请求 ;404 请求资源未找到 ;500 内部服务器错误
$ajax({}) --> XMLHttpRequset
$ajax({
Url:请求地址,
Type:请求类型get/post,
Data:提交的数据,
Async:同步或异步处理true/false,
DataType:预期服务器返回的数据类型,
Success:成功回调函数,
Error:失败回调函数,
BeforeSend:请求发送回调函数 });
面对需求考虑思维:触发事件源 → 触发事件时机 → 执行什么操作