A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 925428799 初级黑马   /  2019-8-5 16:26  /  1092 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.http协议
        定义了客户端和服务器端交流的规则
        特点:
                1.基于tcp/ip协议
                2.默认端口是80
                3.一次请求一次响应, 并且不会相互影响
                现在1.1以上的版本
        请求:
                get方式的请求
                        GET /index.html?username=123 HTTP/1.1  ---->请求行, 我们发现我们get的方式的参数直接拼接在请求行中
                        Host: localhost:8888
                        Connection: keep-alive
                        Upgrade-Insecure-Requests: 1
                        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36
                        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
                        Accept-Encoding: gzip, deflate, br
                        Accept-Language: zh-CN,zh;q=0.9
                        Cookie: Idea-fda92745=913c5d38-d72b-4325-b714-7183cab718c4 ----->请求头

                        注意: get请求没有请求体
                       
                post方式的请求
               
                        POST /aaa HTTP/1.1     ---->请求行, 我们发现我们post的方式的参数没有在请求行中
                        Host: localhost:8888
                        Connection: keep-alive
                        Content-Length: 26
                        Cache-Control: max-age=0
                        Upgrade-Insecure-Requests: 1
                        Origin: null
                        Content-Type: application/x-www-form-urlencoded
                        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36
                        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
                        Accept-Encoding: gzip, deflate, br
                        Accept-Language: zh-CN,zh;q=0.9---->请求头
                                                                                        ---->请求空行
                        username=aaaa&password=123                 ---->请求体,专门封装post请求的请求体
                        比较重要的请求头(请求头其实就是浏览器告诉服务器自身的一些信息, 如果服务器有需要就获取去用,如果没有需要就不用管)
                                user-agent ---->告诉服务我的浏览的版本 , 服务器就可以根据这个值做兼容性的问题
                                referer -----> 防盗链, 浏览器告诉服务我从哪里点过来的, 服务器就可以根据这个值, 来去判断是否从正确的点过来
                       
                        请求体: POST封装的参数,这个才是最重要的!!!!!!!
                        请求行: GET封装的参数,这个才是最重要的!!!!!!!
        响应:
2.Request的方法
        1.获取请求消息的东西
                1.获取请求行
                        getContextPath() ---->获取"虚拟路径"  ----> http://IP地址:端口/虚拟路径/资源
                        getRequestURI();统一资源标识符 ----> 短小的路径,范围比较大 :/虚拟路径/资源
                        getRequestURL();统一资源定位符 ----> 长的路径,范围比较    : http://ip地址:端口/虚拟路径/资源
                2.获取请求头
                        (!!!!!!!!!!)getHeader(String key); ----> 根据头的名字获取对应的值
                        枚举(迭代器) getHeaderNames(); ---->获取所有的头的名字
                        常见的头:
                                user-agent
                                referer
        2.通用的方式获取参数
                String getParamter(String key); ---->一个键对用一个值
                String[] getParamterValues(String key); ---->一个键对用多个值
                枚举(迭代器) getParamterNames(); ----->获取所有的参数的键
                Map<String,String[]> getParamterMap() ---->将所有的键和值都封装到map集合返回
        3.请求转发 ---->是服务器内部"资源的跳转"的一种方式
                格式: req.getRequestDispather("路径").forword(req,resp);
                特点:
                        1.地址栏不会发生变化
                        2.对于客户而言,客户只发了一次请求,却访问了多个资源
                        3.只能跳转到本工程下的资源,不能访问工程以外的资源
                       
               
        4.共享数据
                我们发现有时候需要在多个资源中,来传递或者共享数据,而request就可以办到这件事
                整个web中有4个对象可以办到这件事, 我们给这个4个对象起了名字, 叫做"域对象",这四个对象唯一的区别,就是作用的范围不一样
                        request
                                作用范围: 在一次请求的范围内, 可以理解"转发"的时候才会request对象来共享数据
                        session
                        servletContext
                        pageContext
                共同的特点:
                        setAttribute(String key,Object value);
                        Object getAttribute(String key);
                        removeAttribute(String key);
               
        5.获取ServletContext对象
3.中文乱码问题
        请求参数乱码问题:
                get:
                        tomcat8以后的:
                                get方式不用担心乱码的问题了, 原因是tomcat中默认用utf-8的方式组成的字符串
                        tomcat8以前的
                                原因:
                                        get方式要处理乱码, 原因是因为tomcat居然用ISO-8859-1的编码去组装字符串, 因为这个编码不支持中文,所以回出现乱码问题
                                解决:
                                        例如:
                                        String name = req.getParamter("name"); // 这个name是乱码的
                                        name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
                                       
                       
                post:
                        req.setCharaterEnconding("utf-8");
                        原因:
                                其实底层获取请求体的时候通过req.getReader获取的, 这个reader是tomcat创建的, 默认的编码采用ISO-8859-1,不支持中文的
                                如果我们不改变流的编码就一定出现中文乱码问题, 我们可通过一行代码修改这个流的编码: req.setCharaterEnconding("utf-8");
       

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马