EL表达式获取参数的值并输出的问题

EL表达式获取参数的值并输出的问题

http://img1.sycdn.imooc.com//climg/5c459bc3000164cc06820321.jpg

http://img1.sycdn.imooc.com//climg/5c459c0a0001590004560087.jpghttp://img1.sycdn.imooc.com//climg/5c459c280001ecff10620549.jpghttp://img1.sycdn.imooc.com//climg/5c459c4d00018de312750605.jpg

如图所示,在这里我们有两对level参数,他们是怎么对应的?理论上Parma应该是写到浏览器中的才对,可是浏览器中写level对??

正在回答

登陆购买课程后可参与讨论,去登陆

6回答

http://img1.sycdn.imooc.com//climg/5c469a270001f38a09600342.jpg

如果想要在最右边的JSP页面中获取param1的值。那么必须把param1放进request属性中

http://img1.sycdn.imooc.com//climg/5c469ae00001f71f09170325.jpg


这个跟变量作用范围有关。

  • 有点麋鹿 提问者 #1
    非常感谢,我把变量当作参数来输出了,此处的参数只有param2,param1是一个变量。我把这两个搞混了,我用${param.param1}输出了一个servlet内的变量。此处应该是${param.param2}对吗?用${param.param1}输出是没有意义的。
    2019-01-22 13:03:49
  • 有点麋鹿 提问者 #2
    非常感谢 是我把参数和变量搞混淆了。。
    2019-01-22 13:07:39
持续学习 2019-01-21 23:37:13

param1=getParamter("param2");//获取表单参数,把param2的值赋值给

param1 ${requestScope.param.param1}//输出param1的值 

这是两段代码,第一段代码值的来源是表单,可以在浏览器通过?

param2=test可以赋值,第二段代码值得来源是request可以在浏览器通过param1=test赋值,然而param1和param2不是同一个东西,理论上可以通过?param2=test来赋值,实际却不行,但是如果不用EL表达式输出参数的值却可以。。

在这里param1在servlet里面直接输出,通过改变param2的值来改变param1的值,

但是在EL表达式中输出却不行,需要通过改变param1自身的值来改变,否则为空!!

这是为什么??请求转发的方式不会将参数丢失,却无法使用param2来传值。



1、第一段代码你是要写在哪里?写在Servlet还是写在JSP里?浏览器通过是什么意思?是指浏览器是否解析这段代码?还是指浏览器能否获得param2的值?还是指其他的意思?但是单从第一段代码的含义来说,如果放在JSP里,你没指定作用域,无法执行。如果放在Servlet里,你没指定对象,也无法执行,即便你指定了一个request对象来执行getParamter方法。那也只是代表在Servlet类中得到一个param1变量(值是param2对应的值)的意思,那浏览器通过又搞不懂是什么意思了。


2、你的表述依然不清晰,你想说的是不是通过在URL地址分别里添加“?param1=test”和“?param2=test”,提交到Servlet,再从Servlet转发到JSP页面。此时如果是用“?param1=test”,JSP页面可以显示param1的值。如果使用的是“?param2=test”,就无法显示结果“test”。是这个意思吗?如果是这个意思的话你要把你每个文件的代码贴出来才能进一步分析。


3、有好几个地方描述的模糊,从你说的内容来看,确定的地方是

通过URL添加参数“?param1=test”和“?param2=test”

那么可以重点描述一下这个问题中,param1和param2你是用什么方式把他们进行关联?在页面转换的过程中,param1和param2是怎么传递的(通过哪些语句)?


4、我又查了一查,param是jsp中的内置对象,如果在“Servlet中request.setAttribute("param",level)”,这样传递到JSP页面中是无法获取“level”这个值的。


  • 提问者 有点麋鹿 #1
    你的第四点为什么无法获取 ?第一段代码在servlet里面(看截图),第二段代码在JSP里面(看截图) , 还有不是浏览器通过 ,是 : 在浏览器通过(改写url的方法)注意断句,后面两张截图是在URL里面操作的两次结果。。。并没有 request.setAttribute("param",level)”这段代码。。第一段代码直接获取URL里写下的参数,不需要setAttribute("param",level)”,因为第一段代码获取的是表单数据,懂了吗?第二段代码获取的是第一段代码的数据。现在是想问为什么无法通过改变表单数据的值来给第二段代码赋值,必须是直接给第一段代码直接赋值,明明是将表单数据赋值给第一段代码,然后第二段代码获取并输入,懂了吗?这样都没法理解就算了。。
    2019-01-22 08:38:46
  • 持续学习 回复 提问者 有点麋鹿 #2
    你的第一条语句是servlet获取jsp通过表单传递过来的值,并赋值给param1。然后你并没有把param1进行传递比出去,或者说是你没有把param1传递给JSP页面,所以在JSP页面无法获取param1这个属性名称的值,因为根本就不存在param1,这个param1只在servlet中存在。而因为请求转发并不会丢掉param2这个属性,所以可以在JSP页面获取param2这个值。我第一条回答就说了这个问题的原因了,如果依然不是这个问题,那你等老师来解答吧~
    2019-01-22 10:36:28
  • 提问者 有点麋鹿 回复 持续学习 #3
    首先我在新的JSP页面中用${param.param1}方法,就说明我要输出servlet里面的param1的值,而servlet里面param1的值是旧的JSP表单中param2传递过来的,这里是得到传递的,这里是两个JSP,第一个JSP给servlet里面传值,第二个JSP输出servlet里面的param1,这样是得到传递的!!!! 其次,在新的JSP页面中输出sevlet里面param1的值,是直接输出param1,无法通过param2来改变,所以在新的JSP页面是获取不到param2的值的,但是理论却是可以的。我在传递表单参数的时候是直接通过改写URL来完成测试的,所以旧的JSP是不存在的。在改变param2的情况下,新JSP页面无法输出改变的值,这也是我要想问的。只有直接改变param1的情况下才能输出。这样就存在数据传递的丢失。可是这是为什么?
    2019-01-22 11:31:49
持续学习 2019-01-21 21:03:44

更正一下,按照你的代码写的话,添加下面的语句

request.setAttribute("param",level);

然后在前端直接使用${param}就行。不需要加.level


  • 提问者 有点麋鹿 #1
    这是设置属性给request,我问的问题不是这个,我问的问题是通过EL表达式获取参数的值并输出,他输出的值是level还是Param?理论上应该是param,但事实确是level,懂了吗?这是我的问题,不是让你设置属性,我是想知道底层原理!!
    2019-01-21 21:19:43
  • 持续学习 回复 提问者 有点麋鹿 #2
    感觉你把el表达式和值传递弄混了。我是没理解你到底是在问啥- -"通过EL表达式获取参数的值并输出,他输出的值是level还是Param",你的值在哪里呢?是通过什么方式传递给JSP页面的呢?
    2019-01-21 21:47:29
  • 如果是直接在JSP获取get请求中的参数,get请求参数会被放置到隐含对象param中。${param.param1 }就得到127.0.0.1/index.jsp?param1=test1的值test1
    2019-01-21 22:03:20
持续学习 2019-01-21 21:01:32

两边写的都是对的,但是你只在Servlet中获取了Level的值,传递给String类型的变量Level,然后并没有对Level变量进行处理啊~~你再传回去就好了。在转发之前加上这一句:

request.setAttribute("param",level);


提问者 有点麋鹿 2019-01-21 18:38:12

可是我在浏览器写param的时候为空值,如果不用JSP的EL表达式输出,用servlet来输出的话,这里应该是输入param,这是为什么??

提问者 有点麋鹿 2019-01-21 18:22:43

在这里这两个值是否写那个都是对的??

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师