■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓WEB↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
WEB
是什么?
web就是指网页,网站。
为什么要有Web?
有了WEB可以使得电脑资源可以在互联网上共享
[
开发是什么?
WEB开发就是通过网站发布资源提供访问给外界访问的技术
【后台技术(PHP,C#,JAVA.....)】总称就是WEB开发。
项目结构分类;
C/S;
client客户端/server服务器
如;QQ,飞秋等。
特点;服务端更新,客户端也要更新,不便于维护
B/S;
Browser浏览器/server服务器
如;网页QQ,等
特点;便于维护,服务端更新,客户端不必更新,受限于网速
--- 什么是服务器?
服务器就是一台配置很好的电脑,可以同时进行N多个线程操作。
JavaWeb;
是什么?
JavaWeb开发就是使用Java技术开发网站所用到的技术的统称。
有什么用?
可以用于通过网站发布资源提供给外界访问。
JavaWeb和JavaEE的区别?
JavaWed;是通过Java技术开发网站
JavaEE;企业级版本,是用于开发企业应用所需的技术。
而Java是针对B/S结构进行开发的,也是基于浏览器,基于网页(网站)
1、JavaWEB和JavaEE没有区别,
JavaEE是指使用Java技术开发
WEB开发是一个概括所有开发B/S结构语言的。
Java语言的技术分类;
JavaSE;
Standard Edition标准版本,是一个基础
JavaEE;
Enterprise
Edition企业版本,是用于企业级应用开发的。
JavaME;
Micro Edition 微型版本。
总结;
JavaEE是用于企业级开发的,是公司内部管理使用的或者是别的用途。
如;有多个分公司,每个分公司,每天都要提交报表到总公司,
而总公司是要如何接收?
这是一个异地的传输,如果是开发桌面应用不便于维护,
因为桌面应用的更新不能···及时···的让···所有···的分公司都进行一个更新
而开发B/S结构的,无论总公司的应用程序如何的改变都不会影响到分公司的操作。
那么总公司的服务器是要如何将服务器的资源发布给···来访问···的分公司?
通过服务器软件
怎么发布服务器资源?
因为每一台服务器通过网站向外界发布资源是要通过WEB软件的,
而通过WEB软件向外界发布资源的服务器叫做WEB服务器。
什么是WEB服务器?
1.可以安装WEB服务器软件
2.可以运行网站的电脑。
因为服务器就是一台配置较好的电脑。
常用的WEB服务器软件;
Tomcat ----- Apache
WebShpere ----- Microsoft
WebLogin ----- Oracle
--------------------------------------↓↓↓↓↓WEB —— URL↓↓↓↓↓↓↓↓------------------------------------------------
Web-URL;
URL;
为什么要有?
因为IP地址的数量太多,以及不便于人们的记忆。
是什么?
是统一定位资源符。
作用;
可以通过某一个网站定义好的URL地址访问到网站发布的资源
特点;
每一个URL对应这一个IP
是全球唯一的
过程;
1.会先到本地系统自带的hosts文件中查找有没有定义这个URL的键值对
127.0.0.1 www.123456789.com
2.找不到了,在到DNS服务器中发布消息查找。
DNS;
域名解析服务器,是一个专门用于解析访问的域名所对应的IP
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓Tomcat↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Tomcat;
为什么要有?
因为每一台WEB服务器通过网站向外界发布资源是要通过WEB软件的,
是什么?
俗称为,猫。是由Apache开源组织和Sun公司以及其他公司共同开发的技术
作用;
是一个服务器向外界发布资源所使用的一个服务器软件。
特点;
1.性能稳定
2.每一个页面都可能是动态生成的。
3.默认是8080端口
4.实现了Servlet规范,按照这个规范将数据都封装成了对象
◆注;Tomcat是一定实现了Servlet接口规范的
◆◆◆注;要配置环境变量◆◆◆
新建的变量名必须是;JAVA_HOME
指定路径必须是JDK;D:\JDKand JRE\JDK
--------------------------------------↓↓↓↓↓Tomcat目录下文件夹↓↓↓↓↓↓↓↓------------------------------------------------
Tomcat目录下文件夹作用;
1.bin -----> 存放Tomcat运行时文件 (二进制)
startup;启动Tomcat
shutdown;关闭Tomcat
2.conf -----> 存放Tomcat配置文件
web.xml 修改显示页面
server.xml 设置访问地址
3.lib -----> 存放架包
servlet 架包
4.logs -----> 日志信息
如;错误的的信息,便于管理,提升用户体验
5.temp -----> 临时文件
用于存放Tomcat产生的临时文件,可以删除
6.webapps -----> 存放项目资源
而Tomcat运行时,会到这个文件夹下找所需的资源
7.work -----> 工作目录
存放运行WEB相关的文件
--------------------------------------↓↓↓↓↓Tomcat项目结构↓↓↓↓↓↓↓↓------------------------------------------------
Tomcat项目结构;
Tomcat
|--- webapps
|--- 项目资源 —————> 存放用户可见的资源,图片,*.css *.jsp*.html......
|--- WEB-INF
—————> 存放用户不可见的资源,二进制文件,架包,配置文件......
|--- classes
-----> 存放二进制运行文件
|--- lib
-----> 存放架包,如servlet.jar
|--- web.xml
-----> 配置信息,如显示的页面
◆◆◆ 注;因为在Tomcat运行的时候会默认到webapps文件夹下找项目资源.......
|---------> 如果没有指定项目资源路径则会到Root文件夹中找web.xml配置文件指定的项目名
|
|
|
|
|
|
--------|---------------------------↓↓↓↓↓Tomcat项目发布方式↓↓↓↓↓↓↓↓------------------------------------------------
|
|
| Tomcat项目发布方式;
| 1.在webapps下建立一个自定义的文件夹,在文件夹中存放项目资源
| 访问;localhost:8080/自定义文件夹名/资源名
| localhost:8080/bb/1.html
|
|
<--------------- 2.在Root下直接访问
访问;localhost:8080/资源名
localhost:8080/1.html
3.虚拟路径访问1;
访问;localhost:8080/虚拟名/资源名
localhost:8080/gg/1.html
在conf的server.xml的host节点下添加一个子节点
<Context path="/虚拟名" docBase="项目文件夹路径" />
缺点;每次配置都要重启服务器
4.虚拟路径访问2;
访问;localhost:8080/xml文件名/资源名
在conf文件夹下新建 catalina 夹/ localhost夹/ xxx.xml
在xxx.xml文件中写入 <Context docBase="项目资源文件夹路径"/>
注意;写入的空格等·····
5.发布多网站;
访问;www.123456789.com:8080/1.html
1.在conf文件夹下的 server.xml 添加一个host节点,
name 是 自定义域名
appBase 是 资源路径
2.在系统自带的hosts 文件中添加一个访问域名
127.0.0.1www.123456789.com
另;可以通过修改端口号,设置web.xml的起始页达到和平时访问的效果
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓HTTP —— 协议↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
什么是协议?
1.协议就是用于规定通信两端的传输方式以及格式......
2.每一个协议都对应一个端口,
3.端口是用于区分服务的,
······如果没有端口,那么计算机无法识别所要处理的信息是需要如何进行处理
······以及处理的应该是哪一个应用的服务信息,应该传输到哪个应用。
4.每一个应用都有自己处理信息的格式,以及是如何传输的格式。
5.常用的端口;
http --- 80
ftp --- 21
DNS --- 53
。。。。。。
Http协议;
为什么要有?
1.每一个浏览器的内核,以及数据封装的格式都是不一样的
2.如果进行通信会导致服务端无法识别数据等.......
是什么?
HyperText Transfer Protocol 超文本传输协议。
作用;
用于规定(规范)通信两端之间的传输格式。。。。。。
主要用于B/S结构的
版本;
http 1.0 ---> 每次传输的WEB对象都需要重新连接,如图片.....
===== 只要下载完一个就断了连接
http 1.1 ---> 会有一个数秒的短暂连接时间,不必为每一个的对象都进行一个重新连接
===== 下载完了一个还是有一个保持连接时间
如;页面有3张图片
如果3张图片相同则是同一个对象,需要传输2次
如果3张图片不同则不是同一个对象,需要传输4次
连接一次,获取图片次数
HTTP1.1就是一个连接可以传输多个对象。
-------------------------------------↓↓↓↓↓HTTP包的分类↓↓↓↓↓↓↓↓------------------------------------------------
HTTP包的分类;
请求包;客户端向服务器发送请求,如;登录,注册,下载图片......
响应包;服务器根据客户端的请求,发送相应的响应,如;传输图片给用户......
◆◆◆◆◆注;请求包和响应包都是 键-值对的格式
--------------------------------------↓↓↓↓↓HTTP请求包结构↓↓↓↓↓↓↓↓------------------------------------------------
http 请求:
POST /day08/test HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 0
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86Safari/537.36
Content-Type:application/x-www-form-urlencoded
Referer:http://localhost:8080/day08/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie:JSESSIONID=BBA577290FFCF46AF38BF8C83A581FA7
★★★★★请求包;
■■■ 包括;A.B.C
A、|——— 请求头;
|--- 位于;HTTP协议的一行
|--- 包括;1.协议版本 2.提交方式 3.请求提交地址
1--- 协议版本现在都是http-1.1
2--- 提交方式有 Get 和 Post
两种方式
Get -- 是提交的信息现在在地址栏上,并且大小不能大于1KB
Post -- 提交的信息封装在包里提交给服务器的
▲注;···默认···都是Get提交,除非设置,否则···都是···。
3--- 提交地址,就是服务器所对应的项目资源的路径
/day08_myeclipse_servlet_02/Work
B、|——— 请求协议的内容;
|--- 是key-value对的
|--- 常见的key;
1.Host - 主机和 端口号
2.Content-Length- 发送的内容字节长度
pragma no-cache
缓存相关的请求协议头, 表示不缓存
cache-control no-cache
缓存相关的头, 表示不缓存
expires 0
缓存相关的头, 表示缓存时间,
为0表示不缓存!
3.referer -当前请求来源(本地URL) 【防盗链】
防盗链;就是为了限定用户不能从这里进入等.....
4.User-Agent -当前请求的浏览器信息
C、|——— 请求的数据;
|--- Form data;
默认中间是使用 & 分隔的,
而在浏览器中是 ? 分开的之后的数据都是使用&
--------------------------------------↓↓↓↓↓HTTP响应包结构↓↓↓↓↓↓↓↓------------------------------------------------
http-响应;
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location:http://localhost:8080/day08_myeclipse_servlet_02/Work.html
Content-Type: text/html;charset=UTF-8
Content-Length: 0
Date: Sun, 27 Dec 2015 05:37:32 GMT
★★★★★响应包;
A、|——— 响应状态行;
|--- 位于;第一行
|--- 包括; 1.协议版本 2.响应状态码
1.协议版本,现在基本都是http-1.1
2.响应状态码;
1XX 响应正在处理
2XX 响应完成
3XX 响应尚未处理完成,需要进一步处理
4XX 客户端错误
5XX 服务端错误
常用的状态码;
200 响应正常完成
302 配合location一起使用,达到跳转的效果
304 客户端没有更新完成,读取浏览器缓存
404 客户端路径错误
505 服务器内部错误
B、|——— 常用的响应头
|--- 位于;第一行下面
1.Content-Type 服务器响应信息的编码 --- 设置编码
2.Location 响应给客户端地址 --- 配合 302 实现跳转(重定向)
3.Content-Length 服务器响应信息的长度
4.Refresh 刷新 --- 设置定时刷新,定时页面跳转
5.Content-Disposition 下载
6.Content-Encoding 压缩格式 --- 通常是GZIP
7.Date 服务器响应时间
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓ Servlet↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Servlet;
为什么要有?
1.服务器获取到信息要如何进行处理?
2.如何通过Java代码实现,给用户响应?
是什么?
Servlet是由SUN公司推出的一项运行在服务端的技术。
也是一套用于服务器上的框架/技术。
Servlet是一个普通Java类,而且必须与Servlet接口有关系。
作用;
1.实现用户与服务器的动态交互
2.可以用于生成动态页面【开发打开动态网站】
特点;
1.是一个Java-Servle框架的一个顶层接口,
这个框架下的所有类和接口都是继承与Servlet的,类似Object
2.不可以独立运行,···必须···在WEB服务器软件···中运行
3.可移植
4.是一个规范,◆···而Tomcat是·◆·一定·◆·实现了这个规范的
5.是JavaWeb开发和JavaEE开发必备的技术
开发模型;
Servlet是一个基于请求、响应的开发模型。
◆注;必须与Servlet接口有关系,必须交给服务器运行
也是一个适用于Tomcat的一个规范【接口】。
◆注;在Tomcat中有Servlet架包
Servlet域;
ServletContext --- 范围是全局的
ServletSession --- 只在一个会话范围
HttpServletRequest --- 范围只在一个请求中
PageContent --- 当前页面
---------------------------------------↓↓↓↓↓什么是 Servlet规范?↓↓↓↓↓↓↓↓------------------------------------------------------
规范是什么?
规范就是用于规定某一个东西的表现形式等........
Servlet规范;
是什么?
是一套接口,而这套接口是规定了Tomcat服务器,响应和请求的规范。
---------------------------------------↓↓↓↓↓什么是 Servlet域?↓↓↓↓↓↓↓↓------------------------------------------------------
Servlet域;
为什么要有?
有了域那么可以在指定的需求范围之内操作这个范围的数据,
而不会导致其他数据的修改。
是什么?
Servlet域是一个在Tomcat服务器的,
一个指定范围内操作指定的范围的数据,
而操作的数据会作用在这个整个这个指定域。
作用;
提高程序的可维护性,以及可操作性,
因为在修改时,只是需要修改指定的范围数据
特点;
1.操作的数据,只作用这个特定范围。
2.不会影响到其他的数据修改
---------------------------------↓↓↓↓↓Tomcat和Servlet关系↓↓↓↓↓↓↓↓------------------------------------------------
Tomcat和Servlet关系;
Servlet是一套规范,接口
Tomcat是一个Web服务器软件
Tomcat是实现了Servlet规范(接口),
而Tomcat按照Servlet的规范将数据封装成对象。
因为Tomcat按照Servlet的规范将数据封装成对象,
从而使得可以使用Java代码对Tomcat数据进行操作
|----------------> 总结; Tomcat将数据封装成对象,
| 从而可以通过Java代码操作这些对象,
| 因为Tomcat实现了Servlet规范(接口),
| 而在Servlet规范(接口)中定义了,
| 如何通过Java代码对数据进行操作的。
|
|
|
|
--------|-------------------------↓↓↓↓↓Servlet相关的部分接口和类↓↓↓↓↓↓↓↓--------------------------------------------------
|
|
|
|
| Servlet相关的接口;
| |---Servlet =Interface
| 顶层接口;
| ······定义了生命周期。。。。。。
|
| |--- GenericServlet =abstractClass
| 通用的Servlet是实现类,对接口封装
| ·······实现了Servlet、ServletConfig接口
|
| |---HttpServlet =abstractClass
| ·······通常开发时用这个,没有定义抽象方法
| 但是定义成一个抽象类的存在
|
|
| ◆注;Servlet的大部分接口都是单例
|
|
|
|
|
--------|-------------------------↓↓↓↓↓Servlet在Myeclipse中的创建方式↓↓↓↓↓↓↓↓--------------------------------------------------
|
|
|
| Myeclipse创建方式;
| 1.直接创建*.java文件
|
| a.实现HttpServlet/Servlet/GenericServlet接口
| b.配置web.xml文件的配置信息
|
| web.xml配置信息;
| 1.
| |---------> <servlet-name>自定义名(唯一)
| | <servlet-class>项目classes文件路径
| |
| |
| |
| | 2.
| <---------
<serlvet-name>与自定义名一样
| <url-pattern>虚拟路径名称
|
|
|
| 2.直接创建一个Servlet文件,会自动实现接口,和配置web.xml文件配置信息
|
|
|
|
|
|
|
--------|-------------------------↓↓↓↓↓Servlet开发的三种方式↓↓↓↓↓↓↓↓--------------------------------------------------
|
|
|
| Servlet开发;
<--------------- 因为Servlet接口定义了如何通过Java代码对数据进行操作,
而这些就是Servlet中的接口、类、方法、等。。。。。。。
第一种方式;
直接实现顶层接口Servlet
▲.重写这个接口下的所有方法
▲.不便于使用
第二种方式;
实现GenericServlet抽象类,
▲.重写service方法
第三种方式;
实现HttpServlet类,
▲.通过重写doPost和重写doGet方法
-------------------------------------↓↓↓↓↓Servlet获取数据过程↓↓↓↓↓↓↓↓------------------------------------------------
Servlet获取数据过程;
1.Tomcat获取到数据会先封装成对象
2.Servlet会执行service()方法
3.通过service() 方法获取到数据 ------ 开发方式一
|--- 而在GenericServlet实现类中未重写这个方法 ------ 开发方式二
|--- 而在HttpSetvlet中重写了service()方法 ------ 开发方式三
另;通过HttpServletRequest的getMethod()方法可以获取到提交的方式
在HttpServlet类中重写的service()方法中,
就已经进行了判断提交方式是什么,
从而调用相应的提交方式所对应的方法
通过提交方式对应的方法进行操作Tomcat的数据。
|------------------>◆注;开发都是使用HttpServlet类,
| 因为在调用service()方法内部
| 已经获取到了数据的提交方法,
| 并且定义了根据提交方法,
| 调用对应的方法进行操作。
| doGet()、doPost()方法
|
|
|
|
|
|
--------|--------------------------↓↓↓↓↓Servlet生命周期↓↓↓↓↓↓↓↓------------------------------------------------
|
|
| Servlet生命周期;
| 为什么要有?
| 1.如果没有生命周期,那么Tomcat获取数据时,将数据封装成对象
| 通过Servlet进行操作,那么这些数据存放在哪里,
| 而这个对象是在哪里,是什么?
|
| 2.通过Servlet操作Tomcat数据,那么这个过程是要如何执行,如何定义?
|
| 3.关闭服务器时,这些数据是要如何进行处理?
|
|
| 是什么?
| 描述Tomcat将数据封装成对象,通过Servlet进行操作的开始,操作,结束过程。
|
|
| 作用;
| 1.定义数据的开始,初始化
| 2.定义数据的操作、执行过程
| 3.定义服务器关闭时,数据是如何处理
|
|
|
| ◆◆◆注;Servlet生命周期是在超接口Servlet接口下定义的。
|
|
|
|
|
|
--------|------------------------↓↓↓↓↓Servlet生命周期-过程和方法↓↓↓↓↓↓↓↓-----------------------------------------------
|
|
|
| Servlet生命周期过程的方法;
| 1.会创建一个实例,因为Tomcat将数据封装成对象
| |--- 创建了实例一定时实现了构造方法
| |--- 实现了构造方法不一定创建了实例 --- 抽象类
|
|
| 2.调用init()方法,ˉˉˉˉˉˉ 用于初始化对象(数据)
| |--- 初始化就是,需要一开始就加载到内存中,随时可以调用的。
|
<--------------------------3.调用service() 方法,ˉˉˉˉˉˉ 对数据进行处理
|--- 在HttpServlet中定义了doGet()和doPost根据提交方式调用
4.正常关闭服务器会调用destroy()方法,ˉˉˉˉˉˉ 销毁数据
|--- 如果是非正常关闭,如断电,则不会执行destroy()方法
A、init()
public void init(ServletConfigconfig) throws ServletException {
super.init(config);
}
public void init() throws ServletException {
}
说明;
避免了忘记,显示的调用父类的init方法,
因为在父类的init源码中可以看见this.init()
调用当前运行时类的init()方法。
B、service()
public void service(ServletRequestreq, ServletResponse res)
throws ServletException, IOException {
}
说明;
如果重写HttpServlet只是需要调用doGet()或doPost()方法
因为在类的service()方法内部就进行了判断客户端提交方式
再根据判断的结果调用对应的提交方式的方法进行处理
C、destroy()
public void destroy() {
}
说明;
如果是非正常关闭则直接清空内存的缓存信息。
◆◆◆◆◆注;Servlet接口是单例的。
Servlet生命周期的过程;
1.启动服务器
|--- 加载conf中的web.xml和wabapps中的所有web.xml和*.tld文件
2.用户发送信息,则会创建一个实例
3.服务器根据用户请求的资源,到web.xml中匹配对应的路径
|--- 根据web.xml文件的内部名称,找到Servlet对应类全路径
4.匹配成功,找到Servlet对应的类全路径之后,通过反射创建对象
5.调用init()、service()
6.正常关闭服务器,调用destroy()
——————————■■■■■■■■■■■■===↓↓↓↓↓Servlet_init()——ServerConfig↓↓↓↓↓↓↓↓===■■■■■■■■■■■■————————————————
ServletConfig接口;
为什么要有?
如果服务器在启动的时候,
在配置文件中定义了某些信息
那么如何保证在操作数据的时候
★ 如何来保证这些信息的一致性?
以及如何便于他人的需求修改测试.....?
是什么?
ServletConfig,Servlet中的配置文件信息。
作用;
1.用于同步配置文件的信息,
2. 以及便于需求更改,
3. 而不必更改源代码,
4. 因为只是需要更改配置文件信息,
5. 提高程序的可维护性,可操作性......。
因为在Tomcat启动的时候就加载了web.xml配置文件信息
特点;
1.ServletConfig只有Get没有Set,
◆ 因为是为了在操作数据时,
与配置文件的信息是同步的。
2.在配置信息中是键值对的存在
3....单例
4.在配置文件中,是位于某一个Servlet下的,
因为配置信息是作用于某一个Servlet的。
5.是当前项目下的配置信息
6.是一个独立的接口,没有继承别的接口
7.是一个局部变量的存在
★★★★★ 在init() 初始化方法中的形参就是ServletConfig,
因为ServletConfig就是获取初始化配置文件的信息的
-------------------------------↓↓↓↓↓↓↓ServerConfig —— 运行流程↓↓↓↓↓↓↓------------------------------------------------
SevletConfig运行流程;
1.开启服务器
2.加载conf文件夹下的所有配置文件,
以及所有···项目··的web.xml配置文件和*.tld文件。
3.浏览器访问服务器
4.服务器创建一个实例
5.服务器调用init() 方法,
就可以获取到web.xml的配置文件中的定义的配置信息
6.调用service()方法
7.关闭浏览器
8.关闭服务器,调用destroy()方法
----------------------------===↓↓↓↓↓ServerConfig —— Web文件配置格式===---------------------------------
ServletConfig——Web.xml文件配置格式;
因为是作用于某一个Servlet的
......某一个Servlet路径配置信息
<param-name> 键
<param-value> 值
◆注;服务器一开始加载web.xml文件的时,
会将init-param的数据封装成一个对象,
所以一开始就可以进行调用这个文件的数据。
-------------------------------↓↓↓↓↓↓↓ServerConfig获取配置文件信息↓↓↓↓↓↓↓------------------------------------------------
ServletConfig配置文件信息;
通过ServletConfig接口的方法,
可以获取到配置文件的信息,
而获取到配置文件的信息,
之后可以按照配置文件中
的信息进行数据的操作。
方法;
1.String ---this.getInitParameter("name");
根据配置文件初始化配置信息的键获取相应的值
2. Enumration ---this.getInitParameterNames()
获取配置文件的所有初始化信息的键
2.Map --- request.getParameterMap();
获取客户端所有提交信息
因为是name和value的
4.String[] ---request.getParameValues("name");
获取客户端所有提交信息的值
◆◆◆◆◆注;获取的都是····当前····访问的····项目····
····的web.xml文件····中的···配置信息
◆注;服务器一开始加载web.xml文件的时,
会将init-param的数据封装成一个对象,
所以一开始就可以进行调用这个文件的数据。
————————————■■■■■■■■■■■■===↓↓↓↓↓Servlet —— ServerContext↓↓↓↓↓↓↓↓===■■■■■■■■■■■■————————————————
ServletContext;
为什么要有?
如;在Tomcat启动的时候某些设置固定的,
而且是作用于Tomcat服务器所有的项目资源,
★ 那么完全没有必须要为每一个项目资源都要设置。
当是作用于整个Tomcat服务器上的时候可以使用ServletContext
是什么?
ServletContext是Servlet_API下的一个接口,是一个上下文(环境)接口。
表示Servlet运行环境。
作用;
1.用于配置全局变量的,以及被所有的对象共享,
2.可以管理所有的Servlet对象
3.设置的数据是适合较少修改的数据
4.存储数据
特点;
1.是一个单例的
2.是作用在整个Tomcat服务器项目资源的
3.服务器一启动,就会创建ServletContext在内存中
4.被所有对象共享
5.可以管理所有对象
6.是一个域对象
7.是以键值对的形式存储
域范围;
ServletContext这个域是一个范围最大的一个域对象。
这个域的作用是作用在Tomcat所有的项目
---------------------------↓↓↓↓↓↓↓ServerContext —— 运行流程↓↓↓↓↓↓↓------------------------------------------------
ServlerContext运行流程;
1.启动服务器
2.创建SetvletContext对象,一直存在在内存中
----------------------------===↓↓↓↓↓ServerContext —— Web文件配置格式===---------------------------------
ServletContext文件配置格式;
是在web.xml文件中配置的
<param-name> 键
<param-value> 值
★★★★★★注;ServletContext和SevletConfig在Web.xml文件配置的区别
区别;
ServletContext;在<web-app>配置
ServletConfig;在<serlvet>配置
--------------------------------↓↓↓↓↓↓↓ServlerContext获取对象的方式-----------------------------------------------
ServerContext获取对象的方式;
1.this.getServletConfig().getServletContext()
说明;
通过SerlvetConfig对象获取,因为在ServletConfig接口
提供了获取SerlverContext对象的方法。
。。。。。。。。
2.this.getServletContext()
说明;
因为在Tomcat服务器一开启的时候就
创建了SerlvetContext的一个实例,
而当前的类继承了HttpSerlvet
那么通过父类可以获取到
因为Servlet是一个顶层接口
而HttpServlet继承了Serlvet接口
------------------------------------↓↓↓↓↓↓↓ServerContext方法-----------------------------------------------
ServerContext方法;
1.setAttribute("name","value");
--- 设置当前域的属性,注意是键-值对,不可以有多个值
2.getAttribute("name");
--- 获取到当前域 某一个属性的值
3.getAttributeNames();
--- 获取到当前域所有的属性名
^^^^^^^^^^^^^^^^^^^↓↓↓↓↓↓↓ServerContextㄩ●Щ 区别 Щ●ㄩ ServerConfig^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
创建时间;
ServletContext --- 服务器启动就创建
ServletConfig --- 客户端浏览器请求服务器执行到 init 方法才创建
配置文件;
SerlvetContext --- ......
SerlvetConfig --- ......
作用;
ServletContext 范围是···作用···在整个Tomcat服务器的项目资源的
ServletConfig 范围是可以···获取···到web.xml配置文件所有的属性
用途;
SerlvetConfig --- 获取配置信息的,便于维护,和修改……
ServletContext --- 设置全局的信息,则少修改的。如;时间,省份列表,城市列表……
◆◆◆重◆◆◆注;ServletContext是作用在Tomcat所有的项目资源,
◆ 但是对象的范围决定了数据的范围,因为只有访问了的对象才会作用。
因为如果对象是没有访问过的,那么这个是不会作用在这个对象的。
个人理解;这是一个节省资源的办法。
——■■■■■■■■■■■■===↓↓↓↓↓Servlet_service()——HttpServletRequest↓↓↓↓↓↓↓↓===■■■■■■■■■■■■————————————————
HttpServletRequest;
为什么要有?
当Tomcat实现了Servlet规范将数据封装成对象,
那么Servlet规范(接口)中又是如何获取到数据的?
是什么?
HttpServletRequest是一个Servlet_API下的一个接口。
作用;
1.Tomcat按照Servlet规范将请求信息的数据封装成对象
2.通过HttpServletRequest接口的方法可以获取到请求信息的数据
特点;
1.是一个接口,继承了ServletRequest(独立接口)
2......单例
3.也是一个域对象,
范围是在发送请求信息的一个范围,
只有跳转了才可以获取到域信息。
◆◆◆◆◆注;封装的是 ▲请求包▲
-----------------------↓↓↓↓↓↓↓HttpServletRequest封装数据的流程↓↓↓↓↓↓↓------------------------------------------------
HttpServletRequest封装数据的流程;
1.启动服务器
2.加载conf文件夹的所有配置文件,
所有项目的web.xml配置文件和*tld文件
3.浏览器访问服务器,发送一个请求信息,请求当前路径的资源
4.服务器获取浏览器发送的请求信息数据,
5.将请求信息的按照Servlet的规范封装成一个对象
◆而这个对象就是HttpServletRequest
7.关闭浏览器
8.关闭服务器
◆◆◆◆◆注;封装的是▲ 请求包▲
请求包是一个键值对的格式
----------------↓↓↓↓↓↓↓HttpServletRequest常用的获取请求包数据方法↓↓↓↓↓↓↓------------------------------------------------
http 请求:
POST /day08/test HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 0
Cache-Control: max-age=0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86Safari/537.36
Content-Type:application/x-www-form-urlencoded
Referer:http://localhost:8080/day08/index.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie:JSESSIONID=BBA577290FFCF46AF38BF8C83A581FA7
HttpServletRequest常用的方法;
1.StringgetHeader("name")
--- 获取到请求包,包头的某一个指定name的值
2.EnumerationgetHeaderNames()
--- 获取到请求包,包头的所有name
3.EnumerationgetHeaders("name")
--- 获取到请求包,包头的某一个指定name的所有值
4.String getMethod()
--- 获取到请求包的提交方式
5.String
getContextPath() 获取到提交路径的项目路径
7.String
getRequestURL() 获取到用户访问的URL地址
8.setCharacter("字符集") 设置获取到的请求信息的编码集
9.getRequestURI() 获取访问的项目资源路径,URL
◆◆◆◆◆注;可以查看上面的包结构,查看请求包各个属性的作用
request.getRemoteXX() 获取客户端请求的基本信息(IP.....)
—■■■■■■■■■■■■===↓↓↓↓↓Servlet_service()——HttpServletResponse↓↓↓↓↓↓↓↓===■■■■■■■■■■■■————————————————
HttpServletResponse;
为什么要有?
Tomcat服务器获取到了请求的数据,
那么Tomcat服务器怎么根据这个请求数据的信息,做出回应?
是什么?
HttpServletResponse是Servlet_API的一个接口,
继承ServletResponse(独立接口)
作用;
用于根据客户端浏览器的请求信息做出一个响应
特点;
是一个接口继承ServletResonse(独立接口)
一般位于doPost,doGet,形参中
◆◆◆◆◆注;响应包是一个键值对的格式
-----------------------↓↓↓↓↓↓↓HttpServletResponse响应信息的流程↓↓↓↓↓↓↓------------------------------------------------
HttpServletResponse响应信息的流程;
1.启动服务器
2.加载conf文件夹的所有配置文件,以及所有项目的web.xml配置文件
3.客户端浏览器访问服务器
4.服务器获取到客户端的请求信息
5.服务器根据客户端的请求信息,做出相应的响应
6.将响应信息发送给客户端浏览器
7.客户端浏览器关闭
8.服务器关闭
-------------------↓↓↓↓↓↓↓HttpServletResponse常用的设置响应信息↓↓↓↓↓↓↓------------------------------------------------
http-响应;
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Location:http://localhost:8080/day08_myeclipse_servlet_02/Work.html
Content-Type: text/html;charset=UTF-8
Content-Length: 0
Date: Sun, 27 Dec 2015 05:37:32 GMT
HttpServletResponse响应信息;
是根据请求包的内容进行一个响应的。
设置常用响应信息;
1.setHeader("name","value");
--- 设置响应包的属性,和对应的值
2.setContentType("text/html; charset=编码集")
--- 设置响应信息的编码集
3.sendRedirect("path")
--- 设置重定向跳转,标签设置
4.setIntHeader("Refresh",S)
--- 设置页面刷新时间
5.setHeader("Content-Disposition","attachment;fileName="
+
URL.encoder("pathName") + "字符集");
--- 设置文件给用户下载,
URL的方法可以设置中文文件名
乱码问题
a.提供位于服务器的下载路径,避免中文的文件名
response.setHeader("/path/Fname","attachment;fileName="+ URL.encoder("Fname","UTF-8"));
b.获取到输出流
OutpuStream os = response.getOutputStream();
c.获取到当前项目Servlet文件的输入流,
传入要下载的文件位于当前项目路径
InputStream is =this.getServletContext().getResourceAsStream("/Fname");
d.读取文件流,并且写出
.......
e.关闭流
.....
6.setHeader("Content-Encoding","GZIP");
--- 设置压缩文件,而浏览器普遍支持GZIP解码
a.设置压缩格式
response.setHeader("Content-encoding","GZIP");
b.获取到要压缩的数据
.........
c.创建压缩数据存放容器
ByteArrayOutpuStream bos =new ByteArrayOutputStream();
d.获取到压缩数据工具类,将容器传入
GZIPOutputStream gos = newGZIPOutputStream(bos);
e.调用压缩工具类的方法压缩数据
gos.wirte(数据);
f.获取到压缩数据容器的所有字节码
byte [] b =bos.toByteArray();
g.写出.....如果是文件则和下载的方式一样
h.关闭流
◆◆◆◆◆注;查看···上面···包结构获悉每一个属性是什么用的?
——————————————■■■■■■■■■■■■===↓↓↓↓↓Servlet转发和重定向的作用以及区别↓↓↓↓↓↓↓↓===■■■■■■■■■■■■——————————————————
Servlet转发和重定向作用;
都是用于跳转
区别;
重定向;
1.地址栏会发生变化
2.可以转发到别的资源下
3.是浏览器引擎负责转发的,因为是封装在响应包的
a.通过resposne 转发
4.重定向后是不可以访问request对象的,因为请求2次
◆ 5.重定向必须要写项目名
转发;
1.地址栏不会发生变化
2.只能转发到当前的资源下
3.是Tomcat服务器负责转发的,是一个内部跳转
a.通过request转发
b.通过ServletContext转发
4.转发后都是同一个request和response对象
◆ 5.转发是不需要写项目名
------------------------------↓↓↓↓↓↓↓Servlet转发和重定向代码实现↓↓↓↓↓↓↓------------------------------------------------
Servlet转发代码;
1.通过request对象获取
RequestDispatcher rd =request.getRequestDispatcher("path");
1.A.调用forward方法转发
rd.forward(request,response);
2.通过ServletContext获取
RequestDispatcher rd =this.getServletContext().getRequestDispatcher("path");
2.A.调用forward方法转发
rd.forward(request,response);
Servlet重定向代码;
1.resposne.sendRedirect("path");
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓Servlet会话技术↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
会话;
为什么要有?
如果没有会话,那么怎么知道每一次在进行请求的都是这个客户端浏览器?
如果没有会话,怎么保存这个客户端浏览器访问服务器的数据,以及确保是这个用户?
是什么?
会话就是一个进程,而这个进程会一直维护着,直到有一方断开。
作用;
1.识别客户端浏览器
2.保存当前访问客户端浏览器数据
特点;
一个会话中包含有多次请求和响应(只进来就退出,极端的情况不算)
技术分类;
Cookie --- 客户端
HttpSession --- 服务器
————————————■■■■■■■■■■■■■■■===↓↓↓↓↓Servlet会话技术 —— Cookie↓↓↓↓↓↓↓↓===■■■■■■■■■■■■■■■■■■——————————————————
Cookie;
为什么要有?
在Servlet中定义了会话的概念,
那么这概念要实现只用通过会话技术
客户端也是要保存数据的,那么要怎么保存?
是什么?
Cookie是Servlet_API定义的一个会话技术。
Cookie是Servlet_API的一个类,继承Cloneable接口(独立接口)
Cookie是一个位于在客户端浏览器的
作用;
将数据保存的保存到客户端浏览器
特点;
1.基于客户端浏览器的一个数据保存
2.Cookie类的所有方法都不是实现接口的方法,因为实现是一个空接口
3.如果访问时别的项目那么这个Cookie会失效
4.Cookie信息是以键值对的形式存在的
------------------------------------↓↓↓↓↓↓↓Cookie运行过程↓↓↓↓↓↓↓------------------------------------------------
Cookie运行流程;
1.客户端访问服务器
2.服务器执行了reponse.addCookie(cookie)方法
3.服务器会将这个cookie对象的信息添加到响应头set-Cookie发送给客户端浏览器
4.客户端浏览器接收到这个响应包浏览器引擎会解析这个响应包信息,提取出cookie信息
5.当客户端浏览器再次访问服务器的时候会在请求包中添加这个cookie信息到Http协议体中
●.如果服务器没有设置Cookie的有效缓存时间,那么默认是客户端浏览器关闭了就失效。
客户端浏览器存储;
客户端浏览器是将Cookie缓存在进程中 --------- 最大有效时间为0
客户端浏览器是将Cookie存储到缓存的文件中的 -------- 最大有效时间不为0或负数
------------------------------------↓↓↓↓↓↓↓Cookie使用流程以及方法↓↓↓↓↓↓↓------------------------------------------------
Cookie使用流程;
1.创建Cookie对象,设置Cookie信息
Cookie cookie = newCookie("name","value");
◎设置有效时间
cookie.setMaxAge(S);
--- 秒
◎修改值
cookie.setValue("newValue");
◎设置项目路径
cookie.setPath();
◆◆◆注;一个Cookie可以设置多个项目路径,默认是当前项目
2.调用response响应对象,将设置了信息的Cookie对象发送给客户端浏览器
response.addCookie();
◎获取到所有的Cookie
Cookie[] c =request.getCookies();
●通过Cookie的方法获取到name和value
● c.getValue()
● c.getName()
◎获取到访问的当前项目路径
request.getContextPath()
◆注;Cookie一般只有一个,因为客户端浏览器访问的时候只会携带一个Cookie
Cookie如果要设置永久这个就要根据浏览器引擎了,因为每一个浏览器都不一样
有一些是设置负数就是永久。
Cookie限制在4KB