【JSP思考】JSP中#{},${}和%{}的区别

JSP中#{},${}%{}的区别:

#{}

#{}:对语句进行预编译,此语句解析的是占位符?,可以防止SQL注入, 比如打印出来的语句 select * from table where id=?,预编译之后会变成select * from table where id = "1 or 1 = 1"。给注入信息加上了引号,替换掉了,所以可以防止注入。

类比:Java中的PreparedStatement
预编译:预编译是做些代码文本的替换工作。是整个编译过程的最先做的工作。

例如,C语言的宏定义#define pi 3.14,就是把对应的变量单纯的替换掉了。
我们这里的Java预编译,也就是把字符串本应该去掉的双引号(""),给原封不动得带上,单纯的替换掉了,不改变双引号。
比如,第一个占位符设置的是"Nemo",那这个占位符就原封不动得把"Nemo"(带上双引号) 给单纯的替换掉。这样可以防止注入,导致我们sql语句的结构被改变。

${}

${}:则是不能防止SQL注入打印出来的语句 select * from table where id=2 实实在在的参数拼接而成,可能会被注入select * from table where id = 1 or 1 = 1

类比:Java中的Statement

%{}

%{}:用在ognl表达式中是保证'{' 和 '}'之间的内容是OGNL表达式取值方式的

ognl表达式 即 对象导航图语言,用点来代替getset方法的调用,如配置文件properties中的. 。
如setName 我们可以使用.name
相当于oc中的点方法

原文地址:https://www.cnblogs.com/blknemo/p/13764713.html