EL
Express Language
EL表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL的出现的目的是要替代jsp页面中脚本的编写
EL从域中取得数据
EL最主要的作用是获得四大域中的数据,格式${EL表达式}
EL 获得request域中的数据:${requestScope.key}
EL获得pageContext域中的数据:${pageContext.key}
EL 获得session域中的数据:${sessionScope.key}
EL 获得application域中的数据:${applicationScope.key}
例如:存在request中的<"name","zhangsan">
${requestScope.name} //这样就直接输出了
存在session中的User user对象,属性name
${sessionScope.user.name} //获取user对象,输出name
存在application中的List<User> list
${applicationScope.list[1].name} //同样是获取了list里面第二个元素的name值
全局查找
从小到大和Find Attribute的性质一样
${key}
EL的内置对象(11个)
pageScope,requestScope,sessionScope,applicationScope
-------------------获取jsp域中的数据
param,paramValues -接收参数
相当于 request.getPatameter() request.getParameterValues()
header,headerValues -获取请求头信息
相当于 request.getHeader() request.getHeaderValues()
举例:${param["username"]这是一种写法,${param.username}也是一种写法,但大多数时候是用第二种。一个.就解决问题,为什么会有第一种呢,因为有时候会存在一些特殊符号之类的问题,比如User-Agent,就只能用第一种${param["User-Agent"]}没有问题。
initParam -获取全局初始化参数
相当于 request.getServletContext().getInitParameter(name)
cookie -Web开发中的cookie
request.getCookies-------cookie.getName()--------cookie.getValue()
pageContext -Web开发中的pageContext
pageContext可以获得其他八大对象!
这个用处比较大!
例如:
${pageContext.request.contextPath} //request.contextPath已经说过了,获取当前应用或者说当前工程的名称,这样就可以动态的获取了
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="/Web18/EL/form.jsp" method="post"><input type="text" name="username"><br><input type="password" name="password"><br><input type="submit" value="提交"><br></form><hr/>
</body>
</html>
比如上面这个,写死了Web18,我们就可以用${pageContext.request.contextPath()}来获取应用的名称。
而且!EL表达式放到字符串内部!莫得问题!客户端可以自动解析!就是这么牛逼!那我们是不是可以在上面的代码中直接改掉
<form action="/${pageContext.request.contextPath()}/EL/form.jsp" method="post">
答案是,不可以的,因为,上面这个一看就他娘的是html语言,不接受el
下面看一段代码,了解一下访问时的运行机制
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<link href="xxx.css" >
<script type="text/javascript" src="yyy.js"></script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="/Web18/EL/form.jsp" method="post"><input type="text" name="username"><br><input type="password" name="password"><br><input type="submit" value="提交"><br></form><img src="1.jpg"><img src="2.jpg"><img src="1.jpg">
</body>
</html>
如果提个问题:在这个过程中,访问服务器几次?答案是5次,加载时按照瀑布式加载的,也就是说服务器返还这一段代码是一次,然后客户端开始解析,解析到link哪一行的时候,发现有个css文件,回去找(第二次),然后继续解析,看到script,继续找(第三次),解析到src=1,(第四次),src=2(第五次),src=1有了,缓存起来了,所以一共五次。
<link href="xxx.css" >
<script type="text/javascript" src="yyy.js"></script>
<img src="1.jpg">
这些都叫做客户端地址。
客户端地址,都建议把Web应用的名称写上!也就是用这种方式${pageContext.request.contextPath}
在jsp页面中,获取当前项目名称
这样储存的就是绝对路径,不存在找不到地址的情况!保险!防止图片地址找不到!
EL可以执行表达式运算:
${1+1}
${1==1?true:false}
${empty user}
判定这个user是否为空