当前位置:网站首页>Servlet——请求(request)与响应(response)
Servlet——请求(request)与响应(response)
2022-08-02 23:33:00 【只要认真学,大神变小白】
文章目录
前言
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
一、请求响应流程图

- 1.创建request对象,把请求数据封装到request中;
- 2.创建response对象
- 3.调用Servlet的service()方法传递这两个参数
Request: 父接口: ServletRequest, 子接口: HttpServletRequest
Response: 父接口: ServletResponse: 子接口: HttpServletResponse
二、Request对象
功能:
获取请求头
获取请求参数
域功能 实现数据传递
请求转发 实现页面之间跳转
void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!
2.1
- 获取请求参数

- String getParameter(String name) //根据请求参数名获取请求参数值
//注意:
// 1) 前端传递这个请求参数, 得到请求参数value
// 2) 前端传递这个请求参数,username=,得到""
// 3) 前端传递没有这个请求参数, 得到null- String[] getParameterValues(String name) //根据请求参数名获取请求参数值(一个name对应多个value)
- Enumeration getParameterNames() //获取所有的请求参数名
- Map<String,String[]> getParameterMap() //获取所有的请求参数, 并且把请求参数保存到map集合
- 注:如果表单没有name属性, 该表单无法传递到后端
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// System.out.println("登录处理中....");
//使用request得到请求参数
//String getParameter(String name)
//返回值情况:
// 1) 前端传递这个请求参数, 得到请求参数value
// 2) 前端传递这个请求参数,username=,得到""
// 3) 前端传递这个请求参数, 得到null
/* String username = request.getParameter("username"); String pwd = request.getParameter("pwd"); System.out.println("username:"+username); System.out.println("pwd:"+pwd);*/
//一个key对应多个value
String[] usernames = request.getParameterValues("username");
//变成list集合
/* List<String> list = new ArrayList<>(); for (String username : usernames) { list.add(username); }*/
//Arrays.asList() 返回的ArrayList 是Arrays内部类
// 只读的List, 无法进行添加元素,删除元素操作
List<String> list = Arrays.asList(usernames);
//list.add("aa");
System.out.println(list);
//获取所有的请求参数的name
/* Enumeration<String> names = request.getParameterNames(); while(names.hasMoreElements()){ System.out.println(names.nextElement()); }*/
//一次性获取所有的请求参数 框架内部使用
/*Map<String, String[]> parameterMap = request.getParameterMap(); System.out.println(parameterMap);*/
//调用dao查询数据库
//使用response 响应结果给前端
}
三、域对象功能 request域
request域中的数据,只能同一次请求内有效
void setAttribute(String name, Object o)//往域中保存数据
Object getAttribute(String name) //从域中获取数据
void removeAttribute(String name) //从域中删除数据
3.1请求转发
转发只是服务器内部跳转;
在AServlet中,把请求转发到BServlet
public class AServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("AServlet");
RequestDispatcher rd = request.getRequestDispatcher("/BServlet");
rd.forward(request, response);
}
}
public class BServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BServlet");
}
}
3.2总结
- 如果在AServlet中请求转发到BServlet,那么在AServlet中就不允许再输出响应体,即不能再使用response.getWriter()和response.getOutputStream()向客户端输出,这一工作应该由BServlet来完成;如果是使用请求包含,那么没有这个限制;
- 请求转发虽然不能输出响应体,但还是可以设置响应头的,例如:response.setContentType(”text/html;charset=utf-8”);
- 请求请求大多是应用在Servlet中,转发目标大多是JSP页面;
四、Response
4.1概述
response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。
request: 请求对象, 封装了客户端给服务器的相关的数据
- 请求头 getHeader()
- 请求参数
- 域功能
- 请求转发
request默认编码: ISO-8859-1 这种编码不包含中文, UTF-8
void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!
设置输出流的编码,但是这个方法无法设置页面的编码, 页面编码不是UTF-8,GBK, 输出流的编码:UTF-8,
4.2response 对象
response对象的功能分为以下四种:
- 设置响应头信息;
- 发送状态码;
- 设置响应正文;
- 重定向;
4.3response响应正文
通过输出流, 通过Response得到网络输出流
ServletOutputStream getOutputStream() //得到响应字节输出流, 万能流
//输出中文,出错
PrintWriter getWriter() //得到响应字符输出流, 输出字符
- 两个流不能同时使用
4.4 重定向
void sendRedirect(String location)
重定向与转发区别:
重定向是两次请求, 转发是一次请求
重定向的客户端的地址栏发生变化, 转发客户端地址栏不发生变化
重定向是客户端的跳转, 转发是服务器内部的跳转
重定向资源可以是服务器的资源,也可以是服务器之外的资源
转发的资源只能是服务器内部的资源

边栏推荐
猜你喜欢
随机推荐
程序员如何优雅地解决线上问题?
【UE5 骨骼动画】全形体IK导致Two Bone IK只能斜着移动,不能平移
令人心动的AI综述(1)
华为设备配置BFD与接口联动(触发与BFD联动的接口物理状态变为Down)
【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦
LVM与磁盘配额原理及配置
NLP commonly used Backbone model cheat sheet (1)
21天学习挑战赛(1)设备树的由来
我为什么又能面试一次就拿到offer
I have been in the software testing industry for nearly 20 years, let me talk to you about today's software testing
4、Citrix MCS云桌面无法安装todesk等软件
我们来浅谈代码语言的魅力
即席查询—— Kylin使用
Apache Doris 1.1 特性揭秘:Flink 实时写入如何兼顾高吞吐和低延时
HVV红队 | 渗透测试思路整理
九零后程序员心声:互联网的同行们,别卷了,再卷人都卷没了
【Autosar RTM】
【多线程】Thread类的基本用法
可编程逻辑控制器(PLC) : 基础、类型和应用
Find My技术|智能防丢还得看苹果Find My技术










