一 EL :为了消除jsp中的Java代码
原因:
原来servlet(增加数据)—>jsp(显示数据)
传统的在JSP中用java代码显示数据的弊端,类型转换、需要处理null、代码参杂
JSP
EL
语法:
${EL表达式}
a.EL不需要导包
b.在el中调用属性,其实是调用的getXxx()
方法
${范围.对象.属性.属性的属性 }
操作符:操作:属性,不是对象
.
: 使用方便
[]
: 如果是常量属性,需要使用双引号/单引号 引起来;比点操作符更加强大
中括号操作符如图
二 []
强大之处如下:
a.可以容纳一些 特殊符号 (. ? -)
图获取特殊符号
b.[]可以容纳 变量属性 (可以动态赋值)
String x = “a”;
${requestScope.a}
等价于${requestScope["a"]}
等价于${requestScope[x]}
注意 不加引号是变量
c.可以处理数组
${requestScope.arr[0] }
d 处理map对象
前端
${requestScope.map.cn}
${requestScope.map[‘us’]}
Map<String,Object> map = new HashMap<>();
map.put(“cn”,“中国”);
map.put(“us”,“美国”);
request.setAttribute(“map”,map);
request.setAttribute(“user”,user);
request.getRequestDispatcher(“el.jsp”).forward(request,response);
三 EL关系逻辑运算符
四 Empty运算符:判断一个值null,不存在(null)值为true
${empty requestScope["name"]}
五 EL表达式的隐式对象(不需要new 就能使用的对象,自带的对象)
比如说jsp中的request/response(不用new直接能用)
a 作用域访问对象(EL域对象)
如果不指定域对象,则会根据从小到大的顺序,依次取值pageScope<requestScope<sessionScope<applicationScope
类比:
pageContext JSP页面容器 (page对象); 当前页面有效
request 请求对象 同一次请求有效
session 会话对象 同一次会话有效
application 全局对象 全局有效(整个项目有效)
pageScope
requestScope
sessionScope
后端servlet中request对象获取Session对象,添加session
request.getSession().setAttribute(“sessionkey”,“sessionValue”);
前端利用sessionScope域对象
${sessionScope.sessionkey}
输出sessionValue
${sessionkey}
没有指定哪个域 从pageScope<requestScope<sessionScope<applicationScope 依次寻找 在sessionScope中找到
applicationScope
b 参数访问对象:获取表单数据(超链接中传的值 a.jsp?a=b&c=d地址栏的值)
(JSP中获取表单数据request.getParameter(),request.getParameteValues())
JSP中request.getParameter()
获取参数---------对应---------${param}
JSP中request.getParameterValues()
获取数组---------对应---------${paramValues}
c JSP隐式对象
pageContext: EL可以通过pageContext在jsp中获取其他内置对象
通过EL获取JSP 九大内置对象
${pageContext.page }获取jsp中的page对象
${pageContext.request }获取jsp中的request对象
${pageContext.sessoin }获取jsp中的session对象
${pageContext.getSession() }-
-----等效于${pageContext.sessoin }
可以使用此方法级联获取方法
${pageContext.getRequest().getServerPort }
---------等效于${pageContext.request.serverPort }
${pageContext.方法名去掉()和get并且将首字母小写 }