ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# EL表达式 EL能够极大的简化我们的开发 EL 全名为 Expression Language,它原本是 JSTL 1.0 为方便存取数据所自定义的语言。当时 EL只能在JSTL标签中使用。到了JSP2.0 之后,EL已经正式纳入成为标准规范之一。 ## 语法 EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍 EL 主要的语法结构 ~~~ ${sessionScope.user.sex} ~~~ 所有 EL 都是以 ${ 为起始、以} 为结尾的。上述 EL范例的意思是:从 Session 的范围中,取得用户的性别。假若依照之前的写法如下: ~~~ User user = (User)session.getAttribute("user"); String sex = user.getSex( ); ~~~ 两者相比较之下,可以发现 EL 的语法比传统 JSP更为方便、简洁。 ### .与 [ ] 运算符 多数情况下使用.,特殊情况使用[ ] ~~~ <%@page import="com.neusoft.mvcapp.dao.Person"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% Person person = new Person(); person.setName("neusoft"); session.setAttribute("com.neusoft.person", person); %> name:${sessionScope["com.neusoft.person"].name } </body> </html> ~~~ ### EL变量 EL 存取变量数据的方法很简单,例 如 :${username}。它的意思是取出某一范围中名称为 username的变量。因为我们并没有指定哪一个范围的 username,所以它的默认值会先从 Page 范围找,假如找不到,再依序到 Request、Session、Application 范围。假如途中找到 username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。 ![](https://box.kancloud.cn/4a0f35db60850542f386d6cf171df24c_492x178.png) *** ### 自动类型转换 el.jsp ~~~ <%@page import="com.neusoft.mvcapp.dao.Person"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="el2.jsp?score=20">To EL2 Page</a> </body> </html> ~~~ el2.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${ param.score+30 } <%= request.getParameter("score")+30 %> </body> </html> ~~~ ### EL 隐含对象 ①与范围有关的隐含对象 applicationScope sessionScope requestScope pageScope 举一个例子,其他同理 el.jsp ~~~ <%@page import="com.neusoft.mvcapp.dao.Person"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="el2.jsp?score=20">To EL2 Page</a> <% application.setAttribute("app", "appValue"); %> </body> </html> ~~~ el2.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> ${ app }<br> ${ applicationScope.app } </body> </html> ~~~ ②与输入有关的隐含对象 param ~~~ ${ param.score } <%= request.getParameter("score") %> ~~~ paramValues ~~~ ${ paramValues.score[1] } <%= request.getParameterValues("score")[1] %> ~~~ EL本身没有遍历paramValues的能力,JSTL可以,之后讲 如果获取的参数还有无参的get方法,可以一直使用.找到需要的方法,例如: ~~~ ${ requestScope.user.age } ~~~ ③其他的隐含对象 cookie ~~~ ${ cookie.JESESSIONID.name } -- ${ cookie.JESESSIONID.value } ~~~ initParam ~~~ ${ initParam.initName } ~~~ **pageContext** ~~~ ${ pageContext.request.contextPath } ~~~