我对java的EL解析器充满了好奇,目标是让一个.jsp在一行中执行java代码
这是密码:
.....
String input1 = request.getParameter("ce");
ELProcessor elp = new ELProcessor();
Object sys = elp.eval(input1);
Encoder enc = Base64.getEncoder();
String fromobj = String.valueOf(sys);
out.println(fromobj);
.....
如果我在输入中提供一些简单的东西,就可以正常工作,比如:System.getProperty('user.name')
如果我在输入中提供更复杂的东西,比如:系统当前时间毫秒();System.getProperty('user.name'),只执行最后一个(System.getProperty('user.name'))..为什么?
我该如何纠正这种行为?
1条答案
按热度按时间jljoyd4f1#
你期望发生什么?从评估中只能有1个返回值,最后一条语句正好做到了这一点。
记住EL是一种表达式语言。而不是语句语言。它们之间有真实的的区别。语句就像完整的句子。它们由1个或多个表达式组成,后面跟着一些存储结果的地方(即类似于赋值)表达式产生一个值,但不是完整的。它们没有赋值。第一个表达式
System.currentTimeMillis()
可能被执行,但是因为没有任何东西可以存储它(即没有赋值),所以你不能真正确定它是否运行。EL是用于返回值的单行表达式。我甚至不确定多个表达式是否有效,或者如果它不能在某个地方存储返回值,它是否真的有效。如果你将两个结果都存储到List中并返回List,那么它可能会显示两个值,但EL不是Java。它不是通用的编程语言。