1. EL表达式是干什么的?
- Expression Language(表达式语言)
- EL表达式可以代替JSP中的java代码,让JSP文件中的程序看起来更加整洁美观
- JSP中夹杂着各种java代码,例如<% java代码%>等,导致JSP文件混乱,不好维护,所以有了后期的EL表达式
- EL表达式可以算是JSP语法的一部分,EL表达式归属于JSP
2. EL表达式出现在jsp中主要是:
- 从某个作用域中取数据(四个域:pageContext,request,session,application),然后将其转换为字符串,然后将其输出到浏览器,这就是EL表达式的功效。
3. EL表达式基本语法格式:
- $(表达式)
<%@ page contentType="text/html;charset=UTF-8" %>
<%
//向request作用域中存储username为zhangsan
request.setAttribute("username","zhangsan");
%>
<%-- 将request域当中的数据取出来,并且还要输出到浏览器,使用java代码怎么办--%>
<%=request.getAttribute("username") %>
以上是用JSP在浏览器打印输出zhangsan,后面加EL表达式后
<%-- 使用EL表达式--%>
${username}
举例
package com.bjpowernode.javaweb.servlet;
public class User {
private String username;
private String password;
private int age;
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
'}';
}
public User(String username, String password, int age) {
this.username = username;
this.password = password;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.bjpowernode.javaweb.servlet.User" %>
<%
//创建User对象
User user=new User();
user.setUsername("jackson");
user.setPassword("1234");
user.setAge(50);
//将User对象存储到request对象
request.setAttribute("userObj",user);
%>
<%-- 使用EL表达式从request域中,取出User对象,并将其输出到浏览器--%>
${userObj}
<%--想输出的是user对象的username属性 --%>
${userObj.username}
<%--输出password--%>
${userObj.password}
<%--输出年龄age--%>
${userObj.age}
注意
比如${userObj.email},javabean中可以没有email属性,但是一定有email的get方法
4. a b c 和 {abc}和 abc和{“abc”}的区别
5.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
//四个域都存储了数据,并且name相同
session.setAttribute("data","session");
request.setAttribute("data","request");
pageContext.setAttribute("data","pageContext");
application.setAttribute("data","application");
%>
${data}
<%--在没有指定范围的情况下,但在EL表达式中可以指定范围读取数据--%>
<%--EL表达式有4个隐含的范围对象 pageScope requestScope sessionScope applicationScope--%>
${pageScope.data}
${requestScope.data}
${sessionScope.data}
${applicationScope.data}
注意:在实际开发中,因为向某个域中存储数据时候,name都是不同的,所以XXXScope都是可以省略的
6.
当jsp中出现错误时,如以下代码,存入username-zhangsan,取的时候输入错误,因此EL表达式设计更好,对出错进行了处理,在浏览器上显示空白
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
request.setAttribute("username","zhangsan");
%>
<%= request.getAttribute("username")%>
采用EL表达式: ${username}
<%--username 输入错误导致在浏览器上的输出什么 JSP输出null,EL表达式输出空白--%>
<%= request.getAttribute("usernam")%>
采用EL表达式: ${usernam}
注意:${usernam} 这个EL表达式等同于这一段java代码 <%=request.getAttribute(“usernam”)==null ? " " : request.getAttribute(“usernam”)%>
7.
EL表达式取数据的时候有两种形式:
8.
掌握使用EL表达式,怎么从Map集合中取数据
- ${map.key}
掌握使用EL表达式,怎么从数组中取数据
- ${数组[0]}
掌握使用EL表达式,怎么从list中取数据
- ${list[0]}
9.
page指令当中,有一个属性,可以忽略EL表达式
- <%@page contentType="text/html;charset=UTF-8" isELIgnored="true" 表示忽略EL表达式
- isELIgnored=“false” 表示不忽略EL表达式(默认)
- 忽略某一个EL表达式 前面加“\”
10.
根据EL表达式获取应用的根
在EL表达式中没用request这个隐式对象。requestScope这个只代表“请求范围”,不等同于request对象。在EL表达式当中有一个隐式对象:pageContext
EL表达式中的pageContext和JSP中的九大内置对象pageContext是同一个对象
<%=(HttpServletRequest)pageContext.getRequest().getContextPath()%>
这段java代码对应的EL表达式,获取应用的根路径
${pageContext.request.contextPath}
11.
EL表达式中其他隐式对象:
- param
- paramValues
- initParam