Request & Response
# Request & Response
# Request
请求数据分为三部分
- 请求行
- 请求头
- 请求体
![[Pasted image 20220610145409.png]]
# 请求流和请求参数
用户发送表单往往以POST形式发送,但偶尔会以GET形式携参访问。 我们有两种获取参数的方式:
req.getParameter("参数名")
- 常见于POSTreq.getQueryString()
- 常见于GET
除了以上两种获取请求参数方式,有时我们还会用到请求流获取。
req.getReader()
,该函数返回的是BufferedReader类型的数据,数据在发送方发送时会以UTF-8形式进行URL编码,因此会生成类似%E5%D3%B8%C9...
样式的数据。接收方收到这些数据后需要以同样的形式进行解码,例如UTF-8解码。
# URL编码
- 将字符串按照编码方式转为二进制
- 每个字节转为2个16进制数并在前面加上%
# 请求转发
有时,我们以功能划分网页时,可能需要跳转到其他网页去实现其他功能,请求转发是个很好的选择,它会将请求打包后发送到其他uri进行访问。
req.getRequestDispatcher("/demo2").forward(req,resp);
![[Pasted image 20220610162336.png]]
# Response
响应数据也分为三类:
- 响应行 [HTTP/1.1 200 OK]
- 响应头 [Content-Type: text/html]
- 响应体 [<body>Hello</body>]
# 重定向
Redirect:一种资源跳转方式 有时网页A无法处理的内容可以让请求跳转至网页B进行处理。 与转发不同,转发不会跳转URL,重定向会。 ![[Pasted image 20220610163604.png]]
# 字符流输出
有时,我们希望输出一些内容在网页时,可以通过获取到HttpServletResponse
对象的PrintWriter实现。
HttpServletResponse
对象为用户提供了一个getWriter()
方法,该方法能获取到PrintWriter。通过resp.getWriter().println()
方法就能实现输出内容在网页上。
# 字节流输出
但字符流通常只用于一些简单内容而已,更常用的是字节流。我们可以将图片、文件通过JAVA IO读取后,再用循环将内容输出在网页上,常见的功能就是输出特定html在网页上。
如果这种功能手写属实有点麻烦,因此我们建议使用外部库commons-io
,该库提供了copy
方法足以输出任何形式的内容在网页上。
FileInputStream fis = new FileInputStream("C:\\Users\\LAM\\Downloads\\jquery.js");
ServletOutputStream sos = resp.getOutputStream();
IOUtils.copy(fis,sos);
2
3