我是靠谱客的博主 活泼灰狼,最近开发中收集的这篇文章主要介绍Request和ResponseRequest和Response概述Request对象Response对象,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Request和Response概述

request:获取请求数据
·浏览器向后台服务器(Tomcat)发送HTTP请求
·HTTP的请求中会包含很多请求数据(请求行+请求头+请求体)
·后台服务器就会对HTTP中的数据进行解析并且把解析结果存入一个对象(request对象)中
·相关参数我们可以从request对象中获得,以及去进行后续操作
response:设置响应数据
·业务处理完之后,后台会给前端返回业务处理的结果即响应数据
·把响应数据会封装到response对象中
·服务器会解析response对象,按照(响应行+响应头+响应体)格式拼接结果
·浏览器最终解析结果,把内容展示在浏览器给用户浏览

Request对象

Request继承体系

ServletRequest–>HttpServletRequest–>RequestFacade

Request获取请求数据

获取请求行数据

请添加图片描述
获取请求方式:String getMethod()
获取虚拟目录(项目访问路径):String getContextPath()
获取URL(统一资源定位符):StringBuffer getRequestURL()
获取URI(统一资源标识符):String getRequestURI()
获取请求参数(GET方式):String getQueryString()

获取请求头数据

请添加图片描述
格式为key:value
所以根据请求头名称获取对应值:String getHeader(String name)

获取请求体数据

请添加图片描述
浏览器在发送GET请求的数据没有请求体

获取字节输入流:ServletInputStream getInputStream()

获取字符输入流(纯文本):BufferedReader getReader()

BufferedReader流是通过request对象来获取的,当请求完成后request对象就会被销毁,request对象被销毁后,BufferedReader流就会自动关闭,所以此处就不需要手动关闭流了。

获取请求参数

GET方式:String getQueryString()
POST方式:BufferedReader getReader();

在这里插入图片描述

请求参数中文乱码:
POST:

  • 分析出现中文乱码的原因:
    • POST的请求参数是通过request的getReader()来获取流中的数据
    • TOMCAT在获取流的时候采用的编码是ISO-8859-1
    • ISO-8859-1编码是不支持中文的,所以会出现乱码
  • 解决方案:
    • 页面设置的编码格式为UTF-8
    • 把TOMCAT在获取流数据之前的编码设置为UTF-8
    • 通过request.setCharacterEncoding(“UTF-8”)设置编码,UTF-8也可以写成小写

GET:

  • GET请求获取请求参数的方式是request.getQueryString()
  • POST请求获取请求参数的方式是request.getReader()
  • request.setCharacterEncoding(“utf-8”)是设置request处理流的编码
  • getQueryString方法并没有通过流的方式获取数据

在这里插入图片描述

请求转发

req.getRequestDispatcher(“资源B路径”).forward(req,resp);

Response对象

响应头
设置响应状态码:void setStatus(int sc);
设置响应头键值对:void setHeader(String name,String value);
获取字符输出流:PrintWriter getWriter();
获取字节输出流:ServletOutputStream getOutputStream();

请求重定向(redirect)
请添加图片描述
重定向的实现方式:
resp.setStatus(302);
resp.setHeader(“location”,“资源B的访问路径”);
简化:resposne.sendRedirect(“/request-demo/resp2”)

路径问题

  • 浏览器使用:需要加虚拟目录(项目访问路径)
  • 服务端使用:不需要加虚拟目录

如果通过Tomcat插件配置了项目的访问路径,重定向的时候借助getContextPath()方法动态获取虚拟目录

响应字符数据

  • 通过Response对象获取字符输出流: PrintWriter writer = resp.getWriter();
  • 通过字符输出流写数据: writer.write(“aaa”);

一次请求响应结束后,response对象就会被销毁掉,所以不要手动关闭流。

设置响应的数据格式及数据的编码
response.setContentType(“text/html;charset=utf-8”);
writer.write(“你好”);

响应字节数据

  • 通过Response对象获取字节输出流:ServletOutputStream outputStream = resp.getOutputStream();
  • 通过字节输出流写数据: outputStream.write(字节数据);

返回图片到浏览器

//pom依赖
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
 </dependenct>

-------------------------------------------------
//工具类方法
//fis:输入流
//os:输出流
IOUtils.copy(fis,os);

最后

以上就是活泼灰狼为你收集整理的Request和ResponseRequest和Response概述Request对象Response对象的全部内容,希望文章能够帮你解决Request和ResponseRequest和Response概述Request对象Response对象所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部