Servlet(Servlet Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在与交互地浏览和生成数据,生成动态Web内容。其最大的作用就是能够处理浏览器带来HTTP请求,并返回一个响应给浏览器,从而实现浏览器和服务器的交互。

实现过程:

  1. 客户端发送请求至服务器端;
  2. 服务器将请求发送至Servlet;
  3. Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求。
  4. 服务器将响应返回给客户端。

HTTP协议

        HTTP(HyperText Transfer protocol),超文本传输协议是互联网应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。它是TCP/IP协议的一个应用层协议。简单来说,HTTP协议就是客户端和服务器交互的一种通讯的格式。

HTTP1.0协议中,客户端与web端服务器建立连接后,只能获得一个web资源(短连接,获取资源后就断开连接了)。

HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源(保持连接)。

HTTP请求

浏览器向服务器请求某个web资源时,称之为浏览器向服务器发送了一个http请求。

一个完整http请求应该包含三个部分:

  1. 请求行(描述客户端的请求方式、请求的资源名称,以及使用的HTTP协议版本号)。
  2. 多个消息头(描述客户端请求哪个主机,以及客户端的一些环境消息等)。
  3. 一个空行。

请求行

请求行:GET   /java.html HTTP/1.1

请求行中GET称之为请求方式,请求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT。

常用的有:GET,POST

一般来说,点击超链接,通过地址栏访问都是get方式。通过提交的数据一般是post方式。

可以简单理解get方式用来查询数据,post方式用来提交数据,get的提交速度比post快。

get方式:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1k。

post方式:可以在请求的实体内容中向服务器发送数据,传送的数据无限制。

请求头:

  • Accept: text/html,image/* 【浏览器告诉服务器,它支持的数据类型】
  • Accept-Charset: ISO-8859-1 【浏览器告诉服务器,它支持哪种字符集
  • Accept-Encoding: gzip,compress 【浏览器告诉服务器,它支持的压缩格式
  • Accept-Language: en-us,zh-cn 【浏览器告诉服务器,它的语言环境】
  • Host: www.it315.org:80【浏览器告诉服务器,它的想访问哪台主机】
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,缓存数据的时间】
  • Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,客户机是从那个页面来的---反盗链
  • 8.User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,浏览器的内核是什么】
  • Cookie【浏览器告诉服务器,带来的Cookie是什么
  • Connection: close/Keep-Alive 【浏览器告诉服务器,请求完后是断开链接还是保持链接】
  • Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,请求的时间】

HTTP响应

一个HTTP响应代表着服务器向浏览器回送数据。

一个完整的HTTP响应应该包含四个部分:

  1. 一个状态行(用于描述服务器对请求的处理结果)。
  2. 多个消息头(用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通过客户端如何处理回送的数据)。
  3. 一个空行。
  4. 实体内容(服务器向客户端回送的数据)

状态行

格式:HTTP版本号 状态码 原因叙述

状态行:HTTP/1.1  200  OK

状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类。

响应头

  • Location: http://www.it315.org/index.jsp 【服务器告诉浏览器要跳转到哪个页面
  • Server:apache tomcat【服务器告诉浏览器,服务器的型号是什么】
  • Content-Encoding: gzip 【服务器告诉浏览器数据压缩的格式
  • Content-Length: 80 【服务器告诉浏览器回送数据的长度】
  • Content-Language: zh-cn 【服务器告诉浏览器,服务器的语言环境】
  • Content-Type: text/html; charset=GB2312 【服务器告诉浏览器,回送数据的类型
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器该资源上次更新时间】
  • Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要定时刷新
  • Content-Disposition: attachment; filename=aaa.zip【服务器告诉浏览器以下载方式打开数据
  • Transfer-Encoding: chunked 【服务器告诉浏览器数据以分块方式回送】
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服务器告诉浏览器要保存Cookie
  • Expires: -1【服务器告诉浏览器不要设置缓存
  • Cache-Control: no-cache 【服务器告诉浏览器不要设置缓存
  • Pragma: no-cache 【服务器告诉浏览器不要设置缓存
  • Connection: close/Keep-Alive 【服务器告诉浏览器连接方式】
  • Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器回送数据的时间】

实现Servlet接口编写Servlet程序

1)自定义一个类,实现Servlet接口

有5个方法需要重写,有init()初始化方法,destroy()销毁方法,service()服务方法,getServletConfig()方法(获取Servlet配置方法),getServletInfo()方法(获取Servlet信息)。

2)web.xml配置Servlet

    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyServlet</servlet-name>
        <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

Tomcat访问Servlet的过程

Servlet生命周期可分为5个步骤:

  1. 加载Servlet。当Tomcat第一访问Servlet的时候,Tomcat会负责创建Servlet的实例。
  2. 初始化。当Servlet被实例化后,Tomcat会调用init()方法初始化这个对象。
  3. 处理服务。当浏览器访问Servlet的时候,Servlet会调用service()方法处理请求。
  4. 销毁。当Tomcat关闭时或者检测到Servlet要从Tomcat删除的时候会自动调用destroy()方法,让该实例释放掉所占的资源。一个Servlet如果长时间不被使用的话,也会被Tomcat自动销毁。
  5. 卸载。当Servlet调用完destroy()方法后,等待垃圾回收。如果有需要再次使用这个Servlet,会重新调用init()方法进行初始化操作。

只要访问Servlet,service()方法就会被调用。init()只有第一次访问Servlet的时候才会被调用,而destroy()方法只有在Tomcat关闭的时候才会被调用。

继承HttpServlet编写Servlet程序

实现Servlet接口,要实现5个方法比较麻烦,而HttpServlet类已经实现了Servlet接口的所有方法,编写Servlet时,只需要继承HttpServlet,重写doGet()或doPost()方法即可,并且它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。

 

 posted on 2019-05-12 23:23  会飞的金鱼  阅读(83)  评论(0)    收藏  举报