HTTP应用

概念

HTTP继承自GenericServlet实现类,而GenericServlet则实现了Servlet接口。
因此从不严格的意义上来讲,属于Servlet的分支,因此全称为’HttpServlet‘
HTTP是WEB服务的一种,我相信我不必多讲了。

创建和使用

创建方式一:手动创建
步骤一:创建一个类,继承实现类‘HttpServlet’
并按Alt+回车重写两个方法,分别为’doPost‘和’doGet’
步骤二
在WebServlet注解处声明一个’loadOnStartup‘属性或者’value‘属性来定义虚拟路径

创建方式二(推荐)IDEA快捷生成
步骤一:选择一个作为包名,右键单击,选择’new’,再单击‘Servlet‘
接着会弹出一个对话框,让你设置类名,默认点OK就行。
步骤二
在WebServlet注解处声明一个’loadOnStartup‘属性或者’value‘属性来定义虚拟路径

doGet类方法

用于请求和响应,如果客户请求(即访问)的类型为get,那么将会触发或用到该方法
当你访问指定的虚拟路径时,将会触动该方法

doPost类方法

同样也用于请求和响应,如果客户请求(即访问)的类型为post,那么将会触发或用到该方法

请求行/请求头/请求体

大致概念

请求信息是HTTP理论的核心,它分为请求行/请求头/请求体,当你浏览网页时,基本每个数据包都有这种信息。

请求行的概念

请求行如果要具体归纳,是服务器专门获取的信息,比如它能够获取配置项目中的虚拟目录等等

请求头的概念

用于获取用户的一些HTTP版本协议,以及浏览器等相关信息

请求体的概念

用于获取用户从浏览器提交给服务器的信息
只有在POST方式的情况下,才能获取请求体

request和response对象

request和response是HttpServlet中的一个封装对象
request和response对象是由服务器创建的。
从大致的概念来讲,request对象是来获取客户从浏览器发来的请求消息,response对象来设置响应消息。

request对象的概念与应用

概念

request是HttpServlet体系中的一个对象,准确来讲,request就是HttpServletRequest,而HttpServletRequest不仅仅是个接口,还继承了ServletRequest接口中的方法。
request对象中的方法可以对客户请求过来的请求行,请求头,请求体数据进行详细地获取(查看)
因此,它的应用于请求行,请求头,请求体。

请求行的方法应用

request中的方法可以应用于客户请求过来的请求行数据
话不多说,来看。
方法一. 获取请求方式
格式:String 自定义结果名 = request.getMethod();
列如:

    String methodGet = request.getMethod();

方法二.获取项目配置中的虚拟目录
注意,是获取项目配置中的虚拟目录,而不是WebServlet注解的虚拟目录

格式:String 自定义结果名 = request.getContextPath();
列如:

String inventedPath = request.getContextPath();

方法三.获取Servlet(注解)路径
这个是获取WebServlet注解所指定的虚拟路径名
格式:String 自定义结果名 = request.getServletPath();
列如:

String serverPath = request.getServletPath();

方法四.获取get请求方式的参数
注意:当请求方式为get(也就是doGet)时才会有效
格式:String 自定义结果名 = request.getQueryString();
列如:

String queryString = request.getQueryString();

方法五.获取所请求的URL
获取客户要请求的目标URL链接
格式:StringBuffer 自定义结果名 = request.getRequestURL();
列如:

StringBuffer requestUrl = request.getRequestURL();

方法六.获取所请求的URI
获取客户要请求的目标URI链接
注意,是URI,不是URL
URI和URL的区别在于,只会获取除域名外的路径
如:
请求URI为:/hexie/nihao
请求URL为:http://localhost:8080/hexie/nihao

格式:String 自定义结果名 = request.getRequestURI();
列如:

String requestUri = request.getRequestURI();

方法七. 获取协议(HTTP)及版本
格式:String 自定义结果名= request.getProtocol();
列如:

String protocol = request.getProtocol();

方法八.获取客户机的IP地址
格式:String 自定义结果名 = request.getRemoteAddr();
列如:

String remoteAddr = request.getRemoteAddr();

请求头的方法应用

获取请求头中的信息,可以应用于防盗链等等。
有两个方式,一个是单个获取,一个是返回成集合,
后者的集合只能获取头名,所以麻烦,现在用的不多。

方式一(推荐):根据请求头的名字,获取请求头的值
注意:请求头名必须全部为小写
格式:String 自定义结果名 = request.getHeader("请求头的名字");
列如:

String header = request.getHeader("user-agent");

方式二(不推荐):获取所有请求头的名字,返回成一个集合
格式:Enumeration<String> 自定义结果名 = request.getHeaderNames();
列如:

Enumeration<String> headerNames = request.getHeaderNames();//default Iterator<E> asIterator​() 返回一个Iterator ,它遍历此枚举覆盖的其余元素。//boolean hasMoreElements​() 测试此枚举是否包含更多元素。//E nextElement​() 如果此枚举对象至少有一个要提供的元素,则返回此枚举的下一个元素。

请求体的方法应用

话不多说,所谓请求体,上面也讲了,此处讲的是如何获取用户从浏览器提交的数据(如表单)等。
请求体分为两种方式,一个是获取字符流的请求体,一个是获取字节流的请求体
这都属于IO流学过的知识,我就不多说了。
只有在POST方式的情况下,才能获取请求体
方式一:以字符流获取
格式:BufferedReader 自定义字符流请求体接收名 = request.getReader();
列如:

BufferedReader reader = request.getReader();

方式二:以字节流获取
格式:ServletInputStream 自定义字节流请求体接收名 = request.getInputStream();
列如:

ServletInputStream input = request.getInputStream();

请求体的其它方法

在关于请求体的方法中,实际上不仅仅能通过字节或字符流获取请求体的内容,也能通过其它方法直接获取。

【【【注意】】】准备工作:解决中文参数值乱码

如果请求体的参数为中文会存在乱码,在Tomcat8及以后的版本中,已经将get请求方式乱码问题解决了
但post方式依然存在乱码,因此需要进行编码转换。

设置参数值编码的固定格式request.setCharacterEncoding("utf-8");

方法一:根据请求体的参数名称获取参数值
格式:String 自定义结果接收名 = request.getParameter("欲获取请求体的参数名称");
列如:

String dateResult = request.getParameter("comment");

方法二:根据请求体的参数名称获取该符合条件名称的参数值,返回一个集合
当html文件中存在多个name属性值相同的参数标识时,又想都获取时,则使用该方法

格式:String[] 自定义结果接收名 = request.getParameterValues("pass");
列如:

 String[] passes = request.getParameterValues("pass");for (String pass : passes) {System.out.println(pass);}

方法三:获取所有请求体的参数名称,返回一个集合
格式:Enumeration<String> 自定义结果接收名 = request.getParameterNames();
列如:

   Enumeration<String> parameterNames = request.getParameterNames();while (parameterNames.hasMoreElements()){String s = parameterNames.nextElement();System.out.println(s);}

方法四:获取所有请求体的参数名称和其对应的参数值,返回一个map集合
格式:Map<String, String[]> 自定义结果接收名 = request.getParameterMap();
列如:

        Map<String, String[]> parameterMap = request.getParameterMap();for (String key : parameterMap.keySet()) {String[] values = parameterMap.get(key);System.out.println("键名:"+key);for (String value : values) {System.out.println("请求体名称:"+value);}}

请求转发

概念

转发是什么不用我说了吧,当初搞nginx时就研究了转发
具体来讲,就是当你访问某个页面时,该页面把网页跳转到了其它页面,但URL链接还是不变,还是原来页面的链接。
特点:
1. 浏览器地址栏路径不发生变化
2. 只能转发到当前服务器内部资源中。
3. 转发是一次请求

创建格式一(繁琐,不推荐)


步骤一:通过request对象获取请求Dispatcher转发器对象
格式:RequestDispatcher 自定义dispatcher转发器对象名 = request.getRequestDispatcher("/被转发的虚拟路径");
列如:

RequestDispatcher dispatcherObj = request.getRequestDispatcher("/zhuanfaTwo");

步骤二:通过Dispatcher对象来进行转发
格式:自定义dispatcher转发器对象名.dispatcherObj.forward(request对象名,response对象名);
列如:

dispatcherObj.forward(request,response );

创建格式二(推荐,链式编程)

格式:request.getRequestDispatcher("/被转发的虚拟路径").forward(request对象名,response对象名);
列如:

 request.getRequestDispatcher("/zhuanfaTwo").forward(request,response);

共享数据

所谓共享数据,这是’请求转发’下的一种应用,
当’转发处页面’接收到了用户请求的信息数据了后,将其数据传递给’被转发的目标页面’.
那么此时,'被转发的页面’也可以使用’转发处页面’所获取到的用户请求数据了.
代码必须写在转发方法的前面.

创建与使用

步骤一:根据参数名,将欲获取参数值存储,并命名自定义的域对象名(在转发处页面定义)
格式:request.setAttribute("自定义存储域对象名",欲传递的任意类型的参数);
列如:

request.setAttribute("test",paramResult );

步骤二:根据’自定义存储域对象名’来接收转发处页面传递过来的参数(在被转发的目标页面定义)
格式:Object 自定义接收域对象的结果名 = request.getAttribute("欲接收的自定义域对象名");
列如:

Object test = request.getAttribute("test");

步骤三(可省略):删除存储域对象名
格式:request.removeAttribute("欲接收的自定义域对象名");

获取ServletContext

格式:ServletContext 自定义ServletContext对象名 = request.getServletContext();

BeanUtils的应用

概念

BeanUtils是一种用于封装HTTP信息的工具,它需要两个jar包,分别是
commons-beanutils-1.8.0.jarcommons-logging-1.2.jar
往常,当要对用户浏览器提交的表单(请求体)用于sql数据库的效验时,我们常常需要用到’getParameter’和用户对象的’setXXXX’方法来进行信息封装,这个过程未免过于麻烦.
而BeanUtils则简化了这一过程,能够简单地将用户浏览器提交的表单数据封装到(用户的)信息储存的对象中

但需要注意的是:由于是简化了封装过程,因此网页提交处的’name’属性值,必须同信息存储对象的成员变量名一样

BeanUtils是什么?有什么用?Apache基金提供的一个用来封装JavaBean对象的一个工具。

​ JavaBean: Java(咖啡名) Bean(豆子)

​ 就是Java语言中最基本的数据结构,用来存储数据。

​ 怎么样定义JavaBean:

​ 1、public修饰的

​ 2、必须有public的无参构造(方便创建JavaBean)

​ 3、所有的成员变量需要私有(保存数据、封装的特性)

​ 4、根据需要提供公有的get/set方法

​ BeanUtils就是一个可以帮助我们把数据填充到JavaBean的一个工具(利用了get/set)

​ 方法:

​ setProperty(Object obj, String 属性名, Object 属性值)

​ Object 属性值 = getProperty(Object obj, String 属性名)

​ populate(Object obj, Map map)

使用步骤

步骤一 导入commons-beanutils-1.8.0.jarcommons-logging-1.2.jar这两个Jay包

步骤二 以集合地形式获取其请求体的数据
格式:Map<String, String[]> 自定义结果接收名 = request.getParameterMap();
列如:

Map<String, String[]> mapResut = request.getParameterMap();

步骤三 将集合中的请求体参数数据加入到指定的信息储存对象中
格式: BeanUtils.populate(指定的信息储存对象,自定义结果接收名);
列如:

try {BeanUtils.populate(userObj,mapResut);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}

总结29 WEB服务器中HTTP的Request对象和BeanUtils之应用相关推荐

  1. http模块中创建最基本的web服务器,以及req请求对象和res相应对象

    晚上好啊小伙伴们,最近几天来温度有了很大的回升,能明显感觉到没有那么冷了,现在连刮风都是那种温柔柔的暖风,让人感觉很舒服,最近爱上了打羽毛球,每天晚上都会出去玩儿会儿,然后回去睡觉会睡得非常舒服,也同 ...

  2. ESP32-CAM 在 Web 服务器中拍照和显示

    ESP32-CAM 在 Web 服务器中拍照和显示 项目简介 所需部件 项目概况 安装 ESP32 附加组件 安装库 安装 ESPAsyncWebServer 库 安装 ESP32 的异步 TCP 库 ...

  3. 随笔:web服务器中建立一个小的个人站点

    1.侃侃而谈:在web服务器中,一般我们会使用http协议,http协议基于80端口,它属于明文协议,所以会带来安全隐患.所以当我们访问一些交易网站的时侯,会使用https协议,这是一个加密协议,它会 ...

  4. web服务器中启用作业储存_如何在Kubernetes中启用无服务器计算

    web服务器中启用作业储存 在本系列的前两篇文章中,介绍了在开放源代码平台上使用无服务器平台的过程,我介绍了如何开始使用无服务器平台,以及如何使用流行的语言编写函数以及如何在Apache OpenWh ...

  5. web服务器没有对应站点,原因:您的请求在Web服务器中没有找到对应的站点的解决方法...

    宝塔主机面板网站提示您的请求在Web服务器中没有找到对应的站点的解决方法的原因分析及解决方法,环境吧分享BT宝塔面板没有找到站点的原因及解决方法: 宝塔面板报错提示:没有找到站点 宝塔面板没有找到站点 ...

  6. 您的请求在web服务器中没有找到对应的站点

    问题情况,站点正常,但是时不时会找不到站点 出现这个错误提示的基本都是使用的lamp环境,Apache的web服务. 这个提示是说您访问的域名,在这台服务器上没有找到对应的站点,其实就是配置文件没有正 ...

  7. Java Web - 服务器中的过滤器和监听器

    一 过滤器 每个servlet都有自己需要处理的资源,这么多的资源我们有时候我们希望统一的进行管理,比如对响应的图片进行加水印处理,对提交和响应的数据的编码进行统一,或者是对提交的数据进行过滤. 解决 ...

  8. php浏览服务器某一文件夹内容,php删除web服务器中指定目录下的指定格式的文件...

    今天还在写VipSystem Pro的授权部分,用户授权后,生成匹配该用户的唯一的php文件集合(在一个目录下),然后进行zip下所并弹出下载. 这个临时生成的zip文件存放在我指定的一个目录.每个用 ...

  9. c#启动mysql数据库服务器_c# - 使用C#应用程序连接Web服务器中的mysql数据库

    我在同一台Web服务器上有一个PHP网站和MySQL数据库.我想使用C#应用程序连接到MySQL数据库.我的C#应用​​程序在运行另一台计算机. 如何连接该MySQL数据库? 最佳答案 首先,请确保您 ...

最新文章

  1. 双显卡单独分辨率_CPU、GPU双重碾压!AMD RX 6000系列显卡正式发布 16G显存吊锤RTX 30...
  2. easyui前端实现多选框_前端:Element UI 多选框组用法笔记
  3. 首个使用Blazor 技术实现的社区软件 BlazorCommunity 发布
  4. 奇妙的安全旅行之国密算法
  5. java游戏循环 限定次数的游戏
  6. sqlserver存储过程加锁后怎么解锁_MySQL 的加锁处理,你都了解的一清二楚了吗?...
  7. 软件开发知识体系(一)
  8. monkey4444勒索病毒解密方法方案成功处理复旦安全实验室
  9. 开闭原则应用-书店打折Java代码实现
  10. 打卡赠书,新一年的读者福利 !
  11. javascript手册安卓版_javascript手册
  12. SEO流量工具-免费SEO流量排名优化工具
  13. 2021字节秋招算法岗面经——抖音推荐
  14. html在线表格样式模板,纯css实现的table表格样式,教程站常用
  15. MySQL 数据库安全管理
  16. 英方云灾备软件 V5.6.9949 32位官方版
  17. springboot项目启动遇到问题:AopAutoConfiguration matched: - @ConditionalOnProperty (spring.aop.auto=true)
  18. 斗鱼扩展--移除广告优化页面(五)
  19. ant pro-table点击表格行高亮显示
  20. Java播放语音包 亲测

热门文章

  1. KubeMeet 新年首站成都开放报名,5 场云原生应用交付开源实践
  2. matlab软件与科学计算,MATLAB与科学计算教程
  3. OVF-开放虚拟机格式文件
  4. 转载 java开发基础 https://blog.csdn.net/jiangjiewudi/article/details/9565749
  5. 微信公众号接入科大讯飞AI
  6. Python程序员烂大街了?真实的就业是?
  7. 【黑马教育】c++指针专题,内容和视频校验过的
  8. 30万奖池等你来战!自然语言处理(NLP)赛事合集来啦
  9. 用Hostapd创建可用的软AP
  10. 空调控制系统节点服务器,汽车空调远程控制系统、方法及服务器