大话Request和Response对象—— 从此转发重定向so easy

在了解Request和Response对象之前,我们必须先明白HTTP中的请求报文和响应报文

HTTP中的请求信息

HTTP中的请求消息包含四部分,分别为:

  1. 请求行

请求方法 URL地址 HTTP/版本号

GET /FirstServlet HTTP/1.1

  1. 请求头

请求头名称:请求头值

请求信息例如:

Host: sp1.baidu.com
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Microsoft Edge";v="96"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62
sec-ch-ua-platform: "Windows"
Accept: image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: image
Referer: https://www.baidu.com/?tn=02003390_43_hao_pg
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
  1. 请求空行

​ 只是空了一行,用来标记请求头与请求体;

  1. 请求体

​ 只有POST方法才有请求体,GET方法没有,请求体的形式是键值对的形式中间用=连接

HTTP中的响应信息

  1. 响应行

HTTP/版本 响应状态码 状态码描述

HTTP/2.0 200 OK

  1. 响应头

    头名称:值

  2. 响应空行

  3. 响应体

一般是JSP网页信息

响应状态码:

1xx:信息性状态码,接收的请求正在处理

2xx:成功状态码,请求正常处理完毕

200 OK:表示从客户端发来的请求在服务器端被正常处理了。

204 No Content:该状态码代表服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。

206 Partial Content:该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的请求。响应报文中包含由Content-Range指定范围的实体内容。

3xx:重定向状态码,需要进行附加操作以完成请求

301 Moved Permanently:永久性重定向。该状态码表示请求的资源已被分配了新的URI,以后应该使用现在资源所指的URI。

302 Found:临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。

303 See Other:该状态码表示由于请求对应的资源存在着另外一个URI,应使用GET方法定向获取请求的资源。

304 Not Modified:该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后直接返回304。304状态码返回时,不包含任

何响应的主体部分。304虽然被划分在3XX类别中,但是和重定向没有关系。(附带条件的请求时指采用GET方法的请求报文中包含If-Match、If-Modified-Since、If-Range等

任一首部)

307 Temporary Redirect:临时重定向。该状态码与302 Found有着相同的含义。

4xx:客户端错误状态码,服务器无法处理请求

400 Bad Request:该状态码表示请求报文中存在语法错误。

401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。

403 Forbidden:该状态码表明对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题等情况都可能发生403。

404 Not Found:该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

5xx:服务端错误状态码,服务器处理请求出错

500 Internal Server Error:该状态码表明服务器端在执行请求时发生了错误,也有可能是Web应用存在的Bug或某些临时的故障。

503 Service Unavailable:该状态码表明服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。

HTTP中的请求方式

  1. OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

  2. HEAD:向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

  3. GET:向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

  4. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

  5. PUT:向指定资源位置上传其最新内容

  6. DELETE:请求服务器删除Request-URL所标识的资源

  7. TRACE:回显服务器收到的请求,主要用于测试或诊断

  8. CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

其中最常用的只有两种:GET和POST

GET和POST的区别:

GET:

  • GET的参数信息放在请求行中,位于URL地址的后侧
  • GET相对不安全一点
  • GET URL长度有限制

POST:

  • POST的参数信息放在请求体中,以键值对中间以=分割的形式出现。
  • POST相对安全一些
  • POST URL长度没有限制

Request对象

Request和Response对象的原理
  1. ruquest和response对象都是由tomcat服务器创建的
  2. request对象是来获取请求消息的,response对象是来设置响应消息的
Request继承关系

ServletRequest 接口

HttpServletRequest 抽象类继承了ServletRequest接口

HttpServletRequest被tomcat的类:org.apache.catalina.connector.RequestFacde实现,是在tomcat中生成的

Request中的方法

(加粗的为重点方法!)

获取请求行数据:

  1. 获取请求方式:String getMethod()
  2. 获取虚拟目录:String getContextPath()
  3. 获取Servlet路径:String getServletPath()
  4. 获取get方式请求参数:String getQueryString()
  5. 获取请求URI:String getRequestURI() StringBuffer getRequestURL()
  6. 获取协议及版本:String getProtocol()
  7. 获取客户机的IP地址:String getRemoteAddr()

获取请求头数据:

  1. 通过请求头的名称获取请求头的值:String getHeader(String name)
  2. 获取所有的请求头名称:Enumeration<String> getHeaderNames()

获取请求体数据:

请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数

  1. 取字符输入流,只能操作字符数据:BufferedReader getReader()
  2. 获取字节输入流,可以操作所有类型数据:ServletInputStream getInputStream()

获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

  1. 根据参数名称获取参数值:String getParameter(String name)(复选框只能返回一个值)
  2. 根据参数名称获取参数值的数组:String[] getParameterValues(String name)(用于复选框,选择的结构,返回String数组)
  3. 获取所有请求的参数名称:Enumeration<String> getParameterNames()
  4. 获取所有参数的map集合:Map<String,String[]> getParameterMap()(返回泛型为String,String数组的键值对,防止复选框选择丢失的情况)

POST方式乱码问题:通过requeset.setCharacterEncoding("utf-8")来设置防止乱码!!!

Request转发:一种在服务器内部资源跳转的方式

  1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
  2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)

转发的特点:

  1. 浏览器地址不发生变化
  2. 只能转发到当前服务器内部资源
  3. 转发是一次请求

在这里插入图片描述

共享数据:

当转发发生的时候,通过共享数据可以实现两个Servlet共同访问这个数据,实现共享操作;

  1. 存储数据:void setAttribute(String name,Object obj)
  2. 通过键获取值:Object getAttitude(String name)
  3. 通过键移除键值对:void removeAttribute(String name)

Response对象

Request和Response对象的原理
  1. ruquest和response对象都是由tomcat服务器创建的
  2. request对象是来获取请求消息的,response对象是来设置响应消息的
Response中的方法

设置响应行:

设置状态码:setStatus(intcho

设置响应头:setHeader(String name, String value)

设置响应体:

字符输出流:PrintWriter getWriter()

字节输出流:ServletOutputStream getOutputStream()

重定向

重定向是由servlet的response发起,由浏览器执行的页面跳转操作。首先由response设置状态码302标志重定向之后再告诉浏览器重定向的路径完成重定向。

可以通过设置状态码response.setStatus(302)之后再设置响应头location来实现response.setHeader("location","/LoginServlet")

还有一种简便方法可以实现重定向:response.sendRedirect("/LoginServlet")直接输路径就可以了

在这里插入图片描述

转发和重定向的区别:

重定向的特点:

  1. 地址栏发生变化
  2. 重定向可以访问其他站点的资源
  3. 重定向是两次请求,不能使用request共享数据

转发的特点:

  1. 地址栏不发生变化
  2. 转发不能访问其他站点的资源只能访问本地服务器的资源
  3. 转发是一次请求,可以使用request共享数据

在这里插入图片描述
在这里插入图片描述

感谢您的阅读,如果本篇文章对您有帮助,欢迎点赞,关注,您的阅读是我莫大的鼓励!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值