1. EL表达式
${...}是EL表达式(Expression Language),使得.jsp页面可以不含java代码,通常表示你从另外一个页面传过来的参数的值。
例如:${sessionScope.username} 取出Session范围的 username 变量。这种写法是不是比之前 JSP 的写法:
String username = (String) session.getAttribute("username"); 简洁许多?
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。(4种作用域:https://blog.csdn.net/a327736051/article/details/49382857)
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,在页面优化显示空白。
2. 使用方法
例如:在.java文件中我们要取得session中储存的一个属性username的值,可以利用下列方法:
session.getAttribute("username") ;
在.jsp的EL表达式中则使用下列方法:
${sessionScope.username}
3. 举例
${....}会从page,request,session,application中取相应名称的变量值。比如:${name}就从以上4个对象中去获得名为name的值。如果是在转发到这个页面之前,在request中setAttribute(“name”,“王小明”),那么${name} 就会被"王小明"这个值给替换。
request.setAttribute(String s,object o);
在Spring 中,所有逻辑处理单元返回的结果数据,都将作为 Attribute 被放置到 HttpServletRequest 对象中返回(具体实现可参见Spring 源码中org.springframework.web.servlet.view.InternalResourceView.exposeModelAsRequestAttributes方法的实现代码),也就是说SpringMVC 中,结果数据对象默认都是requestScope。
4. param和paramValues
在取得用户参数时通常使用以下方法:
request.getParameter(String name)
request.getParameterValues(String name)
在 EL中则可以使用param和paramValues两者来取得数据:
${param.name}
${paramValues.name}
这里 param 的功能和 request.getParameter(String name) 相同,而 paramValues 和 request.getParameterValues(String name) 相同。如果用户填了一个表格,表格名称为username,则我们就可以使用${param.username}来取得用户填入的值。
看到这里,大家应该明确了EL表达式只能通过内置对象取值,也就是只读操作,如果想进行写操作的话就让后台代码去完成,毕竟EL表达式仅仅是视图上的输出标签罢了。
参考博文:https://blog.csdn.net/JavaNotes/article/details/80722153