EL表达式
文章目录
一、EL表达式介绍
1.命令格式:${作用域对象别名.共享数据}
2.命令作用:
1)EL表达式是EL工具包提供一种特殊命令格式【表达式命令格式】
2)EL表达式在JSP文件上使用
3)负责在JSP文件上从作用域对象读取指定的共享数据并输出到响应体
二、EL表达式——作用域对象别名
1. JSP文件可以使用的作用域对象
1) ServletContext application: 全局作用域对象
2) HttpSession session: 会话作用域对象
3) HttpServletRequest request: 请求作用域对象
4) PageContext pageContext: 当前页作用域对象,这是JSP文件独有的作用域对象。 Servlet中不存在
PageContext
在当前页作用域对象存放的共享数据仅能在当前JSP文件中使用,不能
共享给其他Servlet或则其他JSP文件
真实开发过程,主要用于JSTL标签与JSP文件之间数据共享
数据
JSTL------->pageContext---->JSP
2.EL表达式提供作用域对象别名
JSP | EL表达式 |
---|---|
application | ${applicationScope.共享数据名} |
session | ${sessionScope.共享数据名} |
request | ${requestScope.共享数据名} |
pageContext | ${pageScope.共享数据名} |
三、EL表达式将引用对象属性写入到响应体
1.命令格式: ${作用域对象别名.共享数据名.属性名}
2.命令作用: 从作用域对象读取指定共享数据关联的引用对象的属性值。
并自动将属性的结果写入到响应体
3.属性名: 一定要去引用类型属性名完全一致(大小写)
4.EL表达式没有提供遍历集合方法,因此无法从作用域对象读取集合内容输出
四、EL表达式简化版
1.命令格式: ${共享数据名}
2.命令作用: EL表达式允许开发人员开发时省略作用域对象别名
3.工作原理:
EL表达式简化版由于没有指定作用域对象,所以在执行时采用【猜】算法
首先到【pageContext】定位共享数据,如果存在直接读取输出并结束执行
如果在【pageContext】没有定位成功,到【request】定位共享数据,如果存在直接读取输出并结束执行
如果在【request】没有定位成功,到【session】定位共享数据,如果存在直接读取输出并结束执行
如果在【session】没有定位成功,到【application】定位共享数据,如果存在直接读取输出并结束执行
如果在【application】没有定位成功,返回null
pageContext--->request--->session--->application
4.存在隐患:
容易降低程序执行速度【南辕北辙】
容易导致数据定位错误
5.应用场景:
设计目的,就是简化从pageContext读取共享数据并输出难度
6. EL表达式简化版尽管存在很多隐患,但是在实际开发过程中,开发人员为了节省时间,一般都 使用简化版,拒绝使用标准版
五、EL表达式-----支持运算表达式
1.前提: 在JSP文件有时需要将读取共享数据进行一番运算之后,将运算结果写入到响应体
2.运算表达式:
1) 数学运算
2) 关系运算: > >= == < <= !=
gt ge eq lt le !=
3)逻辑运算: && || !
六、EL表达式提供内置对象
1.命令格式: ${param.请求参数名}
2.命令作用: 通过请求对象读取当前请求包中请求参数内容
并将请求参数内容写入到响应体
3.代替命令: index.jsp
发送请求: Http://localhost:8080/demo1/index.jsp?userName=mike&password=123
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
%>
<%=userName%>
<%=password%>
4、当传递参数为相同属性名的多个值,可用paramValues
1.命令格式:${paramValues.请求参数名[下标]}
2.命令作用: 如果浏览器发送的请求参数是[一个请求参数关联多个值]
此时可以通过paramVaues读取请求参数下指定位置的值
并写入到响应体
3.代替命令: http://localhost:8080/myWeb/index_2.jsp?pageNo=1&pageNo=2&pageNo=3
此时pageNo请求参数在请求包以数组形式存在
pageNo:[1,2,3]
<%
String array[]= request.getParameterValues("pageNo");
%>
第一个值:<%=array[0]%>
第二个值:<%=array[1]%>
七、EL表达式常见异常:
javax.el.PropertyNotFoundException:在对象中没有找到指定属性
八、EL的禁用
1、在当前JSP文件中禁用
<%@ page isELIgnored=“true” %>
表示是否禁用EL语言:TRUE表示禁止;FALSE表示不禁止
2、在整个项目中禁用
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
九、利用EL表达式来简化之前所写jsp页面
试题更新页面 QuestionUpdate.jsp
<%@ page import="com.entity.Question" %><%--
Created by IntelliJ IDEA.
User: asus
Name: 吕昊
Number: 20180508145
Date: 2021/5/10
Time: 18:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改试题信息</title>
</head>
<body>
<center>
<form action="/demo1/quest/updata2" method="get">
<table border="2">
<tr>
<td>试题ID:</td>
<td>
<input type="text" name="questionId" value="${requestScope.Que.queestionID}" readonly="readonly"/>
</td>
</tr>
<tr>
<td>
试题内容:
</td>
<td>
<input type="text" name="title" value="${requestScope.Que.title}">
</td>
</tr>
<tr>
<td>
答案A:
</td>
<td>
<input type="text" name="optionA" value="${Que.optionA}">
</td>
</tr>
<tr>
<td>
答案B:
</td>
<td>
<input type="text" name="optionB" value="${requestScope.Que.optionB}">
</td>
</tr>
<tr>
<td>
答案C:
</td>
<td>
<input type="text" name="optionC" value="${requestScope.Que.optionC}">
</td>
</tr>
<tr>
<td>
答案D:
</td>
<td>
<input type="text" name="optionD" value="${requestScope.Que.optionD}">
</td>
</tr>
<tr>
<td>
正确答案:
</td>
<td>
A<input type="radio" name="answer" value="A" ${"A"== Que.answer?"checked":""}/>
B<input type="radio" name="answer" value="B" ${"B"== Que.answer?"checked":""}/>
C<input type="radio" name="answer" value="C" ${"C"== Que.answer?"checked":""}/>
D<input type="radio" name="answer" value="D" ${"D"== Que.answer?"checked":""}/>
</td>
</tr>
<tr>
<td>
<input type="submit" value="更新试题"/>
</td>
<td>
<input type="reset" value="重置"/>
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
封装dao
QusetDao
package com.Dao;
import com.entity.Question;
import com.til.JdbcUtil;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: LvHaoIT (asus)
* Date: 2021/5/10
* Time: 10:36
*/
public class QusetDao {
private JdbcUtil util = new JdbcUtil();
public int add(Question que) {
int result = 0;
String sql = "insert into question(title,optionA,optionB,optionC,optionD,answer) values(?,?,?,?,?,?)";
PreparedStatement ps = this.util.createStatement(sql);
try {
ps.setString(1, que.getTitle());
ps.setString(2, que.getOptionA());
ps.setString(3, que.getOptionB());
ps.setString(4, que.getOptionC());
ps.setString(5, que.getOptionD());
ps.setString(6, que.getAnswer());
result = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
this.util.close();
}
return result;
}
public void findAll(List list) {
String sql = "select * from question order by questionId asc";
PreparedStatement ps = this.util.createStatement(sql);
ResultSet rs = null;
try {
rs = ps.executeQuery();
while (rs.next()) {
Question que = new Question(rs.getInt("questionId"),
rs.getString("title"),
rs.getString("optionA"),
rs.getString("optionB"),
rs.getString("optionC"),
rs.getString("optionD"),
rs.getString("answer"));
list.add(que);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
this.util.close(rs);
this.util.close();
}
}
public int delete(Integer id) {
int result = 0;
String sql = "delete from question where questionId=?";
PreparedStatement ps = this.util.createStatement(sql);
try {
ps.setInt(1, id);
result = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return result;
}
/**
* 查找一个quest对象
*/
public Question findOne(Integer id) {
Question que = null;
ResultSet rs = null;
String sql = "select * from question where questionId=?";
PreparedStatement ps = this.util.createStatement(sql);
try {
ps.setInt(1, id);
rs = ps.executeQuery();
if (rs.next()) {
que = new Question(rs.getInt("questionId"),
rs.getString("title"),
rs.getString("optionA"),
rs.getString("optionB"),
rs.getString("optionC"),
rs.getString("optionD"),
rs.getString("answer"));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return que;
}
public int updata(Question que) {
int result = 0;
String sql = "update question set title=?,optionA=?,optionB=?,optionC=?,optionD=?,answer=? where questionId=? ";
PreparedStatement ps = this.util.createStatement(sql);
try {
ps.setString(1, que.getTitle());
ps.setString(2, que.getOptionA());
ps.setString(3, que.getOptionB());
ps.setString(4, que.getOptionC());
ps.setString(5, que.getOptionD());
ps.setString(6, que.getAnswer());
ps.setInt(7, que.getQueestionID());
result = ps.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
this.util.close();
}
return result;
}
}