EL表达式

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表达式提供作用域对象别名

JSPEL表达式
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;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LvhaoIT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值