当前位置:网站首页>黑马程序员Request&Response
黑马程序员Request&Response
2022-08-06 10:32:00 【闲易生事】
Request&Response
1.这两个是Servlet中service(request,response)中的俩参数
2.Request:获取请求数据
3.设置相应数据
Request继承体系
| ServletRequest | Java提供的请求对象根接口 |
|---|---|
| HttpServletRequest | Java提供的对HTTP协议封装的请求对象接口 |
| RequestFacade | Tomcat定义的实现类 |
1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service()方法中
2.使用request对象,查阅JavaEE API文档的HttpServletRequest接口
Request获取请求数据
∙ \bullet ∙ 请求数据为三部分:
1.请求行:
| String getMethod() | 获取请求方式:GET |
|---|---|
| String getContextPath() | 获取虚拟目录(项目访问目录) |
| StringBuffer getRequestURL() | 获取URL(统一资源定位符 |
| Strung getRequestURI() | 获取URI(统一资源标识符) |
| String getQueryString() | 获取请求参数 |
2.请求头
| String getHeader(String name) | 根据请求头名称获取值 |
|---|
3.请求体
| ServletInputStream getInputStream() | 获取字节输入流 |
|---|---|
| BufferedRead getReader() | 获取字符输入流 |
Request通用方式获取请求参数
| Map <String,String[]> getParameterMap() | 获取所有参数Map集合 |
|---|---|
| String[] getParameterValues(String name) | 根据名称获取参数(数组) |
| String getParameter(String name) | 根据名称获取参数值(单个) |
Request请求参数中文乱码处理
∙ \bullet ∙ 请求参数如果纯在中文数据,则会乱码
∙ \bullet ∙ 解决方案:
->POST:设置输入流编码
req.setCharacterEncoding(“UTF-8”);
->GET:usename=new String (usename.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF-8);
乱码原因
浏览器自动将参数(UTF-8)转换为URL格式传入Tomcat,Tomcat解码URL时使用ISO_8859-1格式解码.所以编解码方式不同导致乱码.
Tomcat提交表单报错404
1.原因:路径错误
2.解决方案:
部署项目时Application context(应用程序上下文)与项目名称保持一致即可
请求转发
∙ \bullet ∙ 请求转发(forward):一种服务器内部的资源跳转方式
∙ \bullet ∙ 实现方式:
req.getRequestDispatcher(“资源路径(url Pattern)”).forward(req,resp);
∙ \bullet ∙ 请求转发资源间共享数据:使用Request对象
| void setAttribute(String name,Object o) | 存储数据到request域中 |
|---|---|
| Object getAttribute(String name) | 根据key获取value值 |
| void removeAttribute(String name) | 根据key,删除该键值对 |
∙ \bullet ∙ 请求转发特点:
-> 浏览器地址栏不发生变化却可以访问多个资源
->只能转发当前服务器的内部资源
->一次请求可在转发的资源间使用request共享数据
Response设置响应数据功能介绍
∙ \bullet ∙ 响应数据分为三部分:
1. 响应行: HTTP/1.1 200 OK
void setStatus(int sc):设置响应状态码
2. 响应头: Content-type:text/html
void setHeader(String name , String value):设置响应头键值对
3.响应体: ;
PrintWriter getWriter(); 获取字符输出流
ServletOutputStream();获取字节输入流
Response完成重定向
∙ \bullet ∙ 重定向(Redirect):一种资源跳转方式
∙ \bullet ∙ 实现方式:
resp.SetStatus(302);
resp.SetHeader("location","资源币的路径");
∙ \bullet ∙ 重定向特点
->浏览器地址栏发生变化
->可以重定向任意位置的资源(服务器内部,外部都可)
->两次请求,不能再多个资源使用request共享数据
Response响应字符数据
∙ \bullet ∙ 使用:
1.通过Response对象获取字符输出流
PrintWrite writer = resq.getWriter();
2.写数据
writer.write(“aaa”);
∙ \bullet ∙ 注意:
1.该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭
2.中文数据乱码:原因通过Response获取的字符输出流默认编码是:IOS-8859-1
resp.setContentType(“text/html;chartset=utf-8”);
∙ \bullet ∙ IOUtils工具类的使用
1.导入坐标
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
2.使用
IOUtils.copy(输入流,输出流);
边栏推荐
猜你喜欢
随机推荐
微信小程序自定义tabbar
简单相机跟随
HCIP——VLAN实验
UE5 使用Mesh Editor 查看骨骼相对于root的坐标系
从根儿上理解MySQL索引
Online Music Playing Project - BY Music
el-table 列内容溢出 显示省略号 悬浮显示文字
【技术】如何用触摸屏控制变频器?
Common loss functions
接口的安全设计要素有哪些?
2022杭电多校五_1004
【C# 学习笔记 ①】C# 程序结构和基本语法(VSCode工具配置、数据类型、修饰符、构造函数)
(已解决)Latex如何插入超链接
Kubernetes微服务框架
数据库日增20万条数据,用读写分离和分库分表加持破它
Docker Desktop启动mysql
【重写init方法 Objective-C语言】
IDEA POM刷新仍然爆红
简单3D角色移动控制
面试官一句话点破:3年测试经验还不如人家1年的经验...






![[Unity3D] VisualStudio无法调试,报错:无法直接启动带有类库输出类型的项目](/img/5c/1b2d7d388ae81bc99ea795d47878f2.png)


