Http(1)

Http(1)

#http协议版本

http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。

http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)

#请求资源

URL:  统一资源定位符。http://localhost:8080/day11/testImg.html。只能定位互联网资源。是URI的子集。

URI: 统一资源标记符。/day11/hello。用于标记任何资源。可以是本地文件系统,局域网的资(//192.168.14.10/myweb/index.html),可以是互联网。

#请求方式

常见的请求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE

常用的请求方式: GET(浏览器默认的请求方式)  和 POST

#请求头

        Accept: text/html,image/*      -- 浏览器接受的数据类型

        Accept-Charset: ISO-8859-1     -- 浏览器接受的编码格式

        Accept-Encoding: gzip,compress  --浏览器接受的数据压缩格式

        Accept-Language: en-us,zh-       --浏览器接受的语言

        Host: www.it315.org:80          --(必须的)当前请求访问的目标地址(主机:端口)

        If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  --浏览器最后的缓存时间

        Referer: http://www.it315.org/index.jsp      -- 当前请求来自于哪里

        User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  --浏览器类型

        Cookie:name=eric                     -- 浏览器保存的cookie信息

        Connection: close/Keep-Alive            -- 浏览器跟服务器连接状态。close: 连接关闭  keep-alive:保存连接。

        Date: Tue, 11 Jul 2000 18:23:51 GMT      -- 请求发出的时间

#请求实体

       只有post请求才有实体。(post请求一般用于提交比较交敏感的数据)

HttpServletRequest对象

      HttpServletRequest对象作用是用于获取请求数据    

    核心的API:

                请求行:

request.getMethod();   请求方式

request.getRequetURI()   / request.getRequetURL()   请求资源

request.getProtocol()   请求http协议版本

请求头:

request.getHeader("名称")   根据请求头获取请求值

request.getHeaderNames()    获取所有的请求头名称

实体内容:

request.getInputStream()   获取实体内容数据

示例代码

1、jsp代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>

  <body>
    <form action="/HttpTest/HttpTest" method="get">
        用户名:<input type="text" name="name"></br>
        密  码  :<input type="text" name="password"></br>
        <input type="submit" value="提交">
    </form>
    </hr>
    </br>
    </br>
    <form action="/HttpTest/HttpTest" method="POST">
        用户名:<input type="text" name="name"></br>
        密  码  :<input type="text" name="password"></br>
        <input type="submit" value="提交">
    </form>
  </body>
</html>

2、servlet代码

public class HttpTest extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //t1(request);

    //    t2(request);
    }
    //接收post方式的请求
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        InputStream in=req.getInputStream();    //得到实体内容
        byte[] buf=new byte[1024];
        int len=0;
        while ((len=in.read(buf))!=-1) {
            String str=new String(buf,0,len);
            System.out.println(str);
        }
    }

    private void t2(HttpServletRequest request) {
        /**
         * 请求头
         */
        Enumeration<String> enums=request.getHeaderNames();
        while (enums.hasMoreElements()) {
            String string = (String) enums.nextElement();
            String value=request.getHeader(string);
            System.out.println(string+" : "+value);
        }
    }

    private void t1(HttpServletRequest request) {
        /**
         * 请求行
         */
        System.out.println("请求的方式:"+request.getMethod());
        System.out.println("URI:"+request.getRequestURI());
        System.out.println("URL:"+request.getRequestURL());
        System.out.println("http:"+request.getProtocol());
    }

}

随机推荐

  1. python备忘

    1.引用已经编写好的.py文件(Windows系统) >>>import sys >>>sys.path.append("C:/python") ...

  2. linux 关机命令总结

    linux下常用的关机命令有:shutdown.halt.poweroff.init:重启命令有:reboot.下面本文就主要介绍一些常用的关机命令以及各种关机命令之间的区别和具体用法. 首先来看一下 ...

  3. &lbrack;资料收集&rsqb;MySQL在线DDL工具pt-online-schema-change

    MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网

  4. cursor&colon;pointer 什么意思&quest;

    cursor规则是设定网页浏览时用户鼠标指针的样式,也就是鼠标的图形形状cursor:pointer设定鼠标的形状为一只伸出食指的手,这也是绝大多数浏览器里面鼠标停留在网页链接上方时候的样式另外可以选 ...

  5. Web层框架对网站中所有异常的统一解决

    一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常. 之前都是 ...

  6. 201521123113《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 contains源代码: public boolean contains( ...

  7. 初探linux子系统集之i2c子系统&lpar;一&rpar;

    I2c子系统在进公司来的时候就学习过了,可是那是还不是很熟悉linux中的i2c子系统,就没有细看.记得当初很想熟悉linux中的各种总线驱动,想专门写一个关于总线驱动的专集,后来发现好像就没有几个, ...

  8. Vue状态管理

    1.导出Vuex import Vuex from 'vuex' 2.定义store /*状态管理*/ const store = new Vuex.Store({ state: { headerSh ...

  9. tar&period;xz文件的解压

    xz是绝大数linux默认就带的一个压缩工具. 压缩包xz格式的居然比7z还要小. 不过xz也有一个坏处就是压缩时间比较长,比7z压缩时间还长一些.不过压缩是一次性的,所以可以忽略. xz压缩文件方法 ...

  10. 从PFX文件中获取私钥、公钥证书、公钥

    https://blog.csdn.net/ZuoYanYouYan/article/details/77868584 该类具体功能:根据pfx证书得到私钥.根据私钥字节数组获取私钥对象.根据公钥字节 ...

上一篇:mysql启动与停止、登录与退出命令


下一篇:C++ ORM ODB 入门介绍(二)