Javaweb中EL 表达式和JSTL 的使用

一、EL 表达式

概述:Expression Language 表达式语言,是一种在 JSP 页面获取数据的简单方式。 只能获取数据,不能设置数据。
语法:在 JSP 页面的任何静态部分均可通过: 来获取到指定表达式的值
开启EL表达式:isELIgnored="false"
(1)获取容器的值
<html>
<head>
    <title>EL</title>
</head>
<body>
<h1>之前的写法</h1>
<%
    pageContext.setAttribute("A","page内容",1);
    pageContext.setAttribute("B","request内容",2);
    pageContext.setAttribute("C","session内容",3);
    pageContext.setAttribute("D","application内容",4);
    Object o1=pageContext.getAttribute("A",1);
    Object o2=pageContext.getAttribute("B",2);
    Object o3=pageContext.getAttribute("C",3);
    Object o4=pageContext.getAttribute("D",4);
    out.print(o1+"<br/>");
    out.print(o2+"<br/>");
    out.print(o3+"<br/>");
    out.print(o4+"<br/>");
%>
<h1>EL表达式的写法</h1>
${pageScope.A}<br/>
${requestScope.B}<br/>
${sessionScope.C}<br/>
${applicationScope.D}<br/>
<h1>EL表达式的写法缩写形式</h1>
${A}<br/>
${B}<br/>
${C}<br/>
${D}<br/>
</body>
</html>
(2)获取请求参数的值
<html>
<head>
    <title>从请求参数中获取内容</title>
</head>
<body>
<form action="11-1.jsp" method="post">
    账号:<input name="name"/><br/>
    年龄:<input name="age"/><br/>
    爱好:<input type="checkbox" name="love" value="zq"/>⚽️
    <input type="checkbox" name="love" value="lq"/>🏀
    <input type="checkbox" name="love" value="pq"/>🏐️
    <br/>
    <button>提交</button>
</form>
</body>
</html>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>过去获取请求参数值的写法:</h1>
<%
    request.setCharacterEncoding("utf-8");
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    String[] love = request.getParameterValues("love");
    out.print(name + "<br/>");
    out.print(age + "<br/>");
    out.print(Arrays.toString(love) + "<br/>");
%>
<h1>EL获取请求参数值的写法:</h1>
${param.name}<br>
${param.age}<br>
${paramValues.love}
</body>
</html>
(3)如何操纵对象
<html>
<head>
    <title>EL表达式操纵对象</title>
</head>
<body>
<%
    Student stu=new Student();
    stu.setAge(20);
    stu.setName("王妍");
    stu.setId(19163128);
    session.setAttribute("STUDENT",stu);
%>
<h1>EL操作对象</h1>
获取session容器中的内容:${STUDENT}<br/>
之间获取到容器中对象的某个属性:${STUDENT.age}..${STUDENT.id}..${STUDENT.name}
</body>
</html>

(4)如何操纵集合

<html>
<head>
    <title>操作集合</title>
</head>
<body>
<%
    String[] array={"aa","bb","cc","dd"};
    List<String> list=new ArrayList<>();
    list.add("王妍");
    list.add("张三");
    list.add("李四");
    Map<String,String[]> map=new HashMap<>();
    map.put("A",array);
    session.setAttribute("A",array);
    session.setAttribute("B",list);
    session.setAttribute("C",map);
%>
<h1>通过EL表达式操作集合</h1>
数组:${A[1]}<br><%--获取键值为A,值是array,array的第二个值--%>
list或set集合:${B.get(1)}<br><%--获取键值为B,值是list,list的第二个值--%>
map集合:${C.get('A')[2]}<%--获取map中键值为B,值是array,array的第三个值--%>
</body>
</html>

(5)运算符的使用

<html>
<head>
    <title>EL中的运算符</title>
</head>
<body>
<h1>算数</h1>
${3+4}<br/>
<h1>关系</h1>
${8>4} ${5<4}<br/>
<h1>逻辑</h1>
${true&&false}<br/>
<h1>EL特有的判断为空表达式</h1>
判断是否容器中是否存在A :${empty A}<br/> <%--如果是true,则没有值传过来,false则有值传过来,不是空--%>
判断请求参数是否传递了a:${empty param.a}<br/>
</body>
</html>

 

二、JSTL 的使用

概述:JSTL(Java server pages Standarded Tag Library,JSP 标准标签库)是由 JCP(Javacommunity Proces)所制定的标准规范,它主要提供给 Java Web 开发人员一个标准通用的标签库,并由 Apache 的 Jakarta 小组来维护。开发人员可以利用这些标签取代 JSP 页面上的 Java 代码,从而提高程序的可读性,降低程序的维护难度。
(1)导入 jar 包
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
(2)页面引用
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(3)核心标签
a.对容器操作
<html>
<head>
    <title>JSTL对容器的操作</title>
</head>
<body>
<%--形容器中存放内容--%>
<c:set var="A" value="aa" scope="session"/>
<c:set var="B" value="bb" scope="session"/>
<%--删除形容器中内容--%>
<c:remove var="B" scope="session"/>
<%--获取形容器中内容--%>
<c:out value="${A}" default="默认值"/>
<c:out value="${B}" default="默认值"/>
</body>
</html>
b.分支操作
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    int random = (int) (Math.random() * 100 + 1);
    pageContext.setAttribute("A", random);
%>
<b>单层if</b>
<c:if test="${A%2==0}">
    ${A}是偶数!
</c:if>
<hr>
<b>多层if</b>
<c:choose>
    <c:when test="${A>=90}">
        ${A}是优秀!
    </c:when>
    <c:when test="${A<90}">
        ${A}是良好!
    </c:when>
    <c:otherwise>
        ${A}是差!
    </c:otherwise>
</c:choose>
</body>
</html>
c.循环操作
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--
    var:变量名
    begin:从几开始
    end:到几结束
    step:每次增加几(step必须大于0)
-->
<b>for循环</b>
<c:forEach var="i" begin="1" end="9" step="1">
    <p>${i}</p>
</c:forEach>

</body>
</html>
<%--迭代器的操作--%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    UserDao dao = new UserDao();
    List<Users> list = dao.findAll();
    session.setAttribute("USERS", list);
    //过去的写法
    int i = 1;//迭代序号
    for (Users users : list) {
        out.print(i + ".." + users + "<br/>");
        i++;
    }
%>
<hr>
<!--
    var:迭代变量
    items:集合
    迭代序号
-->
<h1>现在的写法</h1>
<c:forEach var="users" items="${USERS}" varStatus="i">
    ${i.count}..+${i.index}+${users.user_name}<br>
</c:forEach>
</body>
</html>

d.迭代序号

<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    UserDao dao = new UserDao();
    List<Users> list = dao.findAll();
    session.setAttribute("USERS", list);
    //过去的写法
    int i = 1;//迭代序号
    for (Users users : list) {
        out.print(i + ".." + users + "<br/>");
        i++;
    }
%>
<hr>
<!--
    var:迭代变量
    items:集合
    迭代序号
-->
<h1>现在的写法</h1>
<c:forEach var="users" items="${USERS}" varStatus="i">
    ${i.count}..+${i.index}+${users.user_name}<br>
</c:forEach>
</body>
</html>

e.跳转操作

<html>
<head>
    <title>跳转标签</title>
</head>
<body>
<c:redirect url="2.jsp">
    <c:param name="a" value="abc"/>
    <c:param name="b" value="sfsf"/>
</c:redirect>
</body>
</html>

f.格式化标签

    页面引用

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>格式化标签</title>
    <%
        // 设置请求的编码集 处理中文乱码 只针对于post请求
        request.setCharacterEncoding("utf-8");
        Date date = new Date();
        pageContext.setAttribute("DATE", date);
    %>
<%--
    对日期进行格式化操作
    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    value:需要格式化的日期
    var:格式化之后的新名字
    scope:存放到那个容器中 默认是page
    pattern:格式化的样式
--%>
    <fmt:formatDate value="${DATE}" var="format" scope="page" pattern="yyyy年MM月dd日 HH:mm:ss"/>
    格式化之后的日期:${DATE}
<hr/>
<%--
    对数字进行格式化操作
    value:需要格式化的数字
    var:格式化之后的新名字
    scope:存放到那个容器中 默认是page
    pattern:格式化的样式
--%>
    <fmt:formatNumber value="${66.6666666}" var="num" scope="request" pattern="##.###"/>
    格式化之后的数字:${num}
</head>
<body>

</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夙愿-妍

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

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

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

打赏作者

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

抵扣说明:

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

余额充值