当前位置:网站首页>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)
重定向与转发区别:
重定向是两次请求, 转发是一次请求
重定向的客户端的地址栏发生变化, 转发客户端地址栏不发生变化
重定向是客户端的跳转, 转发是服务器内部的跳转
重定向资源可以是服务器的资源,也可以是服务器之外的资源
转发的资源只能是服务器内部的资源

边栏推荐
- Cholesterol-PEG-Acid,胆固醇-聚乙二醇-羧基保持在干燥、低温环境下
- 公司招个程序员,34岁以上两年一跳的不要,开出工资以为看错了
- Strict feedback nonlinear systems based on event trigger preset since the immunity of finite time tracking control
- 21天学习挑战赛(1)设备树的由来
- LVM与磁盘配额原理及配置
- 为了面试阿里,熬夜肝完这份软件测试笔记后,Offer终于到手了
- 秒懂网络拓扑中的下一跳地址
- 定了!8月起,网易将为本号粉丝提供数据分析培训,费用全免!
- 00 -- jieba分词
- 新公链时代的跨链安全性解决方案
猜你喜欢

【多线程】线程与进程、以及线程进程的调度

【Autosar RTM】

电压传感器: 工作原理、类型及电路图
Teach you to locate online MySQL slow query problem hand by hand, package teaching package meeting

可编程逻辑控制器(PLC) : 基础、类型和应用

语音合成模型小抄(1)

即席查询—— Kylin使用

Cholesterol-PEG-Amine,CLS-PEG-NH2,胆固醇-聚乙二醇-氨基脂两亲性脂质衍生物

vant-swipe自适应图片高度+图片预览

Moco of Mock tools use tutorial
随机推荐
CIO修炼手册:成功晋升CIO的七个秘诀
Nlog自定义时间
C# 异步编程(async和await)
Controller层代码这么写,简洁又优雅!
合并两个excel表格工具
Strict feedback nonlinear systems based on event trigger preset since the immunity of finite time tracking control
APT level comprehensive free kill with Shell
minio 单机版安装
airflow db init 报错
mPEG-Cholesterol,mPEG-CLS,甲氧基-聚乙二醇-胆固醇可用于脂质体制备
主流定时任务解决方案全横评
Jmeter二次开发实现rsa加密
1 - vector R language self-study
有奖提问|《新程序员》专访“Apache之父”Brian Behlendorf
# DWD层及DIM层构建## ,220801 ,
5、Citrix云桌面初始化Storefront设置
令人心动的AI综述(1)
markdown语法
高数---二重积分
DB2数据库-获取表结构异常:[jcc][t4][1065][12306][4.26.14]CharConvertionException ERRORCODE=-4220,SQLSTATE=null
