Tomcat_Servlet_Jsp基本详解(一)

 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容