在JSP开发中,为了获取Servlet域对象中储存的数据,需要经常书写很多Java代码,这样的做法会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。EL是一种简单的数据访问语言。
1.1初识EL
EL表达式的语法非常简单,都是以"${"开始,以"}"结束的,具体格式如下
${表达式}
在项目的src目录创建包cn.itcase.chapter08.servlet,在包里创建一个用于存储用户名和密码的类MyServlet.java
然后,在WebContent目录下编写一个名为myjsp.jsp的JSP文件,用于存储输出 MyServlet所有信息;
运行结果
1.2 EL表达式中的标识符
在el书写过程中,会用一些符号来标记变量、函数名等,这些符号称之为标识符。
书写规范:
1.不能以数字开头
2.不能包含el中的关键字:and , or 等
3.不能使用el表达式的隐式对象。
4.不能包含特殊符号,比如正斜杠等
1.3 EL中的保留字
保留字就是编程语言里事先定义好并赋予了特殊含义的单词。
1.3 EL中的变量
基本格式:${域对象的名称},这个域对象的名称可以理解为就是el中的变量,
那这个变量就不需要定义了,可以直接使用。
1.4 EL 中的常量
1.布尔常量:true或false
2.数字常量:整型、浮点常量,使用方式和java差不多
3.字符串常量:使用方式和java差不多,比如:${"el的字符串常量"}
4.Null常量:${null}
1.5 EL中的运算符
1.点运算符:获取域对象中属性的值。
比如: ${person.name }
2.方括号运算符:在域对象里,有的属性包含特殊字符,所以用方括号的方式来获取值
比如:<%
Map<String,String> map= new HashMap<String,String>();
map.put("my-name","map的值");
request.setAttribute("user",map);
%>
${user["my-name"] }
3.算术运算符:+ — * /
4.比较运算符: > < >= <= == !=
5.逻辑运算符: &&(and) ||(or) !(not)
6.empty 运算符:用来判断域对象中的值是否存在,不存在返回为true,否则返回的结果是false.
7.三目运算符:参照java的用法。
1.6 EL 隐式对象
1.pageContext对象:为了获取jsp中的隐式对象。
比如:
获取项目的路径:${pageContext.request.contextPath }<br/>
获取请求的URL:${pageContext.request.requestURI }
运行结果
2.web域相关的对象
域作用范围从小到大:pageContext--->request--->session--->application(servletContext)
el表达式获取域对象中的值:如果域对象的名称相同,获取的是域作用范围最小的值。
和pageContext对象的findAttribute方法的效果是一样的。
${requestScope.指定对象}<br/>
在WebContent目录下编写一个名为scopes.jsp的JSP文件
运行结果
3. param和paramValues对象:
前者用来获取一个值,后者用来获取请求参数的所有值
在WebContent目录下编写一个名为param.jsp的JSP文件:
运行结果
4.Cookie对象:
格式:
获取cookie对象的信息:${cookie.username}
获取cookie对象的名称:${cookie.username.name}
获取cookie对象的值:${cookie.username.value}
在WebContent目录下编写一个名为cookie.jsp的JSP文件:
运行结果
JSTL
JSTL中的Core标签库
<c:out>标签:最常见的操作就是向页面输出一段文本信息因此提供了此标签,改标签可以将一段文本内容或表达式的结果输出到客户端
语法一:没有标签体的情况
<c:out value="value" [default="defaultValue"]
[escapeXml="{true|false}"] />
语法二:有标签体的情况
<c:out value="value" [escapeXml="{true|false}"]>
defaultValue
</c:out>
在WebContent目录下编写一个名为c_out1.jsp的JSP文件
运行结果