EL表达式和<%=%>有什么区别?

前言:

在做filter过滤的时候,想把request收集到的表单数据,其中key为"uname"的非法文字 'md' 转换成"**"这个字符串,于是在判断key为"uname"之后,用**来覆盖它的value值,结果发生了问题!

if("md".equals(text[0])){

    httpServletRequest.setAttribute("uname","**");
    System.out.println(httpServletRequest.getAttribute("uname"));
}

问题:

在跳转到结果页面的时候

用<%= uname %>拿到的还是'md'

用${requestScope.uname}拿到的却是新覆盖的'**'

<h1>输入内容为:<%= name%></h1>
<h1>输入内容为:${requestScope.uname}</h1>

原因:

分析:通过下面JSP运行的结构图,可以发现,当我们访问hello.jsp时,jsp引擎会预处理生成对应的hello_jsp.java,之后编译成hellow_jsp.class,编译过程中服务器会对原生的java代码进行解析和执行(也就是完成了<%=%>),之后在Servlet实例化成对象。在之后的运行的过程,才会被Filter过滤,等到处理完成返回视图层渲染时,EL表达式才会起作用,然而此时request中key为'md'的对应值'**'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值