Request的学习笔记(属Servlet学习课程)
文章目录
- 获取请求消息数据
- 1.获取请求行的数据
- 2.获取请求头的数据
- 3.获取请求体的数据
- 4.获取其它的数据
- 4.1.获取请求参数的通用方式
- 中文乱码问题
- 4.2.请求转发
- 4.3.共享数据
- 4.4.获取 ServletContext 对象
- 继承与实现体系
浏览器访问服务器时,会将用户提交的参数数据、协议版本、请求头信息封装成请求报文(即请求数据包)发送给服务端。
服务器(例如Tomcat)收到请求报文会封装到 Request 对象中。程序员可以通过 Request 对象获取请求消息数据。
获取请求消息数据
1.获取请求行的数据
GET /web-demo-03/demo01?name=zhangsan HTTP/1.1
方法:
1.1.获取请求方式:GET
String getMethod()
1.2.获取虚拟目录:/web-demo-03
String getContextPath()
1.3.获取Servlet路径:/demo01
String getServletPath()
1.4.获取请求URI:/web-demo-03/demo01
URI 统一资源标识符
String getRequestURI()
1.5.获取GET方式的请求参数:name=zhangsan
String getQueryString()
1.6.获取请求URL:http://localhost:8080/web-demo-03/demo01
URL 统一资源定位符
String getRequestURL()
1.7.获取协议及版本:http/1.1
String getProtocol()
1.8.获取客户机的IP地址
String getRemoteAddr()
2.获取请求头的数据
请求头名称不区分大小写。
方法:
String getHeader(String name)
通过请求头的名称获取请求头的值
Enumeration<String> getHeaderNames()
获取所有的请求头名称。Enumeration 类似迭代器
示例代码:
package priv.lwx.javaex.web_demo_03.web.servlet;/*** 获取referer,防止盗链** @author liaowenxiong* @date 2021/12/29 11:21*/import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet(value = "/demo06")
public class ServletDemo06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取refererString referer = request.getHeader("referer");System.out.println(referer);// 防止盗链if (referer != null) {if (referer.contains("/web-demo-03")) {// 应用内正常访问System.out.println("播放电影");} else {// 应用外访问System.out.println("想看电影吗?来优酷吧!");}}}
}
3.获取请求体的数据
只有 post 请求方式才有请求体,在请求体中封装了 post 请求的请求参数。
步骤:
3.1.获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型的数据(主要用于文件上传、视频上传等场景)
3.2.从流对象中取数据
示例代码:
package priv.lwx.javaex.web_demo_03.web.servlet.request;/*** 获取请求体的数据** @author liaowenxiong* @date 2021/12/29 11:21*/import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;@WebServlet(value = "/request-demo05")
public class RequestDemo05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取请求消息体的数据// 1.获取字符流BufferedReader reader = request.getReader();// 2.读取数据String line = null;while ((line = reader.readLine()) != null) {System.out.println(line);}}
}
4.获取其它的数据
4.1.获取请求参数的通用方式
不论 get 还是 post 方式,都可以使用下面的方法获取请求参数。
方法:
String getParameter(String name)
:根据参数名称获取参数的值。要注意的问题: 如果 name 与实际的请求参数名不一致,则返回 null。
如果前端页面并没有输入参数值,则返回空字符串 ""
。
String[] getParameterValues(String name)
:根据参数名称获取参数值的数组。例如:hobby=ds&hobby=ps
Enumeration<String> getParameterNames()
:获取所有请求参数的名称
Enumeration<String> parameterNames = req.getParameterNames();
// 迭代遍历Enumeration对象
while (parameterNames.hasMoreElements()) {String s = parameterNames.nextElement();System.out.println(s);
}
Map<String,String[]> getParameterMap()
:获取所有请求参数的 Map 集合。
中文乱码问题
tomcat 8 已经将 get 请求方式的中文乱码问题解决了,但是 post 请求方式会出现中文乱码问题。
解决办法:
获取参数前,设置解码的字符编码为 utf-8,代码如下:
request.setCharacterEncoding("utf-8");
这个字符编码要和前端页面的字符编码保持一致。
4.2.请求转发
请求转发:一种在服务器内部的资源跳转方式
步骤:
4.2.1.通过 request 对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
,path 是转发目标的资源路径
4.2.2.使用 RequestDispatcher 对象来进行转发:requestDispatcher.forward(ServletRequest request, ServletResponse response)
特点:
4.2.3.浏览器地址栏的访问路径没有变化
4.2.4.只能转发到当前服务器内部的资源
4.2.5.转发只是一次请求
4.3.共享数据
域对象:一个有作用范围的对象,可以在范围内共享数据
Request 域对象:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
void setAttribute(String name,Object obj):存储数据
Object getAttribute(String name):获取数据;通过属性名获取属性值
void removeAttribute(String name):删除数据;通过属性名删除对应的数据;通过键移除对应的键值对
4.4.获取 ServletContext 对象
ServletContext getServletContext()
继承与实现体系
HttpServletRequest 接口继承自 ServletRequest 接口
org.apache.catalina.connector.RequestFacade(tomcat 实现的类型),实现 HttpServletRequest 接口
Request的学习笔记(属Servlet学习课程)相关推荐
- 深度学习入门之PyTorch学习笔记:深度学习介绍
深度学习入门之PyTorch学习笔记:深度学习介绍 绪论 1 深度学习介绍 1.1 人工智能 1.2 数据挖掘.机器学习.深度学习 1.2.1 数据挖掘 1.2.2 机器学习 1.2.3 深度学习 第 ...
- Unity学习笔记:个人学习项目《疯狂天才埃德加》纠错文档
Unity学习笔记:个人学习项目<疯狂天才埃德加>纠错文档 本文档是完成学校Unity课程作业时建立的纠错文档.用于记录自己开发过程中遇到的各种问题,以便下次遇到相同的问题时及时找到解决方 ...
- ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10)
ScalersTalk 机器学习小组第 21 周学习笔记(深度学习-10) Scalers点评:机器学习小组是成长会的内部小组,这是成长会机器学习小组第21周学习笔记,也是深度学习第10次的复盘笔记 ...
- MATLAB学习笔记0:学习须知
阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...
- 学习笔记:深度学习(6)——基于深度学习的语言模型
学习时间:2022.04.22~2022.04.25 文章目录 5. 基于深度学习的语言模型 5.1 从NNLM到词嵌入 5.1.1 神经网络语言模型 NNLM 5.1.2 基于循环神经网络的语言模型 ...
- 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环
目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- 学习笔记:强化学习与最优控制(Chapter 2)
Approximation in Value Space 学习笔记:强化学习与最优控制(Chapter 2) Approximation in Value Space 1. 综述 2. 基于Value ...
- 【长篇博文】Docker学习笔记与深度学习环境的搭建和部署(二)
长篇博文记录学习流程不容易,请关注.转发.点赞.评论,谢谢! 上一篇文章:Docker学习笔记与深度学习环境的搭建和部署(一) 文章末尾附加nvidia455.23.cuda11.1.cudnn8.0 ...
- 学习笔记-零基础学习人工智能(0)
学习笔记-零基础学习人工智能(0) 背景 规划 背景 作为物理专业的大龄青年,由于兴趣爱好想学习下人工智能.主要感兴趣的方向是对抗样本生成.自己也做了一些了解,但是发现千头万绪,不懂的东西太多.为了梳 ...
最新文章
- matlab 中fft的用法
- Notepad++远程连接Linux系统
- HDLBits答案(9)_卡诺图与最简SOP式
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]47.什么是Fiat-Shamir变换?
- GitHubPage博客搭建学习专栏
- 【渝粤教育】国家开放大学2018年春季 8618-21T燃气行业规范 参考试题
- Capture One mac版如何导入Lightroom目录
- AX2012/D365 批处理如何创建
- RK3399 Android上面调试IMX291 Camera驱动
- PDF417打印后扫描不出来(记录)
- PowerDesigner下载地址
- 软件测试的容错性测试方法,你真的了解容错性测试吗?
- 年度光电领域盛会——CIOE中国光博会开幕在即!小枣君将全程在线直播!
- 西农大 Java实习 异常处理
- 计算机毕业设计Java高校学生综合评价系统(源码+系统+mysql数据库+Lw文档)
- 【 长尾理论在现实中的巨大威力】
- 问题锦集 | 登入校园网乱码问题
- 传输层与网络层的区别
- Problem1: Magic Square
- bzoj2818: Gcd 莫比乌斯繁衍
热门文章
- jdk只有一个java进程_JDK 10:从Java访问Java应用程序的进程ID
- jdk 9和jdk8_JDK 9是某些功能的终结
- viewpager默认界面_使用默认方法的界面演变–第一部分:方法
- JVM体系结构:JVM类加载器和运行时数据区
- VMWare vijava –“用户名或密码不正确”异常的奇怪情况
- 使用Spring Security和OAuth 2.0保护Spring微服务架构
- 在EL表达式中引用ADF Faces组件
- 渴望订阅– RxJava常见问题解答
- Spring Boot和Thymeleaf:重新加载模板和静态资源,而无需重新启动应用程序
- nosql的数据服务_使用NoSQL实现实体服务–第3部分:CouchDB