HttpServletRequset&Response
1 HttpServletRequest类#
1.1 HttpServletRequest类有什么作用#
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中。然后传递到service方法(doGET和doPOST方法)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息
1.2 HttpServletRequest类常用方法#
1. getRequestURI()·····································获取请求的资源路径
2. getRequestURL()·····································获取请求的统一资源定位符(绝对路径)
3. getRemoteHost()·····································获取客户端的IP地址
4. getHeader()············································获取请求头
5. getParameter()········································获取请求的参数
6. getParameterValues()································获取请求的参数(多个值时使用)
7. getMethod()············································获取请求的方式
8. setAttribute(key,value)·······························设置域对象
9. getAttribute(key)······································获取域对象
10. getRequestDispatcher()·····························获取请求转发对象
1.3 请求的中文乱码问题#
如果不对请求进行处理,获取的表单数据中的中文在控制台上输出,就会乱码
-
方法1
//先获取请求参数,将参数以iso8859-1进行编码,再以utf-8进行解码 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求参数 String username = req.getParameter("username"); //1、先用iso8859-1进行编码 //2、再用utf-8进行解码 String name = new String(username.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); }
-
方法2
//直接设置请求体的字符集为utf-8 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); }
1.4 请求的转发#
-
什么是请求转发
服务器收到请求后,从一个资源跳到另一个资源的操作
-
请求转发的特点
1. 浏览器地址栏没有变化 2. 它们是一次请求 3. 共享Request域中的数据 4. 可以转发到WEB-INF目录下 5. 不可以访问工程以外的资源
-
编码
req.getRequestDispatcher("/test5").forward(req,resp);
1.5 请求的重定向#
-
什么是请求的重定向
客户端给服务器发送请求,服务器给了客户端一个新地址,然后客户端去访问新地址
-
请求重定向的特点
1. 浏览器地址栏变化 2. 是两次请求 3. 不能共享Request域中数据 4. 不能访问WEB-INF下的资源 5. 可以访问工程外的资源
-
编码
-
方法1
//设置响应状态码,表示重定向 resp.setStatus(302); //设置响应头,说明新的地址在哪里 resp.setHeader("Location","http://localhost:8080");
-
方法2
resp.sendRedirect("http://localhost:8080");
-
2 HttpServletResponse类#
2.1 HttpServletResponse有什么作用#
每次请求进入,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,表示所有响应的信息,我们需要设置返回客户端的信息,可以通过这个类的对象来设置
2.2 两个输出流的说明#
字节流 | getOutputStream | 常用于下载(传递二进制数据) |
---|---|---|
字符流 | getWriter | 常用于回传字符串 |
注意: 两个流不能同时使用
2.3 往客户端回传数据#
-
显式的往客户端回传数据
//先获取输出流对象,利用输出流对象将数据传回客户端 resp.getWriter().println(req.getAttribute("key1"));
-
out.writer和out.print的区别
1. out.writer 只能输出字符串 2. out.print 可以输出对象
2.4 响应的中文乱码问题#
-
方法1
//设置响应体字符集为UTF-8,通过响应头,设置浏览器也使用UTF-8字符集 resp.setCharacterEncoding("UTF-8"); resp.setHeader("Content-Type", "text/html; charset=UTF-8");
-
方法2
//同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头.此方法在获取流对象之前调用才有效 resp.setContentType("text/html; charset=UTF-8");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!