简述jsp之EL表达式和jstl及其使用
Jsp的指令之include指令
include指令:代表的是页面的包含。
作用:可以把一些jsp的页面包含在一起,对外展示。
页面的布局,现在已经不用了,现在都用css+div进行布局。
include的语法
<%@ include file="要包含的页面" %>
比方说/personal/WebContent/jsp/base/tag.jsp需要引入tag.jsp,则<%@ include file="/jsp/base/tag.jsp" %>
include的原理
include指令是静态包含的原理,默认把其他包含的所有的文件的源代码全部复制到main.jsp的文件中一起翻译成一个.java的文件,一起编译成一个.class,最后执行。
Jsp的指令之taglib指令
taglib指令:作用是用来导入其他的标签库。
taglib的语法
<%@ taglib uri="" prefix="" %>
uri:引入标签的地址
prefix:标签的前缀名称,每一种标签都有自己的前缀名称
Jsp的内置对象
jsp的内置对象:可以在jsp页面中直接使用的对象。
内置对象的引用,内置对象真实对象,内置对象的常用方法
引用 内置对象 常用方法
request HttpServletRequest 域对象,获取请求参数
response HttpServletResponse 响应头,回写cookie,输出中文
session HttpSession 域对象
application ServletContext 域对象,getRealPath(),getResourceAsStream()
config ServletConfig 获取初始化参数
page Object
exception Throwable 获取的异常的信息
out ProntWriter 打印输出流
pageContext pageContext 代表的是当前页面的上下文对象(重点)
为什么内置对象就可以直接来使用呢?
jsp的文件在翻译成.java文件的时候,定义了内置对象,并且赋值了。
总结:
jsp的内置对象可以在jsp页面中直接来使用。
el表达式与jstl标签库及其使用
el表达式:翻译是表达式语言,jsp内置的一种表达式的语言。
目的:el表达式的出现替换掉java的脚本。
el表达式的写法:
在jsp页面上:${ 表达式语言 }
el表达式的作用:
获取域对象中的值(必须掌握)
执行运行(符号掌握)
el表达式内置的常用的对象(掌握)
调用java的方法(了解)
总结:
从域对象中取值,2种写法:
.的方式:如果key值有特殊字符,不可以取值
[""]的方式:如果key值有特殊字符,也可以取值
如果使用el表达式获取不存在的key值,返回""字符串
el表达式获取域对象中的数据
注意:el表达式操作的都是域对象中的值。
学会el表达式在域对象中获取值
代码:
<h3>从数组中获取值</h3>
<%
String [] arr = {"美美","小风","小花"};
// EL表达式获取的是域对象中的值
pageContext.setAttribute("arr", arr);
%>
${ pageScope.arr[0] }
${ pageScope.arr[1] }
${ arr[2] }
<h3>从Map集合获取值</h3>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("aaa", "美美");
map.put("bbb", "小风");
map.put("ccc", "小花");
pageContext.setAttribute("map", map);
%>
${ map.aaa }
${ map.ccc }
<h3>从Java的对象中获取值</h3>
<%
User user = new User();
user.setUsername("aaa");
user.setPassword("123");
pageContext.setAttribute("user", user);
%>
${ user.username }
${ user.password }
<h3>从List集合中获取Java的对象的值</h3>
<%
List<User> list = new ArrayList<User>();
list.add(new User("aaa","123"));
list.add(new User("bbb","456"));
list.add(new User("ccc","789"));
pageContext.setAttribute("list", list);
%>
${ list[0].username }
el表达式的运算符
el表达式支持运算。
常用的运算符
+ - * / %
== eq
!= ne
< lt
> gt
<= le
>= ge
&& and
! not
|| or
empty 判断对象是否是null或者判断集合的长度是否为0
el表达式的内置对象
pageScope 代表当前的页面
requestScope 代表request范围
sessionScope 代表session
applicationScope 代表application
param 代表请求的参数(request.getParameter())
paramValues 代表请求的参数(request.getParameterMap() Map<String,String[]>)
header 代表获取请求头
headerValues 代表请求头
initParam 代表的是全局的初始化参数
cookie 代表的所有的Cookie对象
pageContext 1个顶9个,获取到其他的内置对象
${ pageContext.request.contextPath } 代表WEB项目的虚拟路径
<%
pageContext.getRequest().getContextPath(); /personal
%>
${pageContext.request.contextPath} /personal
jstl标签库
jstl:jsp的标准的标签库,是Apache提供的标签库,需要导入jar包。
jstl依赖el表达式,jstl的标签,获取值使用el表达式来取值。
导入2个jar包,如果开发工具使用的是Myeclipse不用导入开发的jar包,否则,需要导入jar包。
jstl.jar
standard.jar
jstl标签库的语法
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
jstl的原理:jstl的标签,真正的运行时后台的java类在运行。
jstl的标签
out标签
作用:输出内容(域对象中的值,常量)
属性:
value:必须要出现的,代表输出的内容
default:代表默认值
escapeXml:设置是否转义
代码:
<h3>out标签</h3>
<%
request.setAttribute("msg", "out标签");
%>
<c:out value="${ msg }"></c:out>
<c:out value="<a href='http://www.baidu.com'>点击</a>" escapeXml="false"></c:out>
页面输出结果:out标签 点击(点击可跳转至百度)
set标签
作用:向域对象中存入值
属性:
var:key值
value:值
scope:作用域(page request session application)
代码:
<h3>set标签</h3>
<%
request.setAttribute("msg", "A");
%>
<c:set var="msg" value="B" scope="request"></c:set>
${ msg }
页面输出结果:B
remove标签
作用:从域对象中移除值
属性:
var:移除的key值
代码:
<h3>remove标签</h3>
<c:set var="msg" value="美美"/>
${ msg }
<h3>已经把msg移除了</h3>
<c:remove var="msg"/>
${ msg }
if标签
作用:进行语句的判断。注意:只有if,没有else
属性:
test:必须要出现的,判断的条件
var:把判断条件的结果(true或者false)保存到var变量中
scope:作用域
代码:
<h3>if标签</h3>
<%
int n = 20;
request.setAttribute("n", n);
%>
<c:if test="${ n eq 10 }" var="i">
<font color="red">n=10</font>
</c:if>
<c:if test="${ n ne 10 }">
<font color="blue">n!=10</font>
</c:if>
${ i }
页面输出结果:n!=10 false
choose标签
作用:用来进行判断,但是复合的标签
<c:choose>
<c:when test=""></c:chen>
<c:when test=""></c:chen>
<c:otherwise></c:otherwise>
</c:choose>
属性:
关注when标签,test属性
代码:
<%
int n = 10;
request.setAttribute("n", n);
%>
<c:choose>
<c:when test="${ n eq 20 }">
n=20
</c:when>
<c:otherwise>
n=其他
</c:otherwise>
</c:choose>
页面输出结果:n=其他
forEach标签
作用:用来迭代数据
forEach当成普通的for循环。for(int i=1; i<=10; i++){}
forEach当成增强的for循环。for(String key : 集合){}
属性:
var:声明变量
begin:从哪开始
end:到哪结束
step:步长
varStatus:在迭代的过程中会产生一些信息,把信息保存在varStatus属性。其中属性有一些值:
count:代表计数
index:代表下标
first:判断是否是第一个元素
last:判断是否是最后一个元素
current:代表当前迭代的元素
items:代表的是要迭代的集合(数组 list set map)
代码:
<%@page import="com.pers.domain.User"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 导入JSTL的标签库 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
for(int i=0;i<=10;i++){
}
%>
<h3>普通for循环</h3>
<c:forEach var="j" begin="0" end="10" step="1" varStatus="vs">
${ vs.count }
</c:forEach>
<h3>模拟增强for循环</h3>
<c:forEach var="s" items="${ list }">
${ s }
</c:forEach>
<h3>遍历数据,数据需要存入在域对象中,遍历List集合</h3>
<%
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
request.setAttribute("list", list);
%>
<c:forEach var="s" items="${ list }">
${ s }
</c:forEach>
<h3>遍历Map集合</h3>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${ map }">
${ entry.key } -- ${ entry.value }
</c:forEach>
<h3>List集合中有Java对象</h3>
<%
List<User> ulist = new ArrayList<User>();
ulist.add(new User(1,"张三","zhangsan123","zhangsan@163.com"));
request.setAttribute("ulist", ulist);
%>
<c:forEach var="user" items="${ ulist }">
${ user.username } -- ${ user.email }
</c:forEach>
</body>
</html>
简述jsp之EL表达式和jstl及其使用的更多相关文章
- JSP、EL表达式、JSTL标签库干货(建议收藏)
JSP(Java Server Pages)类似于ASP技术,它是在传统的网页HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件, ...
- JSP和El表达式和JSTL标签库使用
核心标签库: <%@ page language="java" import="java.util.*" pageEncoding="utf-8 ...
- JSP、EL表达式、JSTL
JSP 1.什么是jsp? Java Server Pages: java服务器端页面.可以理解为一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码.其本质就是一个Servlet. ...
- 个人整理的jsp、EL表达式、JSTL标签库的笔记,少概念多实用,需要的留下邮箱,会第一时间分享原稿PDF给大家!
jsp 第一章 jsp介绍及对比servlet 作用: 动态网页技术,动态的从数据库获取数据 jsp和servlet的优缺点: jsp优点:页面表现方便,利于写html代码 jsp缺点:业务逻辑处理麻 ...
- jsp EL表达式和JSTL标签if-else if-else用法
java web javaEE ,jsp EL表达式和JSTL标签if-else if-else四种用法一.条件运算符 ${user.gender==?'男':'女'} 二.if() <c:if ...
- jsp页面使用EL表达式 使用Jstl标签库中的标签,需要引入jstl.jar和standard.jar
spring boot 中使用jstl 首先在pom中加入 <dependency> <groupId>jstl</groupId> <artifactId& ...
- jsp之el表达式jstl标签
不管是el表达式还是jstl标签最终的目的都是要消除jsp中的java代码,当然是消除显式的java代码 el表达式的出现是为了简化jsp中读取数据并写入页面的操作. el表达式的功能不多,也很好记 ...
- jsp(3,6,9) EL表达式及JSTL
1. jsp 1.1jsp是什么 全称: Java Server Pages,java服务器页面.和Servlet一样,是sun公司定义的一种动态网页开发技术. 特点:基于html模版,可以在h ...
- [转]EL表达式和JSTL表达式实例
/* **Title:EL表达式和JSTL表达式实例 **Author:Insun **Blog:http://yxmhero1989.blog.163.com/ */ 为了方便写JSP,我们引入了E ...
随机推荐
- static成员变量与返回对象的引用
(1)用static修饰类成员变量(属性),表明该变量是静态的,无论创建多少对象,都只创建一个一个静态属性副本,也就是对象们共享同一个静态属性,这个方法常用的一个用途就是用来计算程序调用了多少次这个类 ...
- hdu 1002
ps:wa了好多次,然后才发现是输入的时候%s和%s要隔开一个空格,我想当然了... 代码: #include "stdio.h" #include "string.h& ...
- Java并发编程学习笔记(二)——对象的共享
主要概念:可见性.重排序.失效数据.最低安全性.发布.逸出.线程封闭(Ad-hoc.栈封闭.ThreadLocal类).不变性.Final域.事实不可变对象. 1.在没有同步的情况下,编译器.处理器以 ...
- Java基础一
这是在网上找的知识点 覆盖方法必须满足的条件: 1)子类方法的名称.参数签名和返回类型必须与父类方法的名称.参数签名和返回类型一致,修饰符可以相同也可以不同,但子类的访问权限不能低于父类的访问权限. ...
- Map循环的三种方法
import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class MapTest { pu ...
- re模块详解
#!/usr/bin/env python #-*- coding:UTF-8 -*- ##################################################### # ...
- Android手机刷机失败的自救方法
刷机对于一些android手机的高级用户来说已经是家常便饭了,很多新手也都跟着教程轻松了学会刷机.升级系统,也都开始经常在网上搜罗一些自制的系统进行刷机,体验新系统带来的新感觉.但是有句古话叫常在河边 ...
- REDIS 事务机制
基本事务操作: 任何数据库都必须要保证一种原子执行操作:最基本的原子执行操作肯定是需要提供: 举一个例子来说明: 当对某个Key 做一个统计: 可能不同的Client做它那部分的统计,一段时间后,服务 ...
- UDP的使用
// // 该类管理所有的UDP发送 #import <Foundation/Foundation.h> #import "AsyncUdpSocket.h" @pr ...
- 修改hive分区表,在分区列前增加一个字段
本文主要为了测试,在有数据的分区表中增加新的一个非分区字段后,新数据加入表中是否正常. 原始数据 1;zhangsan 2;zhangsan 3;zhangsan 4;lisi 5;lisi 6;li ...