不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码

el表达式的出现是为了简化jsp中读取数据并写入页面的操作.

el表达式的功能不多,也很好记

读取域对象中的值,并写入到页面.

 

<%
pageContext.setAttribute("pk", "1");
request.setAttribute("rk", "2");
session.setAttribute("sk", "3");
application.setAttribute("ak", "4");
%> ${pageScope.pk}
${requestScope.rk}
${sessionScope.sk}
${applicationScope.ak}

我们使用 作用域.key的方式可以直接获取域对象中的值

我们也可以省略作用域

<%
pageContext.setAttribute("key", "1");
request.setAttribute("key", "2");
session.setAttribute("key", "3");
application.setAttribute("key", "4");
%> ${key}

注意了,如果我们省略作用域,那么表达式会按照 pageScope-->requestScope-->sessionScope-->applicationScope的顺序去查询匹配的key值.如果有一个域中查询到.则不会在查询其他域.

如果获取不到不会抛出异常

下面我们使用el表达式来操作object类型的数据

public class User {
private String name;
private int age; public User(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
<%
request.setAttribute("user", new User("张三", 22));
%>
${requestScope.user.name}
${requestScope.user.age}

注意啦!如果读取对象的属性.那么该对象必须实现属性相对应get()方法.否则抛异常!!!

el表达式也支持数据的运算

<%--数学运算--%>
${(1+2*3+1)/2%3}
<%--关系运算--%>
${1>4}
<%--> >= < <= == !=
gt ge lt le eq !=--%>
//注意啦!我们一般不会用符号运算,而是用字符代替.防止跟html标签冲突
<%--逻辑运算--%>
${true||false}
<%--三元表达式--%>
${3>1?"大于":"小于"}

el表达式的其他使用

读取请求参数

<%--获取请求参数中的值--%>
${param.age}

如果参数是数组类型

<%--获取值是列表的参数--%>
${paramValues.age[0]}
${paramValues.age[1]}

jstl(核心类库)

需要引入两个jar

jstl.jar   standard.jar

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

导入标签约束指定标签库命名空间

首先是设置域属性

<c:set scope="session" var="cskey" value="c标签设置session"/>//设置attribute
<c:remove scope="session" var="cskey"/>//删除attribute

scope是域范围:page,request,session,application. var是属性名.value则是属性值

if语句,注意 test中只能用el表达式

<c:if test="${3>2}">
3>2
</c:if>

if else 语句

<c:choose>
<c:when test="${crage==1}">
when1
</c:when>
<c:when test="${crage==2}">
when2
</c:when>
<c:otherwise>
when3
</c:otherwise>
</c:choose>

循环语句

<c:forEach var="i" begin="1" end="5" step="1">
当前循环:${i}
</c:forEach>

var 当前变量名,begin开始位置,end结束位置,注意这里的end="5"其实是 <=5 以上的会输出5次.另外值得一说的是,在var中声明的变量会存到pageContext域中.所以el表达式才可以取值

循环操作 集合

<%
List<User> users = new ArrayList<User>();
users.add(new User("张三",1));
users.add(new User("李四",2));
users.add(new User("王五",3));
request.setAttribute("users",users);
%>
<c:forEach  items="${users}" var="user">
循环用户:${user.name}${user.age}
</c:forEach>

循环操作 map

<%
Map<Integer,User> maps = new HashMap<>();
maps.put(1,new User("张三",1));
maps.put(2,new User("李四",2));
maps.put(3,new User("王五",3));
session.setAttribute("maps",maps);
%>

这个略微有些说法,var 中存储的其实是一个键值对,在el中 .key就是取map的key  .value就是取map的value

<c:forEach items="${sessionScope.maps}" var="entry">
循环用户Map:${entry.key}${entry.value.name}${entry.value.age}
</c:forEach>

以上就是el表达式和jstl标签的常用操作.

jsp之el表达式jstl标签的更多相关文章

  1. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  2. JavaWeb基础Day17 (JSP EL表达式 jstl标签库 beanutil工具类)

    JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <%  Java代码  %>  相当于写在service方法中. <%=java 变量或者表达式 %> ...

  3. 2.EL表达式&JSTL标签库常用方法

    1.EL表达式 Expression Language表达式语言,主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出. 格式为${表达式} EL表达式输出Bean的普通属性.数组属性.Li ...

  4. jsp&mvc开发模式&jstl标签&三层架构

    目录 jsp 概念 原理 jsp 的脚本 jsp的内置对象 指令 注释 mvc:开发模式 jsp演变历史 mvc 优缺点 El表达式 JSTL 标签 练习 三层架构:软件设计架构 案例:用户信息列表展 ...

  5. jsp与El,jstl知识点总结归纳

    jsp与El,jstl知识点总结归纳 jsp部分 一.jsp的三大指令 page ,include,taglib 1.jsp中的page指令 <% page %>-设置jsp 例如: &l ...

  6. 第75节:Java的中的JSP,EL和JSTL

    第75节:Java中的JSP,EL和JSTL 哭吧看不完的!!! Cookie和`Session 请求转发和重定向的区别: 地址不一样 请求次数也不一样 数据无法传递 4.跳转范围有限制 效率 请求转 ...

  7. JSP、EL、JSTL

    JSP(Java Server Pages) 什么是JSP Java Server Pages(Java服务器端的页面) 使用JSP:SP = HTML + Java代码 + JSP自身的东西.执行J ...

  8. 超全面的JavaWeb笔记day12<Jsp&JavaBean&El表达式>

    1.JSP三大指令 page include taglib 2.9个内置对象 out page pageContext request response session application exc ...

  9. JSP的EL表达式语言

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/expression-language.html: JSP表达式语言(EL)可以方便地访问存储在JavaB ...

随机推荐

  1. 【JS】---5 JS通过事件隐藏显示元素

    JS通过事件隐藏显示元素 在开发中,很多时候我们需要点击事件,才显示隐藏元素.那如何做到页面刚开始就把标签隐藏. 有两种方法: (1) display:none    <div id=" ...

  2. ASP.Net Core使用Ajax局部更新

    由于目前ASP.NET Core中没有提供Ajax帮助器,所以参照 上一篇帖文,使用data-ajax-*属性来使用jQuery Unobtrusive Ajax功能实现HTML的局部页面元素更新. ...

  3. C#通过PInvoke调用c++函数的备忘录

    目前知道的情况被调用的C/C++函数只能是全局函数 不能调用类中的成员方法 被调用的C函数必须使用extern “C“包含,保证采用的导出函数名生成规则和.NET一致 函数调用约定通常使用WINAPI ...

  4. 【AI测试】也许这有你想知道的人工智能 (AI) 测试--第二篇

    概述此为人工智能 (AI) 测试第二篇 第一篇主要介绍了 人工智能测试.测试什么.测试数据等.第二篇主要介绍测试用例和测试报告.之后的文章可能具体介绍如何开展各项测试,以及具体项目举例如何测试.测试用 ...

  5. centos安装elasticsearch-rtf5.5.4

    安装jdk 我的博文里面有 https://www.cnblogs.com/vinic-xxm/p/11825691.html 安装elasticsearch-rtf git clone git:// ...

  6. Ubuntu14 安装过程

    系统:Description:    Ubuntu 14.04.6 LTS平台:Oracle VM VirtualBox 先到阿里巴巴开源镜像站 https://opsx.alibaba.com/ 下 ...

  7. 上云测试,这些关键点你get 到没有

    导读,先从云化说起,再谈谈云化形态下,除了常规的功能测试,云化的测试,还需要有几个必须要get到的硬核指标,最后在分别详解这些关键点硬核指标是什么,和如何测试呢.这是个值得深思的问题,希望所有测试人都 ...

  8. C语言的常量

    #include<stdio.h> int main(void) { ; //定义一个常量,不能被修改,可以赋初值:常量的标识符建议使用大写字母 ; //初始化 printf(" ...

  9. AtCoder abc 141 F - Xor Sum 3(线性基)

    传送门 题意: 给出\(n\)个数\(a_i\),现在要将其分为两堆,使得这两堆数的异或和相加最大. 思路: 考虑线性基贪心求解. 但直接上线性基求出一组的答案是行不通的,原因之后会说. 注意到如果二 ...

  10. 解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”

    centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...