关闭页面特效

Request&Response

1|0Request


1|1Request 继承体系


image-20230504143937310

1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中

2.使用request对象,查阅JavaEE API文档的HttpServletRequest接口

1|2Request 获取请求数据


请求数据分为3部分:

请求行

GET /request-response-demo/req1?username=zhangsan HTTP/1.1

String getMethod():获取请求方式: GET String getContextPath():获取虚拟目录(项目访问路径): /request-response-demo --项目名 StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-response-demo/req1 --完整路径 String getRequestURI():获取URI(统一资源标识符): /request-response-demo/req1 --项目名称和Servlet名称 String getQueryString():获取请求参数(GET方式): username=zhangsan&password=123

请求头

User-Agent: Mozilla/5.0 Chrome/91.0.4472.106

String getHeader(String name):根据请求头名称,获取值

请求体

username=superbaby&password=123

ServletInputStream getInputStream():获取字节输入流 BufferedReader getReader():获取字符输入流

1|3Request 通用方式获取请求参数


请求参数获取方式:

GET 方式

String getQueryString() username=aaa&password=123&hobby=1&hobby=2

POST 方式

BufferedReader getReader() username=aaa&password=123&hobby=1&hobby=2

image-20230504144951621

Map<String, String[ ]> getParameterMap():获取所有参数Map集合 String getParameter(String name):根据名称获取参数值(单个值) String[ ] getParameterValues(String name) :根据名称获取参数值(数组)

通用

使用通用方式获取请求参数后,屏蔽了GET和POST的请求方式代码的不同,则代码可以定义为如下格式:

image-20230504145149117

可以使用Servlet模板创建Servlet更高效

image-20230504145229311

image-20230504145235806

1|4Request 请求参数中文乱码处理


请求参数如果存在中文数据,则会乱码

解决方案:

POST:设置输入流的编码

req.setCharacterEncoding("UTF-8"); Tomcat 8.0 之后,GET请求没有乱码问题

URL编码

  1. 将字符串按照编码方式转为二进制
  2. 每个字节转为2个16进制数并在前边加上%
URLEncoder.encode(str, "utf-8"); URLDecoder.decode(s, "utf-8");

image-20230504145621219

1|5请求转发


请求转发(forward):一种在服务器内部的资源跳转方式

image-20230504145832674

实现方式

req.getRequestDispatcher("资源B路径").forward(req,resp);

请求转发特点

浏览器地址栏路径不发生变化 只能转发到当前服务器的内部资源 只有一次请求,可以使用request共享数据

1|6作用域对象


用于 Servlet 之间数据共享的服务器内存区域,作用域结构是一个 Map<String, Object>

三个作用域

在 Servlet 中一共有三个作用域:请求域、会话域、上下文域

请求域范围

只在同一次请求中起作用

作用域方法

request域有关的方法 作用
Object getAttribute("键") 从请求域中通过键获取值
void setAttribute("键",Object 数据) 向请求域中添加键和值,如果键不存在就是添加,如果存在就是修改
void removeAttribute("键") 通过键删除键和值

image-20230504151355224

2|0Response


响应数据分为3部分:

响应行:HTTP/1.1 200 OK void setStatus(int sc) :设置响应状态码 响应头:Content-Type: text/html void setHeader(String name, String value) :设置响应头键值对 响应体:<html><head>head><body></body></html> PrintWriter getWriter():获取字符输出流 ServletOutputStream getOutputStream():获取字节输出流

2|1Response 完成重定向


image-20230504151941192

2|2Response 响应字符数据


使用:

1.通过Response对象获取字符输出流 PrintWriter out = resp.getWriter(); 2.写数据 out.write("数据");

注意

该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭 中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1 resp.setContentType("text/html;charset=utf-8");

2|3Response 响应字节数据


使用

1.通过Response对象获取字节输出流 ServletOutputStream outputStream = resp.getOutputStream(); 2.写数据 outputStream.write(字节数据);

IOUtils工具类使用

1.导入坐标

<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>

2.使用

IOUtils.copy(输入流,输出流);

__EOF__

作  者YXH
出  处https://www.cnblogs.com/YxinHaaa/p/17406853.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   YxinHaaa  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示