Java学习笔记六:Http协议与Servlet

Http协议

  • 什么是协议

双方在交互、通讯的时候,遵守的一种规范、规则

  • http协议

针对网络上的呵护短与服务器端在执行http请求的时候,遵守的一种规范。其实就是规定了客户端在访问服务器端的时候,要带上哪些东西,或者是服务器端在返回数据的时候,也要带上什么东西。

  • 版本

1.0 版本 请求数据,服务器返回后,将会断开连接,重新连接需要再次的请求。

1.1 版本 请求数据,服务器返回后,连接还会保持着,除非服务器 | 客户端关掉。有一定的时间限制,如果都空着这个连接,那么连接将会自己中断。

  • 抓包工具(HttpWatch)

可以使用抓包工具,对客户端与服务器端之间发送的数据进行抓取,查看客户端与服务器端之间互相发送了那些信息。

客户端与服务器端的数据交互

Http请求数据解释

请求的数据里面包含三个部分内容:请求行、请求头、请求体
在这里插入图片描述

  • 请求行

POST /examples/servlets/servlet/RequestParamExample HTTP/1.1

POST : 请求方式 ,以post去提交数据

/examples/servlets/servlet/RequestParamExample

请求的地址路径 , 就是要访问哪个地方。

HTTP/1.1 协议版本

  • 请求头

Accept: application/x-ms-application, image/jpeg,
application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap,
Referer:http://localhost:8080/examples/servlets/servlet/RequestParamExample
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C;.NET4.0E)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate Host: localhost:8080
Content-Length: 31
Connection: Keep-Alive
Cache-Control:
no-cache

Accept: 客户端向服务器端表示,我能支持什么类型的数据。 Referer : 真正请求的地址路径,全路径
Accept-Language: 支持语言格式 User-Agent: 用户代理 向服务器表明,当前来访的客户端信息。
Content-Type: 提交的数据类型。经过urlencoding编码的form表单的数据
Accept-Encoding:gzip, deflate : 压缩算法 。
Host : 主机地址 Content-Length: 数据长度
Connection : Keep-Alive 保持连接
Cache-Control : 对缓存的操作

  • 请求体

浏览器真正发送给服务器的数据

发送的数据呈现的是key=value ,如果存在多个数据,那么使用 & 连接
firstname=zhang&lastname=sansan

Http响应数据解析

请求的数据里面包含三个部分内容 : 响应行 、 响应头 、响应体

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 673
Date: Fri, 17 Feb 2017 02:53:02 GMT
…这里还有很多数据…

  • 响应行

HTTP/1.1 200 OK
协议版本 状态码 这次交互到底是什么样结果的一个code.

200 : 成功,正常处理,得到数据。
403 : for bidden 拒绝 404 :
Not Found 500 : 服务器异常
OK : 对应前面的状态码

  • 响应头

Server: 服务器是哪一种类型。
Tomcat Content-Type : 服务器返回给客户端你的内容类型
Content-Length : 返回的数据长度
Date : 通讯的日期,响应的时间

Get 和 Post 请求区别

  1. 请求路径不同。Post 请求,在url后面不跟上任何的数据,Get请求,在地址后面跟上数据。
  2. 带上的数据不同。Post请求会使用流的方式写数据,Get请求是在地址栏上跟数据。
  3. 由于Post请求使用流的方式写数据,所以一定需要一个Content-Length的头来说明数据的长度有多少。
  • post

      1. 数据是以流的方式写过去,不会在地址栏上面显示。  现在一般提交数据到服务器使用的都是POST
    
      2. 以流的方式写数据,所以数据没有大小限制。
    
  • get

      1. 会在地址栏后面拼接数据,所以有安全隐患。 一般从服务器获取数据,并且客户端也不用提交上面数据的时候,可以使用GET
    
      2. 能够带的据有限, 1kb大小
    

web资源

在http协议当中,规定了请求和响应双方,客户端和服务器端,与web相关的资源,有两种分类

  • 静态资源

    html、js、css

  • 动态资源

    jsp、servlet

Servlet

  • servlet是什么?

其实就是一个java程序,运行在我们的web服务器上,用于接收和响应 客户端的http请求。
更多的是配合动态资源来做。 当然静态资源也需要使用到servlet,只不过是Tomcat里面已经定义好了一个 DefaultServlet

Hello Servlet

  1. 得写一个Web工程 , 要有一个服务器。

  2. 测试运行Web工程

     1. 新建一个类, 实现Servlet接口
    
     2. 配置Servlet , 用意: 告诉服务器,我们的应用有这么些个servlet。
    
     	在webContent/WEB-INF/web.xml里面写上以下内容。
    
    
       <!-- 向tomcat报告, 我这个应用里面有这个servlet, 名字叫做HelloServlet , 具体的路径是com.itheima.servlet.HelloServlet -->
       <servlet>
       	<servlet-name>HelloServlet</servlet-name>
       	<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
       </servlet>
       
       <!-- 注册servlet的映射。  servletName : 找到上面注册的具体servlet,  url-pattern: 在地址栏上的path 一定要以/打头 -->
       <servlet-mapping>
       	<servlet-name>HelloServlet</servlet-name>
       	<url-pattern>/a</url-pattern>
       </servlet-mapping>
    
     3. 在地址栏上输入 http://localhost:8080/项目名称/a
    

Servlet执行过程

在这里插入图片描述

Servlet的通用写法

	Servlet (接口)
		|
		|
	GenericServlet
		|
		|
	HttpServlet (用于处理http的请求)

定义一个类,继承HttpServlet 复写doGet 和 doPost

在这里插入图片描述

Servlet的生命周期

  • 生命周期方法

从创建到销毁,所调用的哪些方法,从对象创建到销毁一定会执行的方法。

  • init方法

     在创建该servlet的实例的时候,就执行该方法
     一个servlet只会初始化一次,init方法只会执行一次
     默认情况下是:初次访问该servlet,才会创建执行实例
    
  • service方法

      只要客户端来了一个请求,那么就执行这个方法了
      该方法可以被执行很多次,一次请求,对应一次service方法的调用
    
  • destroy方法

      servlet被销毁的时候,就会执行该方法
      
      1.该项目从tomcat的里面移除。
      2.正常关闭tomcat就会执行 shutdown.bat
    

servlet 初始化提前

1.默认情况下,只有在初次访问servlet的时候,才会执行init方法,有的时候,我们可能需要在这个方法里面执行一些初始化的工作,甚至是做一些比较耗时的逻辑。
2.在配置web.xml的时候,使用 load-on-startup 元素来指定,给定的数字越小,启动的时机就越早,一般不写负数,从2开始即可,因为(0,1)已经被Tomcat的配置文件所使用。

<servlet>
        <servlet-name>ServletDemo</servlet-name>
        <servlet-class>ServletDemo.ServletDemo</servlet-class>

        <init-param>
            <param-name>name</param-name>
            <param-value>An_kkk</param-value>
        </init-param>

        <load-on-startup>2</load-on-startup>
    </servlet>

ServletConfig

servlet的配置,通过这个对象,可以获取servlet在配置的时候的一些信息

//ServletConfig 可以获取到servlet在配置文件的一些信息

        //1.得到servlet配置对象
        ServletConfig config = getServletConfig();

        //获取到的是配置Servlet里面servlet-name 的文本内容
        String name = config.getServletName();

        //2.可以获得具体的某一个参数
        String address = config.getInitParameter(name);
        System.out.println(name);

        //3.获取所有的参数名称
        Enumeration<String> names = config.getInitParameterNames();
        //遍历取出所有的参数名称
        while (names.hasMoreElements()){
            String name1  = names.nextElement();

            System.out.println("name==" + name);
        }

为什么需要ServletConfig

1.在使用别人所写的Servlet的时候

2.刚好这个Servlet里面需要一个数字或者变量值,但不是固定的值,所以有使用要求,需要在使用这个Servlet的时候,必须要在web.xml里面,声明相应的init-params 以提供变量。

总结

  • http协议

    1.使用Httpwatch 抓包工具查看http请求的内容

    2.请求和相应的数据内容

     	请求行,请求头,请求体
     	响应行,响应头,响应体
    
  • servlet

     1.使用servlet
     
     	1.写一个类,实现接口servlet,或者继承HttpServlet
     	2.配置servlet
     	3.访问servlet
     	
     2.Servlet的生命周期
     	
     	init 一次 创建对象 默认初次访问,或者可以通过配置load-on-stratup 提前初始化
     	service 多次,一次请求对应一次service
     	destory 一次,从服务器移除或者 正常关闭服务器
     
     3.ServletConfig
     	
     	获取配置的信息,params
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值