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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

http协议
一. Request请求
        1.请求消息数据格式       
                ①请求行
                        请求方式 请求url 请求协议/版本
                ②请求头
                        请求头名称:请求头值
                ③请求空行:空行,做分割功能
                ④请求体(正文)
                        参数名称=参数值
               
POST  /login.html  HTTP/1.1
                        Host: localhost
                        User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
                        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8   
                        Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
                        Accept-Encoding: gzip, deflate           允许的打包方式
                        Referer: http://localhost/login.html
                        Connection: keep-alive
                        Upgrade-Insecure-Requests: 1
                       
                        username=zhangsan

uer-Agent:浏览器告诉服务器,浏览器版本信息(可在服务器获取改头信息,解决兼容性问题)
referer: 告诉服务器,我从哪里来?   (功能:1.防盗链2.统计工作)
        2.request原理
                ①tomcat服务器根据url中的资源路径,创建对应的servlet对象
                ②tomcat服务器,创建request和response对象,request对象封装请求消息数据
                ③tomcat将request和response对象传递给service方法,并调用
                ④程序员可以通过request对象获得请求消息数据,通过response对象设置响应消息数据
                ⑤服务器在给浏览器响应之前,会从response对象中获得响应消息数据
        3.request对象功能
                url:        http://localhost:8080/visualPath/project.do?username=zhangsan&password=123
                ①获得请求消息数据
                        获取请求行数据:  
●String getMethod():获得请求方式
●String getContextPath(): 获得虚拟目录  /visualPath
●String getservletPath():  获得servlet路径   /visualPath/project.do
●String getQueryString(): 获得get方式请求参数
●String getRequestURI():  获得请求URI
●String getProtocol():   获得协议及版本
●String getRemoteAddr():  获得客户机的IP地址
                        获得请求头数据:
                                ●String getHeader(String name):  通过请求头名称获得请求头的值
                                ●Enumeration<String> getHeaderNames():获得所有请求头
                        获得请求体数据(只有post请求方式才有请求体):
①获取流对象
        ●BufferedReader getReader():获得字符流
        ●SevletInputStream  getInputStream():获得字节流,一般用在文件上传中
                                ②再从流对象中拿数据
        ②其他功能
                获取请求参数通用方法
                        ●String getParameter(String name):根据参数名称获取参数值
                        ●String[] getParameterValues(String name):根据参数名称获得参数值数组        ,一般用来获得checkbox的值
                        ●Enumeration<string>  getParameterNames():获得所有请求的参数名称
                        ●Map<String,String[]> getParameterMap():获得所有参数的Map集合
                中文乱码问题
                        ●get方式:tomcat 8 已经将get方式乱码问题解决了
                        ●post方式:会乱码
                                解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
                请求转发(一种在服务器内部资源跳转的方式)
                        ①步骤
                                ●通过request对象获得请求转发器对象:RequestDispatcher  
getRequestDispatcher(String path)
                                ●使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
                        ②特点:
                                        1. 浏览器地址栏路径不发生变化
                                        2. 只能转发到当前服务器内部资源中。
                                        3. 转发是一次请求
                共享数据(域对象)
                        域对象:一个有作用范围的对象,可以在范围内共享数据
                        request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
                        方法:
                                        ●void setAttribute(String name,Object obj):存储数据
                                        ●Object getAttitude(String name):通过键获取值
                                        ●void removeAttribute(String name):通过键移除键值对
注:web中有4个对象可以可以做到共享数据,并且均有上述三个方法,有
Request:作用范围是一次请求内,可以理解为,只有转发才用到request对象
Session:作用范围是一次会话
servletContext:作用范围:整个项目
pageContext:作用范围:当前页面
        4.BeanUtils工具类
                ●populated(Object obj,Map map):将map中的数据放到obj中
                ●setProperty(String key,String name,String value):给obj中的name属性赋值value
                ●getProperty(Object obj,String name):得到obj中的name属性的值
               
二. Response响应
        1.数据格式
                ①响应行
                        协议/版本  响应状态码  状态码描述
                        注:       
响应状态码:
                                        ●1xx:服务器接收客户端消息,但没接收完,等一段时间后,发送1xx状态码
                                        ●2xx:成功.代表:200
                                        ●3xx:重定向.代表:302(重定向),304(访问缓存)
                                        ●4xx:客户端错误.代表:404(请求路径没有对应的资源)
                        405(请求方式没有对应的doXxx方法)
                                        ●5xx:服务器端错误.代表:500(服务器内部出现异常)
                ②响应头
                        头名称:值
                                ●Content-Type:服务器告诉客户端(浏览器)本次响应体的数据格式(text/html)及编码方式(utf-8,gbk,iso-8859-1)
                                ●Content-disposition:服务器告诉客户端以什么方式打开响应体数据
                                        值:
                                                *in-line:默认,当前页面打开
                                                *attachment:filename=xxx以附件形式打开响应体.如文件下载
                                ●locaiton:可以给浏览器一个地址,可以配合302状态码完成重定向的动作
                ③响应空行
                ④响应体
        2. response对象
                ①功能:设置响应消息
                        ●设置响应行
                                格式:HTTP/1.1 200 ok
                                        设置状态码:setStatus(int sc)
                        ●设置响应头:setHeader(String name, String value)
                        ●设置响应体:
                                * 使用步骤:
                                i 获取输出流
                                        * 字符输出流:PrintWriter getWriter()
                                        * 字节输出流:ServletOutputStream getOutputStream()
                                ii 使用输出流,将数据输出到客户端浏览器
                ②重定向
                        ●方式1
                                (1)设置状态码:response.setStatus(302)
                                (2)设置路径:response.setHeader(“location”,”路径”)
                        ●方式2
                                Response.sendDirecter(”路径”)





重定向与转发的区别
        重定向        转发
地址栏        地址改变        地址不变
访问范围        可访问其他服务器资源        只能访问本服务器资源
        至少两次访问,不能使用request共享数据        一次访问,可以使用request共享数据


③路径
                ●相对路径:通过相对路径不可以确定唯一资源(html)
                        规则:找到访问当前资源和目标资源之间的相对位置关系
                        ./:当前目录    ../:后退以及目录
                ●绝对路径:以/开头的路径, 通过绝对路径可以确定唯一资源(jsp)
                        规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
                                * 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
                                        * 建议虚拟目录动态获取:request.getContextPath()
                                                                * <a> , <form> 重定向...
                                * 给服务器使用:不需要加虚拟目录,,,,转发
                                        * 转发路径
        ④乱码问题
                1. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
                2. 设置该流的默认编码
                        Request.setCharactEncoding(“编码方式”);
                3. 告诉浏览器响应体使用的编码
                        Response.setHeader(“content-type”,”text/html;charset=utf-8”);               
                ●简单的形式,设置编码,是在获取流之前设置
                response.setContentType("text/html;charset=utf-8");
        3.servletContext对象
                ①概念
代表整个web应用,可以和程序的容器通信.
可以通过request对象获取
                ●Request.getServletContext();
                ●This.getServletContext()
                ●getServletContext()
                ②功能
                        ●获取MIME类型
                                可以让浏览器用指定引擎解析你的数据
                                MIME类型:互联网通信过程中定义的一种文件数据类型
                                格式:大类型/小类型  text/html
                                        String getMimeType(String file)
                        ●域对象:共享数据
                                作用范围:所有用户所有请求数据
                                方法:
                                        SetAttribute(string name,Object obj)存储
getAttribute(String name) 得到
removeAttribute(String name) 删除
                        ●获取文件的真实路径(服务器路径)
                                String GetRealPath(String filename)

                                其实为file,自己创建的流服务的,原因是file或者自己创建的流不能采用相对路径,不然都相对于tomcat/bin目录下,这时一定要用绝对路径,二绝对路径通过servletContext对象来获取,因为它可以读取catelina/local/xxx.xml中的docBace,使用servletContext的getRealPath()方法获得绝对路径,即获得项目的out目录.
                        ●获取全局参数
                                全局参数在web.xml中使用<context-param></context-param>来创建全局参数
                                通过调用servletContext的getInitParameter(参数名称)获得指定的全局参数的值或者getInitParameters()来获得所有的全局参数的值.

0 个回复

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