Request(请求)&Response(响应)
Request:获取请求数据
Response:设置响应数据
Request继承体系
1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中。
2.使用request对象,查阅JavaEE API文档的HttpServletRequest接口。
Request获取请求数据
请求数据分为三部分:
1.请求行:
- String getMethod():获取请求方式:GET
- String getContextPath():获取虚拟目录(项目访问路径):/request-demo
- StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
- String getRequestURI():获取URI(统一资源标识符):/request-demo/req1
- String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123
2.请求头
- String getHeader(String name):根据请求头名称,获取值
3.请求体
- ServletInputStream getInputStream():获取字节输入流
- BufferedReader getReader():获取字符输入流
Request通过方式获取请求参数:
请求参数的获取方法:
- GET方式:
- POST方式:
Request通过通用方式获取请求参数
Map<String,String> getParameterMap():获取所有参数Map值
String[ ] getParameterValues(String name):根据名称获取参数值(数组)
String getParameter(String name):根据名称获取参数值(单个值)
Request请求参数中文乱码问题
请求参数如果存在中文,则会乱码。
解决方案:
- POST设置输入流的编码:
- 通用方式(GET/POST):先编码再解码
- URL编码:
1.将字符串按照编码方式转为二进制
2.每个字节转为2个16进制数并在前边加上%
//3.转换为字节数据,编码
byte[] bytes=decode.getBytes("ISO-8859-1");
/* for(byte b:bytes){
System.out.print(b+" ");
*/
//4.将字节数组转为字符串,解码
String s = new String(bytes, "utf-8");
Request的请求转发
请求转发(forward):一种在服务器内部的资源跳转方式
实现方式:
请求转发资源间共享数据:使用Request对象
- void setAttribute(String name,Object o):存储数据到request域中
- Object getAttribute(String name):根据key,获取值
- void removeAttribute(String name):根据key,删除该键值对
请求转发的特点:
- 浏览器地址栏不发生变化
- 只能转发到当前服务器的内部资源
- 一次请求,可以在转发的资源间使用request共享数据
Response
设置响应数据功能介绍
相应数据分为3部分:
1.响应行:
void setStatus(int sc):设置响应状态码
2.响应头:
void setHeader(String name,String value):设置响应头键值对
3.响应体:
printWriter getWriter():获取字符输出流
ServletOutputStream getOutputStream():获取字节输出流
Response完成重定向
重定向(Redirect):一种资源跳转方式
实现方式:
重定向特点:
- 浏览器地址栏路径发生变化
- 可以重定向到任意位置的资源
- 两次请求,不能在多个资源中使用request共享数据
路径问题
明确路径谁使用?
- 浏览器使用:需要加虚拟目录(项目访问路径)
- 服务端使用:不需要加虚拟目录
练习:
- <a href=‘路径’> 加虚拟目录
- <form action=‘路径’> 加虚拟目录
- req.getRequestDisptcher(“路径”) 不加虚拟目录
- resp.sendRedirect(“路径”) 加虚拟目录
Response响应字符数据
使用:
1.通过Response对象获取字符输出流
PrintWriter writer=resp.getWriter();
2.写数据
writer.write("aaa");
注意:
该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭
中文数据乱码:原因通过Response获取的字符输出流默认编码:IOS-8859-1
resp.setContentType("text/html;charset=utf-8");
Response响应字节数据
使用:
1.通过Response对象获取字符输出流
2.写数据
IOUtils工具类使用
1.导入坐标
2.使用