EL&JSTL:EL表达式总结


目录:

(1)EL介绍 

(2)EL表达式的简单使用 

(3)EL表达式输出高级 对象属性

(4)EL表达式简化版

(5)EL表达式支持运算

(6)EL表达式其他工具对象

(7)相对路径 绝对路径

(8)EL表达式的缺陷


在未来的实际项目开发中,jsp servlet都是以相结合的方式来开发,servlet主做后端业务逻辑处理,jsp主做前端数据显示。

 jsp数据显示的过程中,我们难免会遇到以java脚本的拼接的方式来结合前后端代码。如果java脚本拼接过多,这就涉及到了代码的可读性低与可维护性低的问题。

使用el表达式和jstl标签库可以有效的简化jsp的开发,目的就是为了减少jsp开发中的代码量,避免脚本拼接问题,所以eljstl是我们开发jsp必用的操作。

(1)EL介绍 

 index.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 15:51
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--制造测试数据--%>
<%
  request.setAttribute("key","abc");
%>

<%--Java命令读取request数据并写入到响应体中--%>
<%
  String value= (String)request.getAttribute("key");
  out.write(value);
%>
<br>

Java命令写入的结果:<%=value%><br>

EL表达式写入的结果:${requestScope.key}

结果:

可以看出使用EL表达式的代码得到了简化,提高了开发效率 

(2)EL表达式的简单使用 

 index_2.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 16:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>">
</head>
<body>
<%--制造测试数据--%>
<%
    application.setAttribute("sid",10);
    session.setAttribute("sname","mike");
    request.setAttribute("sex","man");
    pageContext.setAttribute("home","BJ");
%>
学员编号:${applicationScope.sid}<br>
学员姓名:${sessionScope.sname}<br>
学员性别:${requestScope.sex}<br>
学员籍贯:${pageScope.home}
</body>
</html>

 (3)EL表达式输出高级 对象属性

 创建Student类:

package com.bjpowernode.model;

public class Student {
    private Integer sid;
    private String sname;

    public Student(Integer sid, String sname) {
        this.sid = sid;
        this.sname = sname;
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }
}

index_3.jsp:

<%@ page import="com.bjpowernode.model.Student" %><%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 17:10
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>">
</head>
<body>
<%
    Student stu=new Student(20,"allen");
    session.setAttribute("stuKey",stu);
%>

学员编号:${sessionScope.stuKey.sid}<br>
学员姓名:${sessionScope.stuKey.sname}<br>

</body>
</html>

(4)EL表达式简化版

index_4.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 17:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    session.setAttribute("key","小美姑娘");
    pageContext.setAttribute("key","猪八戒");
%>

session心仪的女孩名字:${key}

 (5)EL表达式支持运算

数学运算: 

index_5.jsp:EL表达式会自动的做类型转换

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 17:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    pageContext.setAttribute("key1","100");
    pageContext.setAttribute("key2","200");
%>

<%--Java--%>
<%
    String num1=(String)pageContext.getAttribute("key1");
    String num2=(String)pageContext.getAttribute("key2");
    int sum=Integer.valueOf(num1)+Integer.valueOf(num2);
%>
Java命令的运行结果:<%=sum%><br>

使用EL表达式简化上面的方式:${key1+key2}

 

 关系运算:

在EL表达式里面不支持if else处理,没有控制语句这个选项,它可以通过三元运算符来处理

index_5,jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 17:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--制造测试数据--%>
<%
    request.setAttribute("age",23);
%>

<%--Java命令处理--%>
<%
    Integer age=(Integer)request.getAttribute("age");
    if (age>18){
        out.write("欢迎光临");
    }else{
        out.write("谢绝入内");
    }
%>
<br>

EL表达式简化处理:
${age ge 18?"欢迎光临":"谢绝入内"}

 (6)EL表达式其他工具对象

 

index_7.jsp:发送请求,地址带的参数,用param接收:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 18:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
   发送请求时带的参数
   http://localhost:8080/index_7.jsp?uname=smith&password=123
--%>

登录名:${param.uname}<br>
密码:${param.password}

 

index_8.jsp:接收一组信息

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 18:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
   http://localhost:8080/index_8.jsp?empNo=10&empNo=20
--%>

第一个职员编号:${paramValues.empNo[0]}<br>
第二个职员编号:${paramValues.empNo[1]}

 

  

全局作用域当中存在两种共享数据,一种是由Sevlet写入的共享数据。,一种是由tomcat写入的共享数据 

在web.xml:中声明一个由tomcat写入的共享数据

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--tomcat写入的共享数据:这个值会在tomcat启动的时候,由tomcat写入到全局作用域当中-->
    <context-param>
        <param-name>driver</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
</web-app>

index_9.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 18:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

来自web.xml中的共享数据:${initParam.driver}

pageContext对象: 

 

 

 

(7)相对路径 绝对路径

 

这里设置了/myWeb是网站根目录的别名,如果不设置 下方Application Context中 是:/ 

在代码中访问的网站的根目录web:如果设置了网站的别名,根目录就是/myWeb,没有设置就是 : /

 

one.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 18:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>">
</head>
<body>
  one.jsp页面
</body>
</html>

index.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 18:40
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    <title>$Title$</title>
    <base href="<%=basePath%>">
  </head>
  <body>
  index.jsp页面
  </body>
</html>

two.jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2022/7/19
  Time: 18:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <title>Title</title>
    <base href="<%=basePath%>">
</head>
<body>
   <center>
       <h1>相当路径定位</h1>
       <a href="one.jsp">one.jsp</a><br>
       <a href="../index.jsp">index.jsp</a>

       <h1>绝对路径定位</h1>
       <a href="/myWeb/jsp/one.jsp">one.jsp</a><br>
       <a href="/myWeb/index.jsp">index.jsp</a>
   </center>
</body>
</html>

 (8)EL表达式的缺陷

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喵俺第一专栏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值