一、HttpServletRequest 类
1、HttpServletRequest
客户端请求进入Tomcat服务器后,服务器会把把请求过来的 HTTP 协议信息解析好封装到 Request 对象中然后传递到 service 方法( doGet 和 doPost) 中给我们使用。 我们可以通过 HttpServletRequest 对象, 获取到所有请求的信息。
2、HttpServletRequest 常用方法
方法名称 | 作用 |
---|---|
getRequestURI() | 获取请求的资源路径 |
getRequestURL() | 获取请求的统一资源定位符(绝对路径),加上了主机信息 |
getRemoteHost() | 获取客户端的 ip 地址 |
getParameter() | 获取请求参数 |
getParameterValues() | 获取多个请求参数 |
getMethod() | 获取请求的方式 GET 或 POST |
setAttribute( | ; 设置域数据 |
getAttribute(key); | 获取域数据 |
getRequestDispatcher(); | 获取请求转发对象 |
3、乱码问题
doGet 请求的中文乱码解决:
/ 获取请求参数
String username = req.getParameter("username");
//1 先以 iso8859-1 进行编码
//2 再以 utf-8 进行解码
username = new String(username.getBytes("iso-8859-1"), "UTF-8");
POST 请求的中文乱码解决
// 设置请求体的字符集为 UTF-8, 从而解决 post 请求的中文乱码问题, 一定写在最前面
req.setCharacterEncoding("UTF-8");
4、请求转发
请求转发是指, 服务器收到请求后, 从一次资源跳转到另一个资源的操作叫请求转发。
总结:
转发的特点:1、浏览器地址无变化;2、一次请求;3、共享request中数据;4、可以转发到WEB-INF目录下;5、不可以访问工程外资源。
5、xml中base标签
base标签可以设置当前页面跳转时候,参照跳转的路径。
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--base 标签设置页面相对路径工作时参照的地址
href 属性就是参数的地址值
-->
<base href="http://localhost:8080/07_servlet/a/b/">
</head>
<body>
这是 a 下的 b 下的 c.html 页面<br/>
<a href="../../index.html">跳回首页</a><br/>
</body>
</html>
6、路径
web 中 / 斜杠的不同意义
如果被浏览器解析,就是 http://ip:port/
如果被服务器解析,得到地址 http://ip:port/工程路径
二、HttpServletResponse 类
1、HttpServletResponse
浏览器每次发送请求后, Tomcat 服务器也会创建一个 Response 对象传递给 Servlet 程序去使用。来传递服务器对浏览器请求的响应信息。需要返回给浏览器的信息,都可以通过HttpServletResponse 对象来设置。
2、常用两个输出
httpServletResponse.getWriter(); // 常用于回传字符串(常用)
httpServletResponse.getOutputStream(); // 常用于下载(传递二进制数据)
两个不能同时使用,同时使用会报错。
在浏览器页面,通过响应流打印hello。
PrintWriter writer = httpServletResponse.getWriter(); // 响应流
writer.print("hello");
3、响应乱码问题
方法一:
先设置服务器
httpServletResponse.setCharacterEncoding("UTF-8");
再设置浏览器
httpServletResponse.setHeader("Content-Type", "text/html; charset=UTF-8");
方法二:
同时设置
httpServletResponse.setContentType("text/html; charset=UTF-8");
4、请求重定向
请求重定向:浏览器向服务器发送请求,服务器返回给浏览器一些新的地址,让其在新的地址进行访问。这就是重定向。
特点:1、地址改变;2、两次请求,3、不共享resquest域数据;4、不能访问web-INF;5、可以访问外部资源。
public class DemoServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("/demo02");
}
}