EL和JSTL核心技术
EL(Expression Language表达式语言)表达式提供了在JSP中简化表达式的写法,可以方便地访问各种数据并输出
主要功能
- 依次访问pageContext(当前页面中)、request(当前请求中有效)、session(当前会发中有效)和application(服务器中有效)作用域对象存储的数据。
- 获取请求参数值。
- 访问Bean对象的属性。
- 访问集合中的数据。
- 输出简单的运算结果。
访问内置对象的数据
访问方式
- <%=request.getAttribute(“ varName”)%>
- 用EL实现就是: ${ varName }
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//pageContext.setAttribute("name1","pageContext对象中的值");
request.setAttribute("name2","request对象中的属性值:guanyu");//设置属性值
session.setAttribute("name3","session对象中的属性值:liubei");
application.setAttribute("name4","application对象中的属性值:zhaoyun");
%>
<%--使用JSP中原始方式获取数据和打印--%>
<%= "name2的数值为"+request.getAttribute("name2")%><br/>
<%= "name3的数值为"+session.getAttribute("name3")%><br/>
<%--使用EL表达式实现获取数据和打印--%>
name2的数值为:${ name2 }<br/>
name3的数值为:${ name3 }<br/>
name4的数值为:${ name4 }<br/>
</body>
</html>
访问请求参数的数据
就是前台页面那边传过来的数据
- 在EL之前使用下列方式访问请求参数的数据
request.getParameter(name);
request.getParameterValues(name);
在EL中使用下列方式访问请求参数的数据
- param:接收的参数只有一个值。
- paramValues:接受的参数有多个值
<!-- 获取指定参数的数值 -->
${param.name}
<!-- 获取指定参数中指定下标的数值 -->
${paramValues.hobby[0]}
用一下
写param.jsp为el_param.jsp传参
- 用name传递参数,这个参数只有一个值
- hobby有多个值
param.jsp如下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现一个简单页面负责向JSP页面传递参数</title>
</head>
<body>
<form action="el_param.jsp" method="post">
姓名:<input type="text" name="name"/><br/>
爱好:<input type="checkbox" name="hobby" value="唱歌"/>唱歌<br/>
<input type="checkbox" name="hobby" value="跳舞"/>跳舞<br/>
<input type="checkbox" name="hobby" value="学习"/>学习<br/>
<input type="submit" value="提交"><br/>
</form>
</body>
</html>
el_param.jsp如下
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现请求参数数值的获取</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");//解决乱码
%>
<%--使用JSP语法中原始方式获取请求参数值--%>
<%--<%="姓名是:"+request.getParameter("name")%><br/>
<%="爱好是:"+ Arrays.toString(request.getParameterValues("hobby"))%><br/>--%>
<%--使用el表达式中的方式获取请求参数值--%>
姓名是:${param.name}<br/>
爱好是:${paramValues.hobby[0]}<br/>
</body>
</html>
el表达式访问Bean对象的属性
插曲:
遇到pageContext不能setAttribute,在pom.xml中引入依赖包坐标即可
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
就是访问成员变量值
访问方式
方式一: $ { 对象名 . 属性名 },例如:${user.name}
方式二: $ { 对象名 [“属性名”] },例如:${user[“name”]}
区别
当要存取的属性名中包含一些特殊字符,如: . 或 ,等并非字母或数字的符号,就一定要使用 [ ]而
不是.的方式
使用[]的方式可以动态取值,具体方式如下:
<% request.setAttribute(“prop”,“age”); %><!-- 相当于表达式中写一个变量 --> ${ user[prop] }
在com.example.task_web目录下创建Person类
用el_bean.jsp文件实现Bean对象中属性的额获取和打印
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现Bean对象中属性的额获取和打印</title>
</head>
<body>
<%
Person person = new Person();
person.setName("zhangfei");
person.setAge(18);
pageContext.setAttribute("person",person);
%>
<%--使用el表达式实现属性的获取和打印--%>
获取到的姓名是:${person.name}<br/>
获取到的年龄是:${person.age}<br/>
<%--另一种写法--%>
${person["name"]}<br/>
${person["age"]}<br/>
</body>
</html>
EL表达式访问集合中的数据
<!-- student为ArrayList类型的对象 -->
${student[0].name}