当前位置: 首页 > news >正文

06-ServletRequest

ServletRequest

简介

先看一下官方对ServletRequest的描述

public interface ServletRequest
Defines an object to provide client request information to a servlet. The servlet container creates a ServletRequest object and passes it as an argument to the servlet’s service method.

A ServletRequest object provides data including parameter name and values, attributes, and an input stream. Interfaces that extend ServletRequest can provide additional protocol-specific data (for example, HTTP data is provided by HttpServletRequest.

它的功能是将客户端的请求信息提供给servlet,servlet容器会创建一个ServletRequest对象,并会将其作为一个参数传给servlet的service方法。

ServletRequest对象是在用户发送一个请求时创建的,并在下一个请求到来时销毁,也就是说一个请求对应一个ServletRequest对象。

获取GET和POST请求的信息

Map<String, String[]> getParameterMap();
String getParameter(String name);
Enumeration<String> getParameterNames();
String[] getParameterValues​(String name);

这四个方法的作用主要是获得客户端发送过来的参数和对应的值,由于每个参数可能对应多个值,所以Map的key是个String,而value是个String数组。
在这里插入图片描述
在前端页面中编写一个form表单

<form action="/http/test" method="get">
    <label for="username"> username:</label>
    <input type="text" name="username" id="username">
    <label for="passwd"> password:</label>
    <input type="password" name="passwd" id="passwd">
   hobby<br>
    guitar<input type="checkbox" name="hobby" value="guitar"><br>
    piano<input type="checkbox" name="hobby" value="piano"><br>
    keyboard <input type="checkbox" name="hobby" value="keyboard"><br>
    <button type="submit">提交</button>
</form>

无论是get还是post,它发送请求参数以及相关信息都会被封装到ServletRequest对象中,我们可以很方便的通过上面的接口拿到信息。

利用请求域缓存区

setAttribute(String, Object)
getAttribute(String)
removeAttribute(String)

这三个接口功能类似于ServletContext的,只不过这是在请求域中设置属性,它的生命周期是一次请求的过程。

在一个service访问其它资源

public class A extends GenericServlet {
    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        req.setAttribute("from_a", "aaaa");
        req.getRequestDispatcher("/b").forward(req, res);
    }
}
public class B extends GenericServlet{
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        PrintWriter writer = res.getWriter();
        Object from_a = req.getAttribute("from_a");
        writer.write(from_a.toString());
    }
}


首先往A的请求域中添加一个字段,下面调用getRequestDispatcher可以获得一个服务派发者对象,这里是派发到/b对应的服务中,然后调用forward方法传入req,res,这样两个服务共享一个ServletRequest对象。这也是从一个服务跳转到另一个服务的方式。

String	getRemoteAddr()	
Returns the Internet Protocol (IP) of the remote end of the connection on which the request was received.
String	getRemoteHost()	
Returns the fully qualified name of the address returned by getRemoteAddr().
int	getRemotePort()

ServletRequest还有一些其它的方法,比如获得客户端的地址,主机名和端口等

相关文章:

  • Spring Cloud Alibaba系列之nacos:(4)配置管理
  • 一篇五分生信临床模型预测文章代码复现——Figure 3. 基因富集分析(二)
  • 深度学习——day34 读论文:深度 ReLU 网络在特征提取和泛化中的深度选择(2022 Q1)
  • STM32G474产生一个锯齿波
  • 蓝队视角下的防御体系怎样进行突破
  • 排序算法 | 快排、冒泡、堆排、归并、基数、递归、希尔、计数
  • [平台运维、Hadoop]kafka streams概述
  • 【祝福伟大的祖国】Java Web 9.2 Request 对象 9.2.5 请求参数中文乱码问题
  • 《When you are old》一如苇中的风,轻柔却难忘
  • JavaFX实战:模拟电子琴弹奏效果,鼠标弹奏一曲piano送给大家
  • 基于VC++和AT89C52单片机的数字存储示波器设计
  • labview与stm32通信
  • OpenHarmony适配移植:X86、ARM、RISC-V、MIPS、LoongArch芯片架构简析
  • DBeaver manual
  • 图解redis(三)——功能篇
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CentOS7 安装JDK
  • Idea+maven+scala构建包并在spark on yarn 运行
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • k8s 面向应用开发者的基础命令
  • php ci框架整合银盛支付
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python3 使用 asyncio 代替线程
  • Shell编程
  • Solarized Scheme
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 基于组件的设计工作流与界面抽象
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 数组的操作
  • 小程序01:wepy框架整合iview webapp UI
  • 用quicker-worker.js轻松跑一个大数据遍历
  • Nginx实现动静分离
  • ​ArcGIS Pro 如何批量删除字段
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​学习一下,什么是预包装食品?​
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $NOIp2018$劝退记
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (zt)最盛行的警世狂言(爆笑)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)RocketMQ初步认识
  • (正则)提取页面里的img标签
  • .md即markdown文件的基本常用编写语法
  • .net core开源商城系统源码,支持可视化布局小程序
  • .Net MVC + EF搭建学生管理系统
  • .NET 发展历程
  • .NET 事件模型教程(二)
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NetCore 如何动态路由
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?