request.getParameter()和request.getAttribute()比较

『政善治』Postman工具 — 4、HTTP请求基础组成部分 文章目录(1)Method(2)URL(3)Headers(4)body 一般来说,所有的HTTP Request都有最基础的4个部分组成:URL、 Method、 Headers和body。 (1)Method 要选择Request的Method是很简单的,Postman支持所有的请求方式。 (2)URL 要组装一条Request(请求), URL永远是你首先要填的内容。在Postman里面,你曾输入过的URL是可以通过下拉自动补全。 以Get请求为例: 如果你点击Params标签,Postman会展示 阅读详情

getParameter与getAttribute相同点

  1. 都是HttpServletRequest类中的方法
  2. 都是用来传递数据用的

getParameter与getAttribute不同点

  1. getParameter():
    1.1. 响应的是两个web组件之间为==链接(重定向)==关系时,类似get,post等方式传入的数据。
    1.2. 此种方法从Web客户端传到Web服务器端,代表HTTP请求数据。
    1.3. 返回String类型的数据。
    1.4. 只有get方法没有set方法。

  2. getAttribute():
    2.1. 响应的是两个web组件之间为转发关系时传入的数据。
    2.2. 服务端的转发源通过setAttribute()设置传递的参数,然后转发目的通过getAttribute()获取传递的参数,这样转发时数据就不会丢失,此种方法只是在web容器内部流转,也就是说必须在同一个request对象中使用才有效。
    2.3. 返回Object类型的数据。
    2.4. 既有get方法也有set方法。

举例说明

getParameter()

后端控制器内有一个接口/test/param-request,debug模式下启动项目

    @RequestMapping(value = "/param-request", method = RequestMethod.GET)
    public void paramRequest(HttpServletRequest request, HttpServletResponse response) {
        // id=123
        String id = request.getParameter("id");
        // values=a&values=b
        String[] parameterValues = request.getParameterValues("values");
        Map<String, String[]> parameterMap = request.getParameterMap();
        Enumeration<String> parameterNames = request.getParameterNames();

        Object name = request.getAttribute("name");
        Enumeration<String> attributeNames = request.getAttributeNames();

        System.out.println("param-request");
    }

通过postman对其发送请求
param-request
通过下图所示可以看到,id等参数已经通过getParameter()拿到了,而getAttribute()并没有拿到name参数。
param-request-result

getAttribute()

后端控制器内有一个接口/test/attr-request,debug模式下启动项目

    @RequestMapping(value = "/attr-request", method = RequestMethod.GET)
    public void attrRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("name", "小刚");
        request.getRequestDispatcher("/test/param-request").forward(request, response);

        System.out.println("attr-request");
    }

通过postman对其发送请求
attr-request
通过下图所示可以看到,attr-request接口内通过setAttribute()放入了一对属性,然后将请求转发给了param-request,getAttribute()可以拿到name参数。
attr-request-result

小插曲

在写接口对这两个方法进行测试的时候,发现一个奇怪的现象,在请求接口的时候发现返回的数据是404错误。

{
    "timestamp": "2020-06-25T05:12:50.661+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/test/param-request"
}

一开始以为是自己的请求地址写错了,经过检查后发现,请求地址是正确的,而且实际上接口已经成功请求到了,只是前端返回的数据是404错误。
查看了几篇博客后,给出的答案大多就是 @Controller 和 @RestController 导致的(具体可以看这篇博客https://blog.youkuaiyun.com/tanzhen1991910/article/details/82078206):

  1. @Controller 是视图解析器的,即Return返回的是视图,即jsp或者html页面的。spring对返回值映射时找不到对应的视图,所以会返回404错误。
  2. 如果返回数据json、xml等,需要在对应的方法上加上@ResponseBody注解,而@RestController则是@Controller和@ResponseBody两个注解的结合。

解决办法:

  1. 如果返回的是视图,即html、jsp等,使用@Controller即可,如果返回的是数据,即xml、json等,@Controller与@ResponseBody结合使用或者使用@RestController。
  2. 如果像我本次示例中这样,不想返回任何值,使用@Controller即可,但是参数值需要加上HttpServletResponse。

虽然问题解决了,但是对于为什么会出现这种问题的原因,网上给出的答案并不深入,我自己也没有做过多的了解,希望以后有机会了解源码的时候可以找出造成这个问题更深一步的原因。

小结

曾经刚接触javaWeb开发,使用servlet以及jsp的时候,倒是经常使用getParameter()以及getAttribute()方法,但是并没有过多的考虑过它俩之间的不同,如今,习惯了在框架下编码,反而对这两个方法越来越陌生了,在此将其记录下来,以便日后进行回顾温习!

JSP简答题 1. 概述MVC体系结构,各个部分都有那些技术来实现?    MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。     MVC模式的目的就是实现Web系统的职能分工。     Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。     View层用于与用户的交互,通常用JSP来实现。     Controlle 阅读详情

相关推荐

最新,弱小目标检测数据集,持续更新中。

梳理了最新的下弱小目标检测数据库,方便后续开发使用

weixin_43331421的博客 4092

request.getParameter()与request.getAttribute()

首先说明:HttpServletRequest类有getParameter(),getAttribute(),setAttribute()等方法,没有setParameter()方法。 1,.request的setAttribute与getAttribute方法一般都是成对出现的,setAttribute方法设置属性与属性值,getAttribute获取属性值,。 request.setAttribute() 和 getAttribute() 方法传递的数据只会存在于Web容器内部,客户端不知道服务器端

qq_45975380的博客 3155

如何用Lmcache+vllm优化KVcache存储?CPU与SSD性能实测对比

本文通过实测对比,详细介绍了如何利用Lmcache+vLLM将大模型推理中的KV Cache卸载至CPU内存或SSD硬盘,以解决长上下文场景下的GPU显存瓶颈。测试数据显示,CPU卸载方案在首字延迟(TTFT)上显著优于SSD方案,但SSD方案在存储成本上更具优势。文章提供了完整的配置指南、性能数据分析和生产环境选型建议。

fire9的博客 984

getAttribute、getParameter、getParameterMap、getParameterValues等request中获取参数的几种方式

getAttribute、getParameter、getParameterMap、getParameterValues等方法都是在web项目中用于获取request中参数对象的方法,下边简单介绍了各方法的特性及使用场景。

m0_59555392的博客 8710

用SPSS做信效度分析

对问卷进行Cronbach’s Alpha信度检验。如果此值高于0.8,则说明信度高;如果此值介于0.7-0.8之间,则说明信度较好;如果此值介于0.6~0.7,则说明信度可接受;如果此值小于0.6,说明信度不佳。下面利用SPSS进行分析,点击分析–标度–可靠性分析选项,选中所要分析的问卷数据或题目。得到结果,我们要看这个有用的结果,当克隆巴赫Alpha系数(也可以看标准化后的)大于0.8时候,说明问卷信度较高。

小高~的博客 1万+

【QGIS】PyCharm集成pyqgis的processing工具箱:环境配置与初始化实战

本文详细介绍了如何在PyCharm中配置QGIS的Python环境并成功集成其强大的Processing工具箱。文章核心解决了独立环境下导入processing模块失败、算法无法调用等常见难题,通过手动添加插件路径和执行关键初始化步骤,实现了在PyCharm中丝滑调用QGIS地理处理算法,从而将复杂的空间分析流程自动化。

weixin_28831399的博客 390

Web中Servlet ,request.getAttribute()和request.getParameter()的原理和区别和用法

request.getAttribute():是request时设置的变量的值, 用request.setAttribute(“name”,“您自己的值”);来设置值, request.getParameter(): 用来提取客户端传过来的参数信息 request.getParameter是用来接受来自get方法或post方法的参数 ok 只能接受java.lang.String 也就是说String hotel_id = request.getParameter("hotel_id"); reques

weixin_49920318的博客 4194

SFT看这一篇就够了!万字长文:监督微调(Supervised Fine-Tuning, SFT)技术全解析【从理论到实战】

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。欢迎关注,一起探索技术的无限可能!

大F子的智能小课 711

request属性 request.getAttribute()

一、request.getParameter() 和request.getAttribute() 区别 (1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。 (2)request.getParameter()方...

weixin_30437847的博客 4199

Google Earth Engine(GEE)—— 显示如何使用迁移的训练样本进行多年分类的脚本(sentinel-2影像为例)光谱差异()

HydroSHEDS 是一种地图产品,它以一致的格式为区域和全球范围的应用程序提供水文信息。它提供了一套不同比例的地理参考数据集(矢量和栅格),包括河流网络、流域边界、排水方向和流量累积。请注意,对于北纬 60 度以上的地区,HydroSHEDS 数据的质量明显较低,因为没有可用的基础 SRTM 高程数据,因此分辨率较低的 DEM(USGS 提供的 HYDRO1k)。该数据集基于 15 角秒(赤道约 500 米)分辨率栅格数据提供嵌套的分层分水岭多边形。光谱信息和之前不同的点:训练结果。

此星光明博客 966

GaussDB本地安装手册(主备模式)

如果实例状态是Normal,则安装成功。三节点集中式配置文件。

Sebastien23的博客 2633

request.getParameter()与request.getSession().getAttribute类型比较

以下内容作为个人学习记录,如果给原作者造成不便,请私信,会立即删除。 区别: getParameter是获取表单提交的数据,或者post和get拼接提交的。获得的类型是String类型的。 request.getSession().getAttribute是获取session中的数据,和session.setAttribute搭配使用。获取的是Object类型。 举例: 比如验证码,生成的存在session中,输入表单提交的通过getParameter获取,然后二者再进行比较。或者其他数据的比较: ..

gyl1050097468的博客 4999

AEJoy —— 表达式之仅限在某一维摆动【JS】

效果图 wiggle() 的作用仅限于水平方向 想法 wiggle() 确实是一个非常方便的工具,但有时您希望对它有更多的控制。在本例中,我们希望仅将摆动限制在水平方向。 设计 要理解 wiggle() 最重要的一点是,它生成的结果与应用它的属性具有相同的维度。例如,如果你将 wiggle() 应用于 3D 层的 position 属性,结果将是一个由三个元素组成的数组(x、y 和 z 各一个)。我们需要做的就是将 wiggle() 的结果捕捉到一个变量(我们称之为 “w” ),然后从这个变量中提取我们想

ShaderJoy 的兴趣技术杂货铺 2094

request.getParameter()与session.getAttribute()类型比较

作为一个Java EE初学者,在给网站添加验证码时,遇到了一个问题,经过几番尝试发现了其中的缘由。 1、问题的提出        编程中验证码类产生的随机数我将其事先存在Session中,接下来在另一个页面中按照验证码图片提示输入验证码中的数字、字母组合。这样以来在登录检验的时候,request.getParameter()与session.getAttribute()中的内容就要做比较。

sunzhenhua0608的专栏 5461

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

request.getParameter() 和request.getAttribute() 区别

一、request.getParameter() 和request.getAttribute() 区别 (1)request.getParameter()取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。 (2)request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter

weixin_44250725的博客 1743

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java基础概念:request属性

request属性 request.getAttribute()

GooO_O的博客 1345

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

了解JSP中request属性的用法(request.getParameter() 和request.getAttribute() 区别)

http://developer.51cto.com/art/200906/132743.htm 本文介绍JSP中request属性的用法,以及request.getParameter() 和request.getAttribute() 区别。 一、request.getParameter() 和request.getAttribute() 区别 1.reques

crazy_fire 4219

Servlet和jsp的区别

Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init(),service()和destroy方法表达。Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。web容器加载servlet,生命周期开始。

qq_63431773的博客 130

关于jsp语法的小tip

在JSP中 声明表达式  中 定义的是全局变量。 在jsp脚本段中 声明的变量是局部变量。 servlet是单例的。所以通过声明表达式定义的变量只有一份,会被用户客户端共享到。 ****************** 在使用jsp的  的这条包含其他页面的语句时; 不能在被包含页面中含有 :     String path = request.getCo

u013803262的专栏 1008

Java Web面试题

什么是Servlet? 作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器的上的数据库或应用程序之间的中间层;使用Servlet可以手机来自网页表单的用户输入,可以动态的创建网页。 Servlet的生命周期 加载-----实例化-------初始化--------处理请求------服务结束 GET和POST请求的区别? ① GET请求的数据量较小,不能大于2KB,POST传递的数据量比较大,一般默认为不受限制。 ② GET是不安全的,在传输数据过程中,数据被存放在URL..

qq_45065902的博客 190

每日十个面试题--(java基础篇)-(51-60)

51、说一说Servlet的生命周期? Servlet有良好的生存期的定义,包括【加载】和【实例化】、【初始化】、【处理请求】以及【服务结束】。这个生存期由 javax.servlet.Servlet接口的init(),service()和destroy方法表达。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 web容

lyh1023812的博客 143

request.getparameter和 request.getattribute的区别

request.getAttribute():是request时设置的变量的值,用request.setAttribute("name","您自己的值");来设置值, request.getParameter():提取发送过来的参数如:本网页 request.getParameter 是用来接受来自get方法或post方法的参数 ok 只能接受java.lang.String

java人生 2312

Request的getParameter()和getAttribute()方法的区别

1, request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。    - request.getParameter()取得是通过容器的实

lxjames833539的专栏 642

Request的getParameter和getAttribute方法的区别

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34138056的博客 113
上一篇: Centos7下安装Kubernetes(k8s)
下一篇: Centos环境下离线安装postgreSQL数据库
thisIsDennis
博客等级 码龄8年 17粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值