当前位置: 首页 > article >正文

EL 表达式--各种运算-代码演示--EL 的 11 个隐含对象--pageContext 对象介绍--JSTL 标签库介绍--core 核心库--综合代码

目录

EL 表达式

EL 表达式介绍

代码示例

EL 常用输出形式

代码演示

 Book.java

el_input.jsp

EL 运算操作

基本语法语法:

关系运算

逻辑运算

算数运算

EL 的 empty 运算

应用实例

empty.jsp

EL 的三元运算

应用实例

EL 的 11 个隐含对象,可以直接使用

EL 获取四个特定域中的变量

应用实例

el_scope.jsp

pageContext 对象介绍

应用实例

JSTL

JSTL 标签库介绍

使用 JSTL,需要导入相关的 jar包

代码示例

注意细节

core 核心库

应用实例

 应用实例

标签

 应用实例 

标签

介绍: c:forEach 标签 用来遍历输出, 主要有 4 种形式-

 应用实例 

最后综合代码

list.jsp

QueryServlet.java

query.jsp


EL 表达式

EL 表达式介绍

1. EL 表达式全称:Expression Language,是表达式语言

2. EL 表达式主要是代替 jsp 页面的表达式脚本<%=request.getAttribute("xx")%>

3. EL 表达式输出数据的时,比 jsp 的表达式脚本简洁

4. EL 表达式基本语法: ${key1}, 你可以理解就是一个语法糖

代码示例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el表达式的快速入门</title>
</head>
<body>
<h1>el表达式的快速入门</h1>
<%
    request.setAttribute("name", "奥特曼");
%>
<%--
    1. 如果name是 null, request.getAttribute() 返回的是null字符串
    2. 如果name是 null, ${name}, 返回的""
--%>
<h1>jsp表达式脚本</h1>

名字= <%=request.getAttribute("name") == null ? "": request.getAttribute("name")%><br/>

<h1>el表达式</h1>
名字= ${name}<br/>
</body>
</html>

EL 表达式在输出 null 时,输出的是 ""

jsp 表达式脚本输出 null 的时,输出的是

EL 常用输出形式

EL 表达式常用输出 Bean 的普通属性、 数组属性、List 集合属性和 map 集合属性

EL 常用输出应用实例

代码演示

 Book.java

import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Book {

    private String name;//书名
    private String[] writer;//作者
    private List<String> reader;//读者
    private Map<String, String> topics;//评讲
    //alt+insert


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String[] getWriter() {
        return writer;
    }

    public void setWriter(String[] writer) {
        this.writer = writer;
    }

    public List<String> getReader() {
        return reader;
    }

    public void setReader(List<String> reader) {
        this.reader = reader;
    }

    public Map<String, String> getTopics() {
        return topics;
    }

    public void setTopics(Map<String, String> topics) {
        this.topics = topics;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", writer=" + Arrays.toString(writer) +
                ", reader=" + reader +
                ", topics=" + topics +
                '}';
    }
}

el_input.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el 表达式输出数据演示</title>
</head>
<body>
<h1>el 表达式输出数据演示</h1>
<%
    //创建Book 对象,放入相关的属性
    //private String name;//书名
    //private String[] writer;//作者
    //private List<String> reader;//读者
    //private Map<String, Object> topics;//评讲
    Book book = new Book();
    book.setName("昆虫总动员");
    book.setWriter(new String[]{"jack", "tom"});
    ArrayList<String> readers = new ArrayList<>();
    readers.add("老王");
    readers.add("老李");
    book.setReader(readers);//放入readers

    //创建topics
    HashMap<String, String> topics = new HashMap<>();
    topics.put("topic1", "这是我看过的最好的动画片");
    topics.put("topic2", "不错的电影~~");
    book.setTopics(topics);

    //把book 放入到request域对象
    request.setAttribute("bookkey", book);

%>
book对象: ${bookkey}<br/>
book.name= ${bookkey.name}<br/>
book.writer= ${bookkey.writer}<br/>
book.writer[0]= ${bookkey.writer[0]}<br/>

book.readers= ${bookkey.reader}<br/>
book.readers第2个= ${bookkey.reader.get(1)}<br/>
book.readers第2个= ${bookkey.reader[1]}<br/>

book.topics= ${bookkey.topics}<br/>
book.topics第一个评论= ${bookkey.topics["topic1"]}<br/>

</body>
</html>

EL 运算操作

基本语法语法:

${ 运算表达式 }  语法:${ 运算表达式 }

关系运算

 

逻辑运算

算数运算

 

EL 的 empty 运算

1. empty 运算可以判断一个数据是否为空,如果为空,返回 true,否则返回 false

2. 以下几种情况为空

        ● 值为 null

        ● 值为空串的时

        ● 值是 Object 类型数组,长度为零

        ● list 集合,元素个数为零

        ● map 集合,元素个数为零

应用实例

empty.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>el empty的运算</title>
</head>
<body>
<h1>el empty的运算</h1>
<%
    request.setAttribute("k1", null);
    request.setAttribute("k2", "");
    request.setAttribute("k3", new Object[]{});
    request.setAttribute("k4", new ArrayList<>());
    request.setAttribute("k5", new HashMap<>());

    request.setAttribute("score", 70);
%>
k1是否为空= ${empty k1}<br/>
k2是否为空= ${empty k2}<br/>
k3是否为空= ${empty k3}<br/>
k4是否为空= ${empty k4}<br/>
k5是否为空= ${empty k5}<br/>
是否及格= ${score >= 60 ? "及格": "不及格"}
</body>
</html>

EL 的三元运算

1. 表达式 1?表达式 2: 表达式 3

2. 如果表达式 1 的值为真,返回表达式 2 的值,反之,返回表达式 3 的值。

应用实例

<%
        request.setAttribute("score", 90);

%>
你的成绩为${score>=60?"及格":"不及格"}<br/>

EL 的 11 个隐含对象,可以直接使用

EL 获取四个特定域中的变量

 

应用实例

el_scope.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>演示el的四个常用的隐藏对象(域对象)</title>
</head>
<body>
<h1>演示el的四个常用的隐藏对象(域对象)</h1>
<%
    request.setAttribute("k1", "request-k1数据");
    pageContext.setAttribute("k1", "pageContext-k1数据");
    session.setAttribute("k1", "session-k1数据");
    application.setAttribute("k1", "application-k1数据");
%>
<h1>jsp脚本方式获取</h1>
request域中的k1= <%=request.getAttribute("k1")%><br/>
<h1>el方式来获取域对象的数据</h1>
request域中的k1= ${requestScope.k1}<br/>
pageContext域中的k1= ${pageScope.k1}<br/>
session域中的k1= ${sessionScope.k1}<br/>
application域中的k1= ${applicationScope.k1}<br/>
</body>
</html>

 

pageContext 对象介绍

应用实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>pageContext 对象的使用</title>
</head>
<body>
<h1>pageContext 对象的使用</h1>
<%--
    //通过request对象来获取和HTTP协议相关的数据
    request.getScheme() 它可以获取请求的协议
    request.getServerName() 获取请求的服务器 ip 或域名
    request.getServerPort() 获取请求的服务器端口号
    getContextPath() 获取当前工程路径
    request.getMethod() 获取请求的方式(GET 或 POST)
    request.getRemoteHost() 获取客户端的 ip 地址
    session.getId() 获取会话的唯一标识


--%>
<hr/>
<%--
    1.我们可以通过pageContext.request.xx 俩获取和http协议相关的信息
    2.相当于替代 request.getMethod()....
--%>
协议: ${ pageContext.request.scheme }<br>

服务器 ip:${ pageContext.request.serverName }<br>

服务器端口:${ pageContext.request.serverPort }<br>

工程路径:${ pageContext.request.contextPath }<br>

请求方法:${ pageContext.request.method }<br>

客户端 ip 地址:${ pageContext.request.remoteHost }<br>

会话id :${ pageContext.session.id }<br>

<h1>使用jsp表达式脚本获取如上信息</h1>

ip地址: <%=request.getRemoteHost() %> <br>

<h1>使用el表达式形式获取信息-简化写法</h1>
<%
    pageContext.setAttribute("req", request);
%>
ip地址(简化获取): ${req.remoteHost} <br>

获取请求方法(简化获取): ${req.method} <br>
</body>
</html>

JSTL

JSTL 标签库介绍

1. JSTL 标签库 是指 JSP Standard Tag Library JSP 标准标签库

2. EL 表达式是为了替换 jsp 中的表达式脚本,JSTL 是为了替换代码脚本。这样 jsp 页面变得更佳简洁

3. JSTL 由五个标签库组成

 

使用 JSTL,需要导入相关的 jar包

代码示例

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jstl的快速入门</title>
</head>
<body>
<h1>jstl的快速入门</h1>
<%--、
    1. c:if ... 类似
    2. if(10>2){
       out.println("<h1>10 > 2 成立~</h1>")
    }
--%>
<c:if test="${10 < 2}">
    <h1>10 > 2 成立~</h1>
</c:if>
</body>
</html>

注意细节

● taglib 引入标签,要放在行首

● 导入 jstl jar 包后,要重新发布 web 工程,否则不识别 jstl

core 核心库

<c:set />

1. 介绍: <c:set scope="request" var="username" value="xxx~"/>

<c:set /> set 标签可以往域中保存数据

1. 等价 域对象.setAttribute(key,value);

2. scope 属性设置保存到哪个域

                page 表示 PageContext 域(默认值)

                request 表示 Request 域

                session 表示 Session 域

                application 表示 ServletContext 域

3. var 属性设置 key 是什么

4. value 属性设置

应用实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:set标签的使用</title>
</head>
<body>
<h1>c:set标签的使用</h1>
<%--<%--%>
<%--    //Java代码--%>
<%--    request.setAttribute("email", "hsp@sohu.com");--%>
<%--%>--%>
<%--
    <c:set /> set 标签可以往域中保存数据
    1. 等价 域对象.setAttribute(key,value);
    2. scope 属性设置保存到哪个域
            page 表示 PageContext 域(默认值)
            request 表示 Request 域
            session 表示 Session 域
            application 表示 ServletContext 域
    3. var 属性设置 key 是什么
    4. value 属性设置值
--%>
<c:set scope="request" var="name" value="xxxx"></c:set>
c:set-name的值${requestScope.name}
</body>
</html>

<c:if />

1. 介绍: <c:if test="${ 10 > 2 }">hello</c:if>

<c:if />

1. if 标签用来做 if 判断。

2. test 属性表示判断的条件(用 EL 表达式输出

 应用实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:if标签使用</title>
</head>
<body>
<c:set scope="request" var="num1" value="20"></c:set>
<c:set scope="request" var="num2" value="10"></c:set>
<c:if test="${num1 > num2}">
    <h1>${num1} > ${num2}</h1>
</c:if>
</body>
</html>

<c:choose> <c:when> <c:otherwise>标签

介绍: 多路判断。跟 switch ... case .... default 非非常接近

 应用实例 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:choose标签的使用</title>
</head>
<body>
<h1>c:choose标签的使用</h1>
<%
    request.setAttribute("score", 50);

    //request.setAttribute("k1", "request-k1的值");
    //session.setAttribute("k1", "session-k1的值");
    //application.setAttribute("k1", "application-k1的值");
    //pageContext.setAttribute("k1", "pageContext-k1的值~");
%>
<%--
1. 如果${requestScope.score} 那么就明确的指定从request域对象取出数据
2. 如果${score}, 这是就按照从小到大的域范围去获取 pageContext->request->session->application
--%>
k1=${k1}
<c:choose>
    <c:when test="${requestScope.score > 80}">
        <h1>${score}-成绩优秀</h1>
    </c:when>
    <c:when test="${requestScope.score >= 60}">
        <h1>${score}-成绩一般, 及格了</h1>
    </c:when>
    <c:otherwise>
        <h1>${score}-没有及格,下次努力~</h1>
    </c:otherwise>
</c:choose>
</body>
</html>

 

<c:forEach />标签

介绍: c:forEach 标签 用来遍历输出, 主要有 4 种形式-

● 普通遍历输出 i 到 j

● 遍历数组

● 遍历 Map

● 遍历 Lis

 应用实例 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:forEach 标签</title>
</head>
<body>
<h1>c:forEach 标签</h1>
<hr/>

<h1>第1种遍历方式从i到j</h1>
<ul>

    <%--
    1.遍历 1 到 5,
    2. 输出 begin 属性设置开始的索引 end 属性设置结束的索引
    3. var 属性表示循环的变量(也是当前正在遍历到的数据)
    4. 等价 for (int i = 1; i <= 5; i++) {}
    5. 在默认情况下, i 每次会递增1

    --%>

    <c:forEach begin="1" end="5" var="i">

        <li>排名=${i}</li>

    </c:forEach>

</ul>
<hr/>

<h1>第2种遍历方式:遍历数组</h1>
<%
    request.setAttribute("sports", new String[]{"打篮球", "乒乓球"});
%>

<%--
    <c:forEach items="${ requestScope.sports }" var="item"/>
    1. items 遍历的集合/数组
    2. var 遍历到的数据
    3. 等价 for (Object item: arr) {}
--%>

<c:forEach items="${requestScope.sports}" var="sport">

    运动名称= ${sport}<br/>

</c:forEach>

<hr/>

<h1>第3种遍历方式:遍历Map</h1>

<%
    Map<String, Object> map = new HashMap<>();
    map.put("key1", "北京");
    map.put("key2", "上海");
    map.put("key3", "天津");
    request.setAttribute("cities", map);

%>

<%--
    1. items 遍历的map集合
    2. var 遍历到的数据
    3. entry.key 取出key
    4. entry.value 取出值
--%>

<c:forEach items="${requestScope.cities}" var="city">

    城市信息: ${city.key}--${city.value}<br/>

</c:forEach>

<hr/>

<h1>第4种遍历方式:遍历List</h1>
<%
    List<Monster> monsters = new ArrayList<>();
    monsters.add(new Monster(100, "小妖怪", "巡山的"));
    monsters.add(new Monster(200, "大妖怪", "做饭的"));
    monsters.add(new Monster(300, "老妖怪", "打扫位置的"));
    request.setAttribute("monsters", monsters);
%>

<%--
    items 表示遍历的集合
    var 表示遍历到的数据
    begin 表示遍历的开始索引值 ,从0开始计算
    end 表示结束的索引值
    step 属性表示遍历的步长值
    varStatus 属性表示当前遍历到的数据的状态,可以得到step,begin,end等属性值
--%>

<c:forEach items="${requestScope.monsters}" var="monster">

    妖怪的信息: ${monster.id}-${monster.name}-${monster.skill}<br/>

</c:forEach>
</body>
</html>

最后综合代码

list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>显示所有的妖怪</title>
</head>
<body>
<h1>显示所有的妖怪</h1>
<table border="1px" width="400px">
    <tr>
        <td>id</td>
        <td>name</td>
        <td>skill</td>
    </tr>
<%--    使用c:foreach循环显示即可 显示id > 200--%>
    <jsp:useBean id="monsters" scope="request" type="java.util.List"/>
    <c:forEach items="${monsters}" var="monster">

        <c:if test="${monster.id >= 200}">
            <tr>
                <td>${monster.id}</td>
                <td>${monster.name}</td>
                <td>${monster.skill}</td>
            </tr>
        </c:if>
    </c:forEach>

</table>
</body>
</html>

QueryServlet.java

public class QueryServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1. 准备要显示的数据--> 从DB
        ArrayList<Monster> list = new ArrayList<>();
        list.add(new Monster(100, "牛魔王", "芭蕉扇"));
        list.add(new Monster(200, "狐狸精", "美人计"));
        list.add(new Monster(300, "白骨精", "吃人骨头"));

        //2. 把list放入到request域, 供jsp页面使用
        request.setAttribute("monsters", list);
        //3. 请求转发 list.jsp
        request.getRequestDispatcher("/hm/list.jsp")
                .forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

 

query.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查询妖怪</title>
</head>
<body>
<h1>查询妖怪</h1>
<a href="<%=request.getContextPath()%>/queryServlet">点击查询所有的妖怪</a>
</body>
</html>


http://www.kler.cn/a/14124.html

相关文章:

  • Python Selenium 关键字驱动
  • 押注零知识证明赛道,Conflux与ACCSEAL达成战略合作
  • (数字图像处理MATLAB+Python)第七章图像锐化-第一、二节:图像锐化概述和微分算子
  • 关于 变量
  • 理解缓冲区
  • 【CocosCreator入门】CocosCreator组件 | ProgressBar(进度条)组件
  • 进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
  • 【安全与风险】普适计算中的安全与隐私研究
  • C++ -- 笔试题
  • 【华为OD机试真题】不爱施肥的小布(javacc++python)100%通过率
  • 了解网络攻击:类型、策略和技术
  • chatgpt智能提效职场办公-ppt怎么转换成word文档
  • 8080时序驱动液晶屏
  • Shiro 实战教程(全)
  • 信息安全复习七:报文鉴别与哈希函数
  • SEO文章批量生成
  • IEEE14节点系统在如短路分析,潮流研究,互连电网中的研究(Simulink)
  • Redis——缓存更新策略
  • 最新的经典mysql面试题及答案
  • 考研数据结构代码篇