当前位置:网站首页>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)
重定向与转发区别:
重定向是两次请求, 转发是一次请求
重定向的客户端的地址栏发生变化, 转发客户端地址栏不发生变化
重定向是客户端的跳转, 转发是服务器内部的跳转
重定向资源可以是服务器的资源,也可以是服务器之外的资源
转发的资源只能是服务器内部的资源
边栏推荐
猜你喜欢
九零后程序员心声:互联网的同行们,别卷了,再卷人都卷没了
CAS:474922-22-0,DSPE-PEG-MAL,磷脂-聚乙二醇-马来酰亚胺科研试剂供应
如何快速对接淘宝开放平台API接口(淘宝店铺订单明文接口,淘宝店铺商品上传接口,淘宝店铺订单交易接口)
语音合成模型小抄(1)
I have been in the software testing industry for nearly 20 years, let me talk to you about today's software testing
js基础知识整理之 —— Math
几种常见的跨域解决方法
Heartwarming AI Review (1)
js基础知识整理之 —— 五种输出方式
Mock工具之Moco使用教程
随机推荐
Week 7 - Distributional Representations
Cholesterol-PEG-Amine,CLS-PEG-NH2,胆固醇-聚乙二醇-氨基脂两亲性脂质衍生物
ORA-55610: Invalid DDL statement on history-tracked table
LVM与磁盘配额原理及配置
用了 TCP 协议,数据一定不会丢吗?
matplotlib中的3D绘图警告解决:MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure
高数---二重积分
Heartwarming AI Review (1)
牛客网剑指offer刷题练习之链表中环的入口结点
2022暑假牛客多校1 (A/G/D/I)
如何突破测试/开发程序员思维?一种不一样的感觉......
flutter 时间戳转日期
一文读懂 Web 3.0 应用架构
Controller层代码这么写,简洁又优雅!
d合并json
心电记录电路设计(框图/波形以及信号放大器的选择)
HVV红队 | 渗透测试思路整理
D experimental new anomaly
No code development platform data ID introductory tutorial
别再到处乱放配置文件了!我司使用 7 年的这套解决方案,稳的一秕