Day25 JavaWeb知识 (2)_HTTP协议&Servlet

(一)HTTP协议

一.概述

  1. Hypertext Transfer Protocol 超文本传输协议

  2. 协议:双方在交互,通讯的时候,遵守的一种规范,规则

  3. http协议
    针对网络上的客户端与服务器端在执行http请求的时候,遵守的一种规范.

二.演示客户端与服务器端通讯

- - 在地址栏中键入网络地址,回车,或者平时注册点击了注册按钮,浏览器都可以显示出来,
那么浏览器和服务端是如何通讯,并且传输了哪些数据

  1. 安装抓包工具 HttpWatch (IE插件)
  2. 打开TomCat . 输入localhost:8080打开首页
  3. 在首页上找到Examples字样
  4. 选择Servlets examples - - - >Request Parameters
    http://localhost:8080/examples/servlets/
    接着点击Request Parameters  的 Execute超链接
    执行tomcat的例子,然后查看浏览器和tomcat服务器的对接细节

三.Http请求数据解释

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

  1. 请求行
    post / example/servlets/servlet/RequestParamExample HTTP/1.1
              POST : 请求方式, 以post去提交数据
              GET
          / example/servlets/servlet/RequestParamExample HTTP/1.1
                 请求的地址路径, 就是要访问哪个地方
          HTTP/1.1
                  协议版本
  2. 请求头
    Accept : 客户端向服务器端表示,我能支持什么类型的数据
    Referer: 真正请求的地址路径,全路径
    Accept - language: 支持语言格式
    User-Agent: 用户代理   向服务器表明,当前来访的客户端信息
    Content - Type : 提交的数据类型.   经过urlencoding编码的form表单的数据
    Accept-Encoding : gzip , deflate : 压缩算法
    Host : 主机地址
    Content-Length : 数据长度
    Connection : keep-Alive 保持连接
    Cache-Control : 对缓存的操作
  3. 请求体
    浏览器真正发送给服务器的数据,
    1. 发送的数据呈现的是key =value ,如果存在多个数据,那么使用&

四.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
      ... ...

  1. 响应行
    HTTP/1.1 200 OK
     - - 协议版本 :  HTTP/1.1
     - - 状态码 :  
                 200 :  成功,正常处理,得到数据 
                 403 :  for biddern 拒绝
                 404 :  Not Found
                 500 :  服务器异常
     - -  OK  : 对应前面的状态码200
  2. 响应头
    Server : 服务器是哪一种类型  Tomcat
    Content-Type: 服务器返回给客户端的内容类型
    Content-Length: 返回的数据长度
    Date: 通讯的日期,响应的事件

五.Get 和 Post请求区别

  1. 请求的路径不同.
    Post请求,在url后面不跟上任何的数据   
    Get请求,在地址后面跟上数据
  2. 带上的数据不同,
    Post请求会使用流的方式写数据,不会在地址栏上显示,    现在一般提交数据到服务器使用的都是Post     
    Get请求是在地址栏上跟数据,所以有安全隐患.   一般从服务器获取数据,并且客户端也不用提交上面数据的时候,使用Get
  3. 由于Post请求使用流的方式写数据,所以一定需要一个Content-Length的头来说明数据的长度有多少
    Get能够带的数据有限, 1kb大小

六.Web资源

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

  1. 静态资源
    html . css . js
  2. 动态资源
    servlet / jsp

(二)Servlet

一.概述

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

二.Hello Servlet

  1. 得写一个Web工程, 要有一个服务器
  2. 测试运行Web工程
    1. 新建一个类,实现Servlet接口
    2. 配置Servlet .   用意: 告诉服务器,我们有这些Servlet

            在webContent/WEB-INF/web.xml里面写上以下内容
        <!-- 向tomcat报告,我这个应用里面有这个servlet,名字叫做HelloServlet , 具体的路径是com.itmine.servlet.HelloServlet -->
        <servlet>
      	<servlet-name>HelloServlet</servlet-name>
      	<servlet-class>com.itmine.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/项目名称/上边的url-pattern

三.Servlet执行过程

  1. 找到tomcat应用
  2. 找到项目
  3. 找web.xml,然后在里面找到url-pattern,有没有哪一个pattern的内容是/a
  4. 找到servlet-mapping中的那个servlet-name [HelloServlet]
  5. 找到上面定义的servlet元素中的servlet-name中的[HelloServlet]
  6. 找到下面定义的servlet-class然后开始创建该类的实例
  7. 继而执行该servlet中的service方法

四.Servlet通用写法

  1. Servlet(接口) - - - GenericServlet - - - HttpServlet(用于处理http的请求)
  2. 定义一个类,继承HttpServlet  重写doGet 和 doPost

五.Servlet的生命周期

  1. init方法
    - - 在创建servlet的实例时,就会执行该方法
    - - 一个servlet只会初始化一次, init方法只会执行一次
    - - 默认情况下是 : 初次访问该servlet,才会创建实例
  2. service方法
    - - 只要客户端来了一次请求,就会执行这个方法
    - - 该方法可以被执行很多次,一次请求,对应一次service方法的调用
  3. destory方法
    - - servlet销毁的时候,就会执行该方法
    - - 1.该项目从tomcat的里面移除
    - - 2.正常关闭tomcat就会执行  shutdown.bat

六.让Servlet创建实例的时机提前

  1. 默认情况下,只有在初次访问servlet的时候,才会执行init方法.
    有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑
  2. 那么这个时候,初次访问,可能会在init方法中逗留太久的时间,那么就需要让初始化的时机提前一点
  3. 在配置的时候,使用load-on-startup元素来指定,给定的数字越小,启动的时机就越早,一般不写负数,从2开始即可
    <servlet>
    	<servlet-name>HelloServlet</servlet-name>
    	<servlet-class>com.itmine.servlet.HelloServlet</servlet-class>
            <load-on-startup>2<load-on-startup>
    </servlet>

     

七.ServletConfig

  1. Servlet的配置
                    //1.得到servlet配置对象 专门用于在配置servlet的信息
    		ServletConfig config = getServletConfig();
    		
    		//获取到的是配置servlet里面servlet-name的文本内容
    		String servletName = config.getServletName();
    		System.out.println(servletName);
    		
    		//2. 可以获取具体的某一个参数
    		String address = config.getInitParameter("address");
    		System.out.println(address);
    		
    		//3.获取所有的参数名称
    		Enumeration<String> names = config.getInitParameterNames();
    		//遍历取出所有的参数名称
    		while(names.hasMoreElements()){
    			String key = (String)names.nextElement();
    			String value = config.getInitParameter(key);
    			System.out.println(key + "	" + value);
    		}

     

  2. ServletConfig作用
    - - 当我们自己开发一些应用,使用一些技术与代码,我们不会,用别人的代码,他的代码放置在了自己的servlet类里面
    - - 刚好这个servlet里面需要一个数字或者叫做变量值,但这个值不能是固定的,所以要求使用到这个servlet的公司,在注册servlet的时候,必须要在web.xml里面,声明init-param
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值