jsp和html5的区别,【前端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,就是在编译前把对应的变量替换掉了。

我们这里的sql预编译,PreparedStatement不是将参数简单拼凑成sql,而是做了一些预处理,将参数转换为String,两端加单引号,将参数内的一些特殊字符(换行,单双引号,斜杠等)做转义处理,这样就很大限度的避免了sql注入。

Statement:${}

如 对于查询语句:select * from user where name='+ name +'

输入:张三' or 1 = '1

Statement,单纯拼接,不防止注入:select * from user where name = '张三' or 1 = '1'

PreparedStatement:#{}

对于查询语句:select * from user where name=?

PreparedStatement,预编译sql,对参数进行转义,防止注入,select * from user where name = '张三' or 1 = '1'

这样可以防止注入,导致我们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中的点方法

@{}

在Thymeleaf中又引入了一个新的表达式符号@{},@{}代表获取上下文,也可以理解为获取当前项目的根目录。

Jsp 的老方法${pageContext.request.contextPath} = Thymeleaf 的新方式 @{}

如下实例

老式jsp:

@H_404_95@

图片

新的thymeleaf:

@H_404_95@

图片

{{}}

在vue中又引入了一个新的表达式符号{{}},{{}}用于输出对象属性和函数返回值,与${}用法类似,只不过{{}}是用于输出vue对象的属性和返回值

@H_404_95@var vm = new Vue({

/* el:用于绑定属性的元素 */

el:"#app",//

//data 用于定义属性,

data:{

msg:"hello world!!",age: 30,firstName : "liu234",lastName : "luw3111i",fullName : "luwei 6"

},/* 用于定义的函数,可以通过 return 来返回函数值。*/

methods : {

getFullName : function(){

//this指vm实例

return this.firstName + "" + this.lastName

}

}

})

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值