HttpServletRequest类
有什么作用?
- 每次只要有请求进入 tomcat服务器,tomcat服务器就会吧请求过来的http协议解析封装到 request对象中
- 然后传递到 service 方法 doGet doPost 供使用者调用,
- 可以通过httpservletRequest对象获取到所有的请求信息
HttpServletRequest 类的常用方法
getRequestURI * 获取请求的资源路径
getRequestURL * 获取请求的统一资源定位符 绝对路径
getRemoteHost * 获取客户端的ip地址
getHeader * 获取请求头
getParameter * 获取请求参数
getParameterValues * 获取请求的参数 (多个值的时候使用
getMethod * 获取请求的方式 get或者post
setAttribute(k,v) * 设置 域数据
getAttribute(k,v) * 获取域数据
getRequestDispatcher() 获取请求转发对象
乱码问题
使用request对象设置编码格式
request.setCharacterEncoding("UTF-8");
请求转发
请求转发指,服务器收到请求之后,从一次资源跳转到另一个服务器资源的操作
特点
1 浏览器地址栏没有变化 与 重定向要进行区别,重定向 浏览器请求地址发生变化。
2 他们是一次请求
3 他们共享 reuest域中的数据
4 可以转发到web-inf 目录下的页面
5 但是不可转发到工程以外的资源,比如baidu.combase标签的作用
base标签可以设置在当前页面中,对当前页面中的所有路径生效,比如说要发生跳转的时候相对与哪个路径进行跳转
<html>
<head>
<title>$Title$</title>
<base href="url">
</head>
<body>
$END$
</body>
</html>
web 中的相对路径和绝对路径
在javaweb中,路径分为相对路径和绝对路径两种
- 相对路径是
- . 表示当前目录
- .. 表示上一级目录
- 资源名 表示当前目录/资源名
绝对路径
- http://ip:port/工程路径/资源路径
web中 / 斜杠的不同意义
- http://ip:port/工程路径/资源路径
在web中 / 斜杠 是一种绝对路径
- / 斜杠 如果被浏览器解析 得到的是 http://ip:port/
/ 斜杠如果被服务器解析 得到的是 http://ip:port/工程路径
特殊情况
response.sendRedirect(“/“) 重定向则是 单纯吧 斜杠 发给浏览器解析
得到的是 http://ip:port/
HttpServletResponse 类
response 类的作用
httpServletResponse 中支持两个输出流 ```java
// 注意点 ,二者只能同时出现一种流 否则就会报错 PrintWriter writer = response.getWriter();// 字符输出流对象获取 // ServletOutputStream outputStream = response.getOutputStream(); // 字节输出流获取
- getOutPutStream() 常用语下载 传递 二进制数据 字节流
- getWriter() 常用语传回字符串 -- 更为常用 字符流
<a name="dHiaF"></a>
## 注意点
- 两个流使用时只能存在一个,否则会报错
<a name="TDvYn"></a>
# 如何往客户端回传数据
- get字符流输出对象,writer方法直接回显到页面
```java
writer.write("输出response 返回的内容~"); // 直接回显到页面 ,但是出现了中文乱码
响应内容中文乱码问题解决
# 方式1 设置 服务器的字符集为utf-8 同时设置浏览器的字符集也使用utf-8
System.out.println(response.getCharacterEncoding()); //ISO-8859-1 默认值
// 设置服务器字符集为 UTF-8
response.setCharacterEncoding("UTF-8");
//杈撳嚭response 杩斿洖鐨勫唴瀹癸綖 出现这种情况是因为 服务器和浏览器的字符集编码不一直
// 通过响应头,设置浏览器也使用utf-8
response.setHeader("Content-Type","text/html;charset=UTF-8");
# 方式2 直接同时设置服务器和客户端都使用utf-8 还顺便设置了响应头
# 但是使用需要注意,一定要在获取流对象之前调用才有效
response.setContentType("text/html; charset=UTF-8");
请求重定向问题
想必我们都遇到过一重情况,一直去的网站,某天突然不行了,而你再去访问的时候,会显示吧你重定向到一个新网站。这个过程,就是重定向 ```java 请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说,给你一个新地址,你去新地址访问 叫请求重定向 客户端 浏览器 服务器 http://ip:port/工程路径response1 - 》 随着时间的退役和项目的不断更新升级,response1这个接口慢慢被废弃了 由新的接口response2 取代 解析 response1的结果,知道已经搬迁 《- 由义务告诉客户端,我已搬迁 =》 响应码为302 再次发起请求 新地址的请求 并且告诉新的地址 =》 响应头Location -》 response2 程序 取代了 response1 功能更完善,安全性更高 收到最终返回,解析展示到页面 《-
<a name="B2Y8C"></a>
## 重定向的方式
```java
# 第一种方式
response.setStatus(302);
response.setHeader("Location","重定向到的目标地址");
# 第二种方式最为便利,
response.sendRedirect("目标地址即可")
重定向的特点
- 浏览器的地址会发生变化
- 总共发生两次请求
- 不共享request域中数据,因为已经是两次不同的请求了
- 不能访问web-inf下的资源,
- 可以访问工程外的资源,比如 baidu.com