JavaEE
2021-02-23 00:33:18 0 举报
AI智能生成
JavaEE开发的基础知识
作者其他创作
大纲/内容
web开发引入
HTML
超文本标记语言
css
CSS 指层叠样式表 (Cascading Style Sheets) 用于美化页面显示效果
HTTP 超文本传输协议
解决的问题:
为了实训HTML文件的共享的一套规范
内容:HTTP的报文特征分为
请求报文
请求行
请求的协议版本
URL资源位置
请求方法
常用的一般风格方法
GET
明文传输 数据?之后以key=name&的方式追加
提交的数据最多不能超过1024byte
POST
加密传输
数据在form表单中
数据大小理论上没有限制
业内新流行RestfulAPI风格
GET
GET(SELECT):从服务器取出资源(一项或多项)。
POST
POST(CREATE):在服务器新建一个资源。
PUT
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)
PATCH
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE
DELETE(DELETE):从服务器删除资源。
请求头 一般常用的
通用头部:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
请求头部:是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
参数说明
Accept
告诉服务端,客户端接收什么类型的响应,浏览器可支持的MIME类型,它是文件类型的一种描述格式。MIME 格式:大类型/小类型[;参数]例如:
text/html , html 文件text/css, css 文件text/javascript, js 文件
text/html , html 文件text/css, css 文件text/javascript, js 文件
Accept-Charset
浏览器可以接受的字符编码集。
Accept-Encoding
指定浏览器可以支持的web服务器返回内容压缩编码类型。如GZIP 等
Accept-Language
浏览器可接受的语言
Authorization
HTTP授权的授权证书
Cache-Control
指定请求和响应遵循的缓存机制
Connection
表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
Cookie
HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Date
请求发送的日期和时间
Host
指定请求的服务器的域名和端口号
Referer
先前网页的地址,当前请求网页紧随其后,即来路
Content-Length
请求的内容长度
Content-Type
请求的与实体对应的MIME信息
如果是POST请求,会有这个头,默认值为
application/x-www-
formurlencoded,表示请求体内容使用url编码
请求体
对应的需要传输的数据
响应报文
响应行
协议版本 1.0 1.1 ...
状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
1**
信息,服务器收到请求,需要请求者继续执行操作
2**
成功,操作被成功接收并处理
3**
重定向,需要进一步的操作以完成请求
4**
客户端错误,请求包含语法错误或无法完成请求
5**
服务器错误,服务器在处理请求的过程中发生了错误
一般常用的状态码大全合集1.0版本
HTTP状态码表(版本1) 此表含状态码英文名称
状态码 状态码英文名称 中文描述
1开头的状态码
100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2开头的状态码
200 OK 请求成功。一般用于GET与POST请求
201 Created 已创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content 部分内容。服务器成功处理了部分GET请求
3开头的状态码
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy 使用代理。所请求的资源必须通过代理访问
306 Unused 已经被废弃的HTTP状态码
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
4开头的状态码
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
402 Payment Required 保留,将来使用
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed 客户端请求信息的先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息
5开头的状态码
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
响应状态码描述信息
响应头
Accept-Ranges
表明服务器是否支持指定范围请求及哪种类型的分段请求
Allow
对某网络资源的有效的请求行为,不允许则返回405
Cache-Control
告诉所有的缓存机制是否可以缓存及哪种类型
Content-Encoding
web服务器支持的返回内容压缩编码类型。
Content-Language
响应体的语言
Content-Length
响应体的长度
Content-MD5
返回资源的MD5校验值
Content-Type
返回内容的MIME类型
常用的如:Content-Type: text/html; charset=utf-8
Date
原始服务器消息发出的时间
Set-Cookie
设置Http Cookie
Location
用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
Transfer-Encoding
文件传输编码
Last-Modified
请求资源的最后修改时间
Expires
响应过期的日期和时间
响应体
响应的数据
特征:
默认 port 80
应答式
明文传输
无状态
URL URI 统一资源定位系统
web 基于HTML/HTTP /TCP等协议的数据传输系统 基于万维网
服务器知识
Web服务器是向外部发布web资源的软件(非硬件直接接入情况下)她实训了JavaEE企业级开发规范(Tomcat)
服务器的本质
在Java中 socket程序+IO流+基于网络的传输技术+HTTP协议等
常见的服务器
Tomcat
支持短连接
weblogic
WebSphere
JBoos
jettry
支持长连接
Nginx -主流
作用
1:接受请求
对请求数据进行加工
2:响应请求
对返回的数据进行加工
Tomcat
实现了J2EE(Java 2 Platform Enterprise Edition)开发规范的一个程序
接收请求
响应数据
调用application 程序
根据访问URL 查找对应的程序
解析请求参数
调用service方法
将相关数据进行IO和网络传输
加工数据
遵循HTTP协议
servlet
server app服务小程序 相当于非常小的一个服务器
每一个servlet 本质都可以相当于一个小的服务器
作用
获取请求
响应请求
使用方式
1 定义类实现Servlet接口,重写方法注册servlet --比较麻烦不推荐
2 继承HttpServlet 在web.xml中进行声明和注册
3 使用注解:@WebServlet
servlet的生命周期
1.init 方法是初始化servlet的方法,默认第一次访问时初始化,且只会执行一次
2.service 方法是每次访问都会调用,会执行多次
3destory 方法,是当服务器关闭时调用。执行一次,销毁servlet对象时执行
Servlet相关API(重点)
请求 HttPServletRequest
获取参数
在Servlet中,应用服务器将所有的请求信息封装为了HttpServletRequest对象,可以根据HttpServletRequest对象获取请求相关信息.
getParameter(name) : 根据参数名称 获取对应的参数值
getParameterValues(name) : 根据参数名称 获取对应的数组值
getParameterNames() : 获取所有的请求参数的 name 的集合
getParameterMap() : 获取由请求参数和对应的值 组成的map
设置编码
如果要设置字符编码,必须在getParameter之前设置,否则由于只会解析一次,map容器就会存放使用IS0-8859-1转换的编码字符串,即Map中可能就是存放乱码数据。
req.setCharacterEncoding("UTF-8");
获取网络信息
获取 网络请求的请求方法 req.getMethod();//GET POST DELETE PUT 等等
获取请求协议 req.getProtocol();
获取请求的URL req.getRequestURL();// 获取请求的URL
获取请求的端口 req.getLocalPort();
获取请求的资源路径 req.getRequestURI();
请求头信息
HttpServletRequest可以获取请求头信息。获取方式主要分为两类:
根据API提供固有的方法,获取相应的值。
根据API指定请求头key,获取对应的值。
根据API提供固有的方法,获取相应的值。
根据API指定请求头key,获取对应的值。
//内置的方法
String contentType = req.getContentType();
System.out.println("contentType : "+ contentType);
String contentType = req.getContentType();
System.out.println("contentType : "+ contentType);
根据指定的头的key 获取对应的值
//获取所有的请求头name值
Enumeration<String> headerNames = req.getHeaderNames();
Enumeration<String> headerNames = req.getHeaderNames();
相关作用域对象
request HttpServletRquest 一次请求
seesion HttpServletSeesion 一次会话
application servletContext 整个应用程序
在JSP中存在四个作用域对象:pageContext / request /session /application
在Servlet中只有3个作用域对象: request /session /application。PageContext是JSP特有的。
在Servlet中只有3个作用域对象: request /session /application。PageContext是JSP特有的。
servlet怎么被访问到的
Servlet信息会被放在一个map容器中,map容器中存储了2个关键信息:
key是servlet的暴露的地址
value是servlet类的全路径 ---> 根据反射实例化对象 ---> 根据对象调用service
key是servlet的暴露的地址
value是servlet类的全路径 ---> 根据反射实例化对象 ---> 根据对象调用service
内部转发
内部转发是Servlet实现跳转的一种方式,并且会将请求对象传递到下一个地址(即可以跳转JSP、也可以跳转Servlet)
转发 是把req resp 在应用程序的内部转发到下一个 位置 完成处理后会原路返回
特征: 一次请求一次响应
示范:req.getRequestDispatcher("servlet02.do").forward(req,resp);
属性相关操作
setAttribute(name,值) : 向作用域中设置属性值
getAttribute(name) : 从作用域中获取属性值
getAttributeNames() : 获取作用域中所有属性的name的集合
removeAttribute(name) : 从作用域中删除属性值
HttpServletRequest/HttpSession/ServletContext三个对象的属性的API是一样。
响应 HTTPServletResponse
设置响应数据编码
//此时指定的是按照 UTF-8编码 指定将字符转化为字节的编码格式
resp.setCharacterEncoding("UTF-8");
//数据时 html的字符串 按照 UTF-8的编码
resp.setContentType("text/html;charset=UTF-8");
// tomcat 默认编码 ISO-8859-1
//文件是 : UTF-8编码
resp.setContentType("text/html;charset=UTF-8");
// tomcat 默认编码 ISO-8859-1
//文件是 : UTF-8编码
setCharacterEncoding 是设置响应给浏览器的数据的编码格式
setContentType 是设置响应文件类型 MIME的多媒体标记类型 text 是大类型文本类型 html 是text下面的子类型 还可以有json 等.... charset 是响应的文件类型是以什么编码格式去解析
获取响应流信息
在Servlet响应流信息主要分为2类:
字节流 : 多用于文件的下载,处理一些非字符串数据。
字符流 : 多用于处理文本,主要与ajax结合使用
字节流 : 多用于文件的下载,处理一些非字符串数据。
字符流 : 多用于处理文本,主要与ajax结合使用
resp.getOutputStream();// 获取字节网络输出流
resp.getWriter();// 获取字符网络输出流
设置响应头
Servlet支持通过API自定义响应头,一般响应头不涉及中文。
resp.addHeader("zhangsan","I love you");
resp.addHeader("lisi","huanqain");
resp.addHeader("wangwu","yiqikuangqiang");
addHeadder 是增加原本不存在的响应头 还有一个setHeadder 也可以设置响应头 是用来设置存在的响应头 如果add里的key与预留的发生了重合会覆盖原有的内容
重定向
重定向也是Servlet使用页面跳转的一种方式。
重定向的原理,是基于HTTP协议的。重定向会向浏览器返回一个特殊的响应码:302.
响应头里面:Location : 地址。
浏览器解析数据时,解析响应头。在解析响应头时,发现响应码是 302
浏览器会从响应头中获取Location 对应的值
然后,浏览器自主请求这个Location 对应的地址
重定向的原理,是基于HTTP协议的。重定向会向浏览器返回一个特殊的响应码:302.
响应头里面:Location : 地址。
浏览器解析数据时,解析响应头。在解析响应头时,发现响应码是 302
浏览器会从响应头中获取Location 对应的值
然后,浏览器自主请求这个Location 对应的地址
特征: 两次请求 两次响应
jsp
概念
JSP 全名为 Java Server Pages,即 java 服务器页面,是一种动态网页开发技术
为什么使用JSP
1,性能更加优越,因为 JSP 可以直接在 HTML 网页中动态嵌入元素而不需要单独引用 CGI 文件。
服务器调用的是已经编译好的 JSP 文件,而不像 CGI/Perl 那样必须先载入解释器和目标脚本
当然如果你是访问静态的网页 直接使用HTML更快,因为同样的内容 JSP 本质是一个Java servlet 程序处理过后的动态响应
服务器调用的是已经编译好的 JSP 文件,而不像 CGI/Perl 那样必须先载入解释器和目标脚本
当然如果你是访问静态的网页 直接使用HTML更快,因为同样的内容 JSP 本质是一个Java servlet 程序处理过后的动态响应
2,与纯 Servlet 相比:JSP 可以很方便的编写或者修改 HTML 网页而不用去面对大量的 println 语句。
3,与 JavaScript 相比:虽然 JavaScript 可以在客户端动态生成 HTML,但是必须使用 AJAX 与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。
4,与静态 HTML 相比:静态 HTML 不包含动态信息。
JSP 处理过程
1.浏览器访问服务器上的一个 jsp 文件
2.Web 服务器接收到对 JSP 网页的请求后将该请求传递给 JSP 引擎。JSP 引擎从磁盘中载入 JSP 文件,然后将它转化为对应的Java文件(翻译)。这种转化是将所有 html 代码用 println()语句输出,并将所有的 JSP 元素转化成 Java 代码。Jsp 文件转化为 Servlet 的过程又叫翻译。此时xxx.jsp文件就变成了xxx_jsp.java
3.JSP 引擎将 Java文件编译成可执行的字节码文件(.class 文件)
4.Web 服务器调用 servlet 引擎,servlet 引擎载入并执行字节码文件,通过 println()生成 HTML 字符串发给浏览器
5.浏览器去解析 HTML 代码,显示给用户简单描述以上过程:
第一次访问 index.jsp ----> 翻译成 index_jsp.java---->编译运行 index_jsp.class 会被加载到JVM内存中进行调用
PS:被翻译后的 servlet 在 Tomcat 的 work 目录中可以找到
PS:被翻译后的 servlet 在 Tomcat 的 work 目录中可以找到
JSP 指令
JSP 中的三种指令标签:
page指令
Page 指令为容器提供当前页面的使用说明。一个 JSP 页面可以包含多个 page 指令。
相关的属性
buffer
指定 out 对象使用缓冲区的大小
autoFlush
控制 out 对象的缓存区
contentType
指定当前 JSP 页面的 MIME 类型和字符编码
errorPage
指定当 JSP 页面发生异常时需要转向的错误处理页面
isErrorPage
指定当前页面是否可以作为另一个 JSP 页面的错误处理页面
extends
指定 servlet 从哪一个类继承
import
导入要使用的 Java 类
info
定义 JSP 页面的描述信息
isThreadSafe
指定对 JSP 页面的访问是否为线程安全
language
定义 JSP 页面所用的脚本语言,默认是 Java
session
指定 JSP 页面是否使用 session
isELIgnored
指定是否执行 EL 表达式
isScriptingEnabled
确定脚本元素能否被使用
include指令
通过 include 指令来包含其他文件。被包含的文件可以是 JSP 文件、HTML 文件或文本文件。包含的文件就好像是该 JSP 文件的一部分,会被同时编译执行。 注意 这里是文件只要执行就会同时编译包含进来
<%@ include file="文件相对url" %>
taglib指令
Taglib 指令引入一个标签库的定义,包括标签库路径、标签库前缀。
aglib 指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri 属性确定标签库的位置,prefix 属性指定标签库的前缀。如下是导入 JSTL 的标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSP 动作
与 JSP 指令元素不同的是,JSP 动作元素在请求处理阶段起作用。JSP 动作元素是用 XML 语法写成的。
利用 JSP 动作可以动态地插入文件、重用 JavaBean 组件、把用户重定向到其它的页面、为 Java 插件生成 HTML 代码。动作元素只有一种语法,如下:
<jsp:action_name attribute="value" />
<jsp:action_name attribute="value" />
语法 描述
jsp:include 在页面被请求的时候引入一个文件。 这个动作是在请求执行时才引入
jsp:useBean 寻找或者实例化一个 JavaBean。
jsp:setProperty 设置 JavaBean 的属性。
jsp:getProperty 输出某个 JavaBean 的属性。
jsp:forward 把请求转发到一个新的资源。
jsp:plugin 根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记。
jsp:element 定义动态 XML 元素
jsp:attribute 设置动态定义的 XML 元素属性。
jsp:text 在 JSP 页面和文档中使用写入文本的模板
jsp:include 在页面被请求的时候引入一个文件。 这个动作是在请求执行时才引入
jsp:useBean 寻找或者实例化一个 JavaBean。
jsp:setProperty 设置 JavaBean 的属性。
jsp:getProperty 输出某个 JavaBean 的属性。
jsp:forward 把请求转发到一个新的资源。
jsp:plugin 根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记。
jsp:element 定义动态 XML 元素
jsp:attribute 设置动态定义的 XML 元素属性。
jsp:text 在 JSP 页面和文档中使用写入文本的模板
也可以自定义动作,但是现在已经没有必要了
include指令和include动作有什么区别
include指令会将包含的文件翻译到一个文件中,下次不需要再将多个文件翻译到一个文件中,include动作会将包含的文件翻译成多个独立的文件,在使用时进行调用的操作.
相对而言,指令的性能是优于动作的.在维护的性能上,动作的性能更高.
相对而言,指令的性能是优于动作的.在维护的性能上,动作的性能更高.
<jsp:forward>动作
jsp:forward 动作把请求转发到其它的资源。jsp:forward 标记只有一个属性 page。语法格式如下所示:
<jsp:forward page="URL 地址" />
<jsp:forward page="URL 地址" />
page 属性包含的是一个相对 URL。page 的值既可以直接给出,也可以在请求的时候动态计算,可以是一个 JSP 页面或者一个 Java Servlet.
JSP 9大隐式对象(9大内置对象)
JSP 本质上是一个servlet 实际上这九大内置对象就是 在servlet里 注入了这么9个全局范围的内置对象
request
HttpServletRequest 类的实例,是对请求信息进行封装的对象
response
HttpServletResponse 类的实例,是与请求对应的响应对象,
向客户端做出回应对象
向客户端做出回应对象
out
JspWriter 类的实例,用于把结果输出至网页上
session
HttpSession 类的实例,会话对象,表示本次会话.一次连接是会话
application
ServletContext 类的实例,与应用上下文有关.全局容器
config
ServletConfig 类的实例,servlet配置信息
优先级:
pageContext > request > session > application
pageContext
PageContext 类的实例,提供对 JSP 页面所有对象以及命名空间的访问,
当前页面容器,包含其他页面的对象.
当前页面容器,包含其他页面的对象.
page
代表页面本身,类似于 Java 类中的 this 关键字
exception
Throwable 类的对象,代表发生错误的 JSP 页面中对应的异常对象
6.四大作用域
pageContext : 当前页面
request : 一次请求
session : 一次会话
application : 当前应用
作用的范围从小到大:
pageContext < request < session < application
pageContext < request < session < application
重定向与内部转发
7.重定向和内部转发
在JSP技术中,有两种方案实现页面内容的变化.一种内部转发,一种重定向.
内部转发,就是服务器内部将请求和响应移交其他程序处理,重定向就是服务器通知客户端,重新请求一个新的URL地址.重定向和内部转发的区别如下:
重定向 内部转发
浏览器URL地址会发生变化 URL地址不会发生变化
不能通过request对象传递参数 内部转发可以通过request对象传递参数
当网页发生刷新时,只会请求当前URL资源 刷新网页,整个内部转发之间相关代码会重新执行
在实际场景:
能够使用重定向的地方就不要使用内部转发.由于重定向不便于数据的传递,所以如果需要将数据传递到下一个地址,就是内部转发.
重定向:response.sendRedirect("地址");
内部转发:request.getRequestDispatcher("地址").forward(request,response);
在JSP技术中,有两种方案实现页面内容的变化.一种内部转发,一种重定向.
内部转发,就是服务器内部将请求和响应移交其他程序处理,重定向就是服务器通知客户端,重新请求一个新的URL地址.重定向和内部转发的区别如下:
重定向 内部转发
浏览器URL地址会发生变化 URL地址不会发生变化
不能通过request对象传递参数 内部转发可以通过request对象传递参数
当网页发生刷新时,只会请求当前URL资源 刷新网页,整个内部转发之间相关代码会重新执行
在实际场景:
能够使用重定向的地方就不要使用内部转发.由于重定向不便于数据的传递,所以如果需要将数据传递到下一个地址,就是内部转发.
重定向:response.sendRedirect("地址");
内部转发:request.getRequestDispatcher("地址").forward(request,response);
EL表达式
EL表达式只能从四大作用中取值,并且优先级为:pageContext 、 request 、 session 、application。EL表示默认是按照从小作用域到大作用域的范围去值,且一旦查找到了对应的值,则终止取值行为,返回值。如果四个作用域都没有查找到值,则返回空字符串。
EL表达式各种取值
简单数据类型取值
request.setAttribute("name","韩梅梅");//字符串
request.setAttribute("age",18);//整形
request.setAttribute("deleted",false);//boolean
对象属性取值
${key.属性名} 最常用
EL表达式去使用属性名取值的本质是调用 get方法
/*
* 在EL表达式中 使用对象.属性名 能够获取到值 本质上其实不是对象.属性名
* 而是EL 在处理时,根据后面的属性名 找到对应的get方法,会将属性的首字母大写
* 在前面拼接get,组成方法名,从而调用. 由于一般而言,get/set方法是基于属性生成的
* 并且会将属性首字母大写. EL表达式的本质是get方法的去掉get前缀,并且首字母小写.
* */
* 在EL表达式中 使用对象.属性名 能够获取到值 本质上其实不是对象.属性名
* 而是EL 在处理时,根据后面的属性名 找到对应的get方法,会将属性的首字母大写
* 在前面拼接get,组成方法名,从而调用. 由于一般而言,get/set方法是基于属性生成的
* 并且会将属性首字母大写. EL表达式的本质是get方法的去掉get前缀,并且首字母小写.
* */
示范:
Map取值
${key.map中key}
示范
数组取值
${key[index]}
示范
由于el表达式中没有循环,所以单使用el表示从数组中取值一般不使用。
EL表达式运算符
算术运算符 + - * / %
逻辑运算符
EL表达式也支持逻辑运算符
&& and
|| or
! not
&& and
|| or
! not
代码示范
关系运算符
> gt
>= ge
< lt
<= le
== eq
!= ne
>= ge
< lt
<= le
== eq
!= ne
代码示范
三元运算符
表达式?值1:值2
如果表达式最终运算结果为true 则返回值1,否则返回值2
如果表达式最终运算结果为true 则返回值1,否则返回值2
代码示范
empty运算符
empty运算符,表示数据为空。
如果数据是字符串,那么字符串为null 或者空字符串则empty返回true
如果数据是数组,那么数组为null或者空数组empty返回true
如果数据是字符串,那么字符串为null 或者空字符串则empty返回true
如果数据是数组,那么数组为null或者空数组empty返回true
代码示范
EL表达式内置对象
EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
语法:${隐含对象名称}
语法:${隐含对象名称}
序号 隐含对象名称 描 述
1 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象)
2 pageScope 代表page域中用于保存属性的Map对象
3 requestScope 代表request域中用于保存属性的Map对象
4 sessionScope 代表session域中用于保存属性的Map对象
5 applicationScope 代表application域中用于保存属性的Map对象
6 param 表示一个保存了所有请求参数的Map对象
7 paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
8 header 表示一个保存了所有http请求头字段的Map对象
9 headerValues 同上,返回string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
10 cookie 表示一个保存了所有cookie的Map对象
11 initParam 表示一个保存了所有web应用初始化参数的map对象
1 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象)
2 pageScope 代表page域中用于保存属性的Map对象
3 requestScope 代表request域中用于保存属性的Map对象
4 sessionScope 代表session域中用于保存属性的Map对象
5 applicationScope 代表application域中用于保存属性的Map对象
6 param 表示一个保存了所有请求参数的Map对象
7 paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
8 header 表示一个保存了所有http请求头字段的Map对象
9 headerValues 同上,返回string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
10 cookie 表示一个保存了所有cookie的Map对象
11 initParam 表示一个保存了所有web应用初始化参数的map对象
扩展提示
1.EL表达式默认是从小作用域到大作用域获取值。如果作用域值的key就是同名,默认只能取到小作用域中值,此时可以使用el表达式,获取作用域对应的隐藏对象,然后根据key获取值。 可以指定作用域来取值
代码示范
JSTL
介绍
JSTL的使用
1导入相关jar包
jstl-1.2.jar
standard-1.1.2.jar
jstl-1.2.jar
standard-1.1.2.jar
2在页面引入标签库
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
JSTL常用标签
if条件分支标签
语法:
<c:if test="表达式">
内容
</c:if>
如果表达式为true,则执行内容部分,否则不执行
代码示范
choose...when...多条件分支标签
语法:
<c:choose>
<c:when test="表达式1">内容1</c:when>
<c:when test="表达式n">内容n</c:when>
<c:otherwise>内容n+1</c:otherwise>
</c:choose>
自上而下执行表达式,如果表达式为true 则执行相应的内容,且终止判断
如果所有when表达式都为false,则执行otherwise后面的内容
<c:choose>
<c:when test="表达式1">内容1</c:when>
<c:when test="表达式n">内容n</c:when>
<c:otherwise>内容n+1</c:otherwise>
</c:choose>
自上而下执行表达式,如果表达式为true 则执行相应的内容,且终止判断
如果所有when表达式都为false,则执行otherwise后面的内容
代码示范
forEach循环标签
forEach标签属性:
items : 待遍历数据容器
var : 数据容器中每次循环时元素的别名
varStatus :每次遍历的状态信息别名
index : 遍历下标索引
first : 是否第一个元素
last : 是否是最后一个元素
count : 第几次循环
begin : 开始循环的索引
end : 终止循环的索引
step : 步长 每次循环索引增长的基数 默认是1
items : 待遍历数据容器
var : 数据容器中每次循环时元素的别名
varStatus :每次遍历的状态信息别名
index : 遍历下标索引
first : 是否第一个元素
last : 是否是最后一个元素
count : 第几次循环
begin : 开始循环的索引
end : 终止循环的索引
step : 步长 每次循环索引增长的基数 默认是1
代码示范
格式化标签
格式化标签,是将数据按照要求进行一个格式化显示。
常见格式化,有时间格式化和数组格式化
常见格式化,有时间格式化和数组格式化
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
时间格式化 <fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss" var="nowDate" ></fmt:formatDate>
数字格式化 <fmt:formatNumber value="${money}" type="CURRENCY" pattern="£:###,###,###.00"></fmt:formatNumber>
会话技术
Javaweb的会话技术是为了弥补HTTP通信协议的不足。
1.明文传输
2.应答式协议 只有有了请求,服务器才能做出响应
3.无状态 服务器不会记录客户端信息 如果客户端重复请求,服务器是不知道的。
解决无状态的生活案列对比解释
由于HTTP协议是无状态的协议,不记录客户端信息的协议,如果客户端的请求希望使用历史数据,无法获取之前的访问信息数据。基于这样的情况,JavaWeb这块,提供了2种解决方案,这两种解决方案就是JavaWeb的会话技术。
生活中例子:
逛超市
1.将物品寄存,号码牌,根据号码牌换物品 ---- seesion
2.自己把自己物品背着 ------ cookie
JavaWeb的解决方案与生活场景解决方案是类似的。
生活中例子:
逛超市
1.将物品寄存,号码牌,根据号码牌换物品 ---- seesion
2.自己把自己物品背着 ------ cookie
JavaWeb的解决方案与生活场景解决方案是类似的。
解决方案
方案一
程序将数据存储在服务器中,并且存储数据的格式key-value(key是服务器生成一个唯一标识),服务器会将这个key给客户端,每次客户端再次访问服务器会将key带给服务器,然后如果想要获取存储数据就是用这个key去服务器存储区域获取。这种方案的技术叫session.服务器给客户的key是session的ID。
方案二
服务器将数据存储在客户端,客户端每次请求时默认将这个数据带给服务器。若需要使用,则在指定客户端存储数据的区域获取数据,从而进行使用。这个技术叫做cookie.
方案一是基于方案二。session基于cookie技术
Cookie
Cookie客户端缓存技术,就是服务器将一些文本数据(4kb),通过HTTP协议返回响应头,浏览器解析响应头,set-cookie这样的头时,set-cookie这样的值存储在浏览器。
然后浏览器会将Cookie信息,存在内存中或者存储在浏览器本地(文件中)。如果cookie信息过大,则浏览器无法不保证准确处理请求头信息。浏览器早期一般一个域名最多20个cookie。现在随着硬件的发展,浏览器允许一个域名的cookie数量已经超过20个。不同的浏览器,允许的cookie数量也不相同。
Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
注:每个域名cookie限制为20个将不再正确!
然后浏览器会将Cookie信息,存在内存中或者存储在浏览器本地(文件中)。如果cookie信息过大,则浏览器无法不保证准确处理请求头信息。浏览器早期一般一个域名最多20个cookie。现在随着硬件的发展,浏览器允许一个域名的cookie数量已经超过20个。不同的浏览器,允许的cookie数量也不相同。
Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。
Firefox每个域名cookie限制为50个。
Opera每个域名cookie限制为30个。
Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。
注:每个域名cookie限制为20个将不再正确!
客户端缓存技术
不安全 可以被一些手段读取
浏览器关闭cookie消失 在不设置cookie过期时间的前提下,默认是浏览器关闭 cookie消失
但是很多公司的恶心之处就在于此基本上把cookie设置到了几十年后过期 如抖音....
在现在,cookie的使用逐渐减少,cookie的数据是存在终端中,但是当前应用程序的终端比较多.如果数据只是存在终端中,无法实现数据的多终端共享效果.
seesion
seesion 是基于cookie的技术
seesion的应用场景
1.将登录的用户信息存储在session,这样在任何jsp页面或者servlet中都能获取到当前session,从而从session获取当前的用户信息
2.将登录时验证码存放在session中,将用户输入的验证码和session中存储的验证码进行对比。
seesion的不足
如果存在多个服务器,服务器内存数据没办法共享,session没法共享,session一般是在单点应用中
session的原理是将数据存储在服务器中,客户端根据JESSIONID从服务器中查找到对应这个session.这种模式,在单体应用上是适用的,但是不适用多体的应用架构.因为Session在服务器的内存中在,如果存在多个服务器,服务器内存数据没法共享.session没法共享.session一般是在单节点应用.
Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。
seesion是基于cookie的一种在服务器应用的技术,本质上是利用cookie使用算法生成了一个seesionid 在反射回cookie中,并且默认设置了cookie的过期时间为30分(浏览器端)钟,同时服务器端 session也默认设置了30分钟的过期时间
服务器端Java -相关API
cookie
Cookie cookie = new Cookie(name,value) ; 创建Cookie
resp.addCookie(cookie) ; //将Cookie放在响应头
getName( ) : 获取cookie的name值
getValue( ) : 获取cookie的value
setDomain( 域名 ) : 设置cookie生效的域名 分布式涉及
setPath( 路径 ) : 设置cookie生效的路径 分布式涉及 默认是对当前项目生效
setHttpOnly(boolean) : 设置cookie能否被JS访问
setMaxAge(times) : 设置cookie的有效时间 单位 秒 若是0 则是删除cookie 如果设置有效期,浏览器将会将cookie进行持久化
req.getCookies( ); 获取请求中所有的cookie
代码示范
seesion
getId( ) : 获取session的id
setMaxInactiveInterval(time) : 设置session存活时间 默认是30分钟,单位秒 如果设置为0或者负数 ,session不会失效
getMaxInactiveInterval( ) : 获取session的存活时间
invalidate( ) : 解除session的绑定 使session失效
setAttribute(name,obje) : 设置session中的属性值
getAttribute(name) : 从session作用域获取值
getAttributeNames( ) : 获取session作用域中所有属性的name值的集合
removeAttribute( name) : 从session作用域中移除属性值
getServletContext( ) : 获取当前ServletContext对象
代码示范
过滤器
1.1什么是过滤器
它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
场景:Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
1.2过滤器如何实现功能
1在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。
2在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
3 Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,Web服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,doFilter方法中有一个filterChain对象,用于继续传递给下一个filter,在传递之前我们可以定义过滤请求的功能,在传递之后,我们可以定义过滤响应的功能
1.3过滤器如何使用
使用web.xml方式配置Filter
1开发后台资源 静态资源(html,css … …)或者动态资源(Servlet,Jsp)
示范
2开发Filter
示范
3在web.xml中配置Filter拦截哪些资源
示范
总结:
1在doFilter方法中,我们可以通过filterChain.doFilter方法控制请求是否继续向后传递
2在doFilter方法中,我们同样可以使用HttpServletRequest处理请求,使用HttpServletResponse对象作出响应
1在doFilter方法中,我们可以通过filterChain.doFilter方法控制请求是否继续向后传递
2在doFilter方法中,我们同样可以使用HttpServletRequest处理请求,使用HttpServletResponse对象作出响应
filterChain.doFilter -- 过滤链 -- 进入下一个过滤器
使用注解实现Filter
1.自定义类实现Filter接口
2.重写相关方法
3.在类上使用@WebFilter注解
代码示范
过滤器的生命周期
初始化方法:
init(FilterConfig filterConfig); Filter的创建和销毁由WEB服务器负责
拦截请求方法
doFilter 这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
销毁方法:
destroy();
Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
Filter配置参数
来设置编码格式的过滤设置
代码示范
1.7过滤器链的使用
web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。
使用过滤器链的好处是我们可以将不同的过滤功能分散到多个过滤器中,分工明确,避免一个过滤器做太多的业务处理,降低了代码的耦合度,这体现了单一职责的设计原则,应用了责任链的代码设计模式.(设计模式之禅)
使用过滤器链的好处是我们可以将不同的过滤功能分散到多个过滤器中,分工明确,避免一个过滤器做太多的业务处理,降低了代码的耦合度,这体现了单一职责的设计原则,应用了责任链的代码设计模式.(设计模式之禅)
决定过滤器的执行顺序是由filter-mapping标签决定
如果使用注解实现Filter,调用顺序是由类名决定的.因为类名决定在磁盘上的排列顺序 而且是根据类名的排序规则来的比如大写A字母的类名就会先执行Filter
如果使用注解实现Filter,调用顺序是由类名决定的.因为类名决定在磁盘上的排列顺序 而且是根据类名的排序规则来的比如大写A字母的类名就会先执行Filter
监听器
什么是监听器?
在JavaWeb中,监视servlet的三个作用域的程序,就是Javaweb中的监听器.在Javaweb中的servlet作用域对象:ServletContext/HttpSession/HttpServletRequest三个对象.而这三个对象的监视:三个对象的生命周期和属性的变化.
就是对 servlet 中 request seesion servletContext 的监听
当然监听器也是一种设计模式的具体实现,也可以实现对其他"事务"的监听,可以自行实现
@WebListener 可以使用注解@WebListener代替xml的配置
监听器的分类
生命周期监听
ServletRequestListener :监听每个HttpServletRequest对象的
HttpSessionListener : 监听HttpSession的生命周期
ServletContextListener : 监听ServletContext的生命周期
属性变化监听
ServletRequestAttributeListener : 监听HttpServletRequest的属性变化
HttpSessionAttributeListener : 监听HttpSession的属性变化
ServletContextAttributeListener : 监听ServletContext属性变化
认识监听器
认识Requet域监听器
Requet域共有两个监听器接口,分别是
ServletRequestListener : 生命周期监听
ServleRequestAttributeListener : 属性监听
ServletRequestListener : 生命周期监听
ServleRequestAttributeListener : 属性监听
代码示范
认识Session域监听器
Session域共有四个监听器接口,分别是
HttpSessionListener
HttpSessionAttributeListener
HttpSessionBindingListener
HttpSessionActivationListener
HttpSessionListener
HttpSessionAttributeListener
HttpSessionBindingListener
HttpSessionActivationListener
代码示范
认识ServletContext域监听器
ServletContext域共有两个监听器接口,分别是
ServletContextListener
ServletContextAttributeListener
ServletContextListener
ServletContextAttributeListener
代码示范
示范作业
Ajax
背景
前端浏览器和后端服务器可以同时进行,可以充分利用用户操作的时间间隔来完成耗时的运算
页面没有跳转,响应的数据会直接就在原网页上,页面原有的信息得以保留
可能会破坏浏览器的后退行为
降低了浏览器和服务器的操作负荷
什么是同步操作
首先用户向HTTP服务器提交一个处理请求。接着服务器端接收到请求后,按照预先编写好的程序中的业务逻辑进行处理,比如和数据库服务器进行数据信息交换。最后,服务器对请求进行响应,将结果返回给客户端,返回一个HTML在浏览器中显示,通常会有CSS样式丰富页面的显示效果。
优点
可以保留浏览器后退按钮的正常功能。在动态更新页面的情况下,用户可以回到前一个页面状态,浏览器能记下历史记录中的静态页面,用户通常都希望单击后退按钮时,就能够取消他们的前一次操作,同步交互可以实现这个需求.
缺点
1同步交互的不足之处,会给用户一种不连贯的体验,当服务器处理请求时,用户只能等待状态,页面中的显示内容只能是空白。
2因为已经跳转到新的页面,原本在页面上的信息无法保存,好多信息需要重新填写
3 这种交互的方式对于服务器和浏览器而言都存在压力.存在性能的损耗
优点
可以保留浏览器后退按钮的正常功能。在动态更新页面的情况下,用户可以回到前一个页面状态,浏览器能记下历史记录中的静态页面,用户通常都希望单击后退按钮时,就能够取消他们的前一次操作,同步交互可以实现这个需求.
缺点
1同步交互的不足之处,会给用户一种不连贯的体验,当服务器处理请求时,用户只能等待状态,页面中的显示内容只能是空白。
2因为已经跳转到新的页面,原本在页面上的信息无法保存,好多信息需要重新填写
3 这种交互的方式对于服务器和浏览器而言都存在压力.存在性能的损耗
什么是异步操作
指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。异步不用等所有操作等做完,就响应用户请求。即先响应用户请求,然后慢慢去写数据库,用户体验较好
优点
1前端用户操作和后台服务器运算可以同时进行,可以充分利用用户操作的间隔时间完成运算
2页面没有跳转,响应回来的数据直接就在原页面上,页面原有信息得以保留
缺点
可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记录的始终是当前一个的静态页面。用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在AJAX这样异步的程序,却无法这样做。
而且这种行为,降低了服务器和客户端的负荷.
优点
1前端用户操作和后台服务器运算可以同时进行,可以充分利用用户操作的间隔时间完成运算
2页面没有跳转,响应回来的数据直接就在原页面上,页面原有信息得以保留
缺点
可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记录的始终是当前一个的静态页面。用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在AJAX这样异步的程序,却无法这样做。
而且这种行为,降低了服务器和客户端的负荷.
AJAX介绍
“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新,局部更新。
Ajax 是一种综合技术
使用CSS构建用户界面样式,负责页面排版和美工
使用DOM进行动态显示和交互,对页面进行局部修改
使用XMLHttpRequest异步获取数据
使用JavaScript将所有的元素绑定在一起
使用DOM进行动态显示和交互,对页面进行局部修改
使用XMLHttpRequest异步获取数据
使用JavaScript将所有的元素绑定在一起
Ajax本质是利用js 来调用浏览器提供的通信技术与多线程技术来实现异步操作一种复合技术
AJAX的最大的特点: 异步访问,局部刷新
Ajax 是利用浏览器提供的一套API 来进行多线程通信模拟实现异步操作的(本质上技术在几次握手期间提前先响应成功的状态,而后在响应最后的结果)
实现方案
原生Ajax
进行异步数据交互,进行少量的数据交互.减少服务器和浏览器的压力.就需要跟服务器进行通信.JS作为一个脚本语言,是无法调用硬件(网卡).在早期时,浏览器的厂商就对JS暴露一套API.这套API就可以让JS与服务器进行通信
XMLHttpRequest对象,就是各个服务器厂商对外暴露的进行网络请求的对象.但是在早期,不同的浏览器厂商,提供的获取该对象的API不一样.目前主流的浏览器:
new XMLHttpRequest();
new XMLHttpRequest();
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:
兼容其他老ie的Ajax对象
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
步骤
1 创建通信对象
2 监听通信状态
3 创建请求
4 发送请求
XMLHttpRequest
核心方法
new XMLHttpRequest() 创建新的 XMLHttpRequest 对象
abort() 取消当前请求
getAllResponseHeaders() 返回头部信息
getResponseHeader() 返回特定的头部信息
open(method,url,async)
规定请求的类型、URL 以及是否异步处理请求。
method:请求的类型;GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)
send(string)
将请求发送到服务器。
string:仅用于 POST 请求
核心属性
onreadystatechange 定义当 readyState 属性发生变化时被调用的函数(事件属性)
readyState
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
0: 请求未初始化
1: 服务器连接已建立
2: 请求已接收
3: 请求处理中
4: 请求已完成,且响应已就绪
status
返回请求的状态号
?200: "OK"
?403: "Forbidden"
?404: "Not Found"
如需完整列表请访问?Http 消息参考手册
statusText
返回状态文本(比如 "OK" 或 "Not Found")
responseText 以字符串返回响应数据
responseXML 以 XML 数据返回响应数据
当 readyState 等于 4 且status状态为 200 时,表示响应已就绪:
2.3.4Ajax的本质
ajax的本质是进行数据的交互.基于浏览器进行通信的请求,请求后返回的数据给程序自身,浏览器是不会解析和渲染这个数据的.需要程序自身处理数据.
原生Ajax技术存在以下问题:
1.浏览器的兼容性问题.特别是IE浏览器.
2.整个API相对操作繁琐.主要以下步骤:
1.创建请求对象
2.建立连接
3.监听状态
4.发送请求
5.处理请求的响应
jQuery中Ajax的实现
介绍 :
在jquery中,jquery主要提供了三个方法进行ajax的请求:
ajax(option) : ajax方式是jquery 对原生的ajax进行了一个封装,简化了ajax开发,同时也是其他ajax请求方法的基本的方法
get(url,data,callbackfunction) : 这个方法基于ajax方法的,但是只支持get请求
post(url,data,callbackfunction) : 这个方法也是基于ajax方法的,但是支持post请求.
在jquery中,jquery主要提供了三个方法进行ajax的请求:
ajax(option) : ajax方式是jquery 对原生的ajax进行了一个封装,简化了ajax开发,同时也是其他ajax请求方法的基本的方法
get(url,data,callbackfunction) : 这个方法基于ajax方法的,但是只支持get请求
post(url,data,callbackfunction) : 这个方法也是基于ajax方法的,但是支持post请求.
$.ajax(option)属性详解
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。
timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。
async : 是否异步
要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。
要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。
什么时候使用 async false 当 清理的数据需要参与到当前ajax之外的运算时使用同步
data
要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看 processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。
dataType
期望服务器返回的数据的格式,实际格式以服务器返回的数据格式为准.不同浏览器对该属性处理方式是不一样的.如:chrom会按照该类进行校验.如果不一致,没反应.Firefox浏览器,则会抛出转化失败的异常.
要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下:
xml:返回XML文档,可用JQuery处理。
html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。
json:返回JSON数据。
jsonp:JSONP格式。使用JSONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
text:返回纯文本字符串。
xml:返回XML文档,可用JQuery处理。
html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。
json:返回JSON数据。
jsonp:JSONP格式。使用JSONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
text:返回纯文本字符串。
contentType
要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。
beforeSend
要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。
success
要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。
(1)由服务器返回,并根据dataType参数进行处理后的数据。
(2)描述状态的字符串。
(1)由服务器返回,并根据dataType参数进行处理后的数据。
(2)描述状态的字符串。
error
要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。
complete
要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。
success与error都是一种完成 不管成功还是失败都会调用该方法 且在最后调用
$.load()
jQuery load() 方法是简单但强大的 AJAX 方法,load() 方法从服务器加载数据,并把返回的数据放入被选元素中。默认使用 GET 方式 - 传递附加参数时自动转换为 POST 方式,
$(selector).load(URL,data,callback);
url: URL地址
data:待发送参数。
callback:载入成功时回调函数。
data:待发送参数。
callback:载入成功时回调函数。
$.get()
get 与 post getjson 都是基于ajax定制化的请求 固定了一些参数 只能是异步请求无法设置同步 如果要定制化的话必须使用$.ajax
$.get(url,[data],[callback],[type])
url: URL地址
data:待发送参数。
callback:载入成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default
$.post()
$.post(url,[data],[callback],[type])
url: URL地址
data:待发送参数。
callback:载入成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default
data:待发送参数。
callback:载入成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default
$.getJSON()
$.getJSON(
url, //请求URL
[data], //传参,可选参数
[callback] //回调函数,可选参数
);
url, //请求URL
[data], //传参,可选参数
[callback] //回调函数,可选参数
);
.AJAX数据格式处理
支持XML
JSON 现在的主流
{ } 对象 [] 数组
什么是跨域
由于ajax进行网络通信,js基于浏览器进行网络通信.浏览器出于安全的考虑,浏览器存在一个同源策略。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
本地路径地址:http://127.0.0.1:8080/sxt/index.jsp
https://127.0.0.1:8080/sxt/index.jsp 协议不一样
http://192.168.24.11:8080/sxt/index.jsp IP不一致
http://127.0.0.1:8888/sxt/index.jsp 端口不一致
http://localhost:8080/sxt/index.jsp IP不一致
https://127.0.0.1:8080/sxt/index.jsp 协议不一样
http://192.168.24.11:8080/sxt/index.jsp IP不一致
http://127.0.0.1:8888/sxt/index.jsp 端口不一致
http://localhost:8080/sxt/index.jsp IP不一致
谷歌浏览器针对同源请求会拦截,火狐不会
同源
相同的协议 protocol
相同的主机 host |域名
相同的端口 port
EL表达式虽然能够相对方便的获取到作用域的值,但是EL表达式没有循环,导致获取数组数据可用性不高,并且EL表达式没有条件分支控制,导致多条件的场景,EL表达式适用性不高。
这些不足,JavaWeb提供了标签弥补-JSTL(Java server pages standarded tag library),由于JSTL最长用到的标签库,前缀一般使用c表示,所以也被称之为c标签。
这些不足,JavaWeb提供了标签弥补-JSTL(Java server pages standarded tag library),由于JSTL最长用到的标签库,前缀一般使用c表示,所以也被称之为c标签。
三者相同时就证明是同源的URL
0 条评论
下一页
为你推荐
查看更多