jstl
今日内容
l JSTL标签库
l EL函数
l 自定义标签库开发
l JSP模式和案例(*****)
1.1 上次课内容总结
JSP技术:
* JSP:Java Server Pages
* JSP运行原理:
* JSP先会被翻译成Servlet,这个Servlet编译执行.
* JSP脚本元素:
* <%! %> :翻译成全局.
* <% %> :翻译成service方法内部的代码.(不能定义方法)
* <%= %> :翻译成out.print(内容);
* JSP注释:
* HTML的注释 :<!-- HTML的注释 -->
* Java的注释 :// /**/ /***/
* JSP的注释 :<%-- JSP的注释 --%>
* JSP指令:
* page、include、taglib
* page:设置JSP页面的属性.
* include:包含一个页面.
* taglib:JSP引入的标签库.
* JSP内置对象:
* request、response、page、out、exception、session、application、config、pageContext
* JSP动作标签:
* <jsp:forward>
* <jsp:include>
***** 静态包含和动态包含的区别 ?
* <jsp:param>
* <jsp:useBean>
* <jsp:setProperty>
* <jsp:getProperty>
JavaBean及内省:
* JavaBean:就是一个Java类.这个类满足了一定的格式:
* 无参数的构造方法
* 属性私有
* 私有的属性提供public的set和get方法.
* 作用:封装和处理数据.
* 内省:获得JavaBean属性及对应的属性的get和set方法.
* 利用内省完成类似于<jsp:setProperty name=”” property=”*”>
BeanUtils:工具类.
* 使用.
1.2 EL表达式.
1.2.1 EL的概述.
EL:Expression Language(表达式语言)
作用:在JSP中获取域中的值.
* 获取数据 :获得的是域对象中的数据
* 执行运算 :将域中的数据获得到直接运算.
* 提供常见的web对象:
* 调用Java的函数:
语法:${ EL表达式 }
1.2.2 EL获取数据
<h1>使用EL获得数据</h1>
<%
// 向四个域范围存值.
pageContext.setAttribute("name", "pageVal");
request.setAttribute("name", "reqVal");
session.setAttribute("name", "sessVal");
application.setAttribute("name", "appVal");
%>
<h3>传统方式获得值</h3>
<%= pageContext.getAttribute("name") %>
<%= request.getAttribute("name") %>
<%= session.getAttribute("name") %>
<%= application.getAttribute("name") %>
<h3>使用EL表达式获得值</h3>
<!-- EL的好处:1.书写方便. 2.使用EL不会有空指针异常. 3.简写形式-->
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }
简写:${ name } <!-- 简写底层使用pageContext.findAttribute(String name); -->
<h3>使用EL获得数组的数据</h3>
<%
String[] arrs = {"美美","小房","小默"};
pageContext.setAttribute("arrs", arrs);
%>
${ arrs[0] }
${ arrs[1] }
${ arrs[2] }
<h3>使用EL获得List集合的数据</h3>
<%
List<String> list = new ArrayList<String>();
list.add("小柯");
list.add("小宁");
pageContext.setAttribute("list", list);
%>
${ list[0] }
${ list[1] }
<h3>使用EL获得Map集合的数据</h3>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("aaa", "耀阳");
map.put("bbb", "高虎");
map.put("ccc.ddd", "小李");
pageContext.setAttribute("map", map);
%>
${ map.aaa }
${ map.bbb }
${ map["ccc.ddd"] }
<h3>使用EL获得对象的数据</h3>
<%
Person p = new Person();
p.setName("美美");
p.setAge(32);
pageContext.setAttribute("p", p);
%>
获得姓名:${ p.name }
获得年龄:${ p.age }
<h3>使用EL获得对象集合中的数据</h3>
<%
List<Person> pList = new ArrayList<Person>();
pList.add(new Person("小张",23));
pList.add(new Person("小李",28));
pageContext.setAttribute("pList", pList);
%>
${ pList[0].name }
${ pList[0].age }
${ pList[1].name }
${ pList[1].age }
EL表达式
* [] 和 . 区别?
* []放的是下标.(像数组、List集合) . 放的是属性(像Map集合、对象.)
* 如果属性中包含的特殊字符.只能使用[] ${ map["ccc.ddd"] }
1.2.3 EL执行运算
<h1>EL执行运算</h1>
<h3>算数运算</h3>
<%
pageContext.setAttribute("n1", "10");
pageContext.setAttribute("n2", "20");
pageContext.setAttribute("n3", "30");
pageContext.setAttribute("n4", "40");
%>
${ n1 + n2 }
<h3>关系运算</h3>
${ n1 < n2 } ${ n1 lt n2 }<br/>
${ n1 > n2 } ${ n1 gt n2 }<br/>
${ n1 <= n2 } ${ n1 le n2 }<br/>
${ n1 >= n2 } ${ n1 ge n2 }<br/>
${ n1 == n2 } ${ n1 eq n2 }<br/>
${ n1 != n2 } ${ n1 ne n2 }<br/>
<h3>逻辑运算</h3>
${ (n1 < n2) && (n3 < n4) } ${ (n1 < n2) and (n3 < n4) }<br/>
${ (n1 < n2) || (n3 < n4) } ${ (n1 < n2) or (n3 < n4) }<br/>
${ !(n1 < n2) } ${ not (n3 < n4) }<br/>
<h3>三元运算</h3>
${ n1 == n2 ? "n1==n2":"n1!=n2" }
${ user == null ? "user为空":user }
${ not empty user ? "user为空":user }
1.2.4 操作web常见对象:
11个常见的web对象
pageScope :获得pageContext对象中存的数据
requestScope :获得request对象中存的数据
sessionScope :获得session对象中存的数据
applicationScope :获得application对象中存的数据
param :获得请求参数. --- request.getParameter();
paramValues :获得请求参数.返回的是数组. --- request.getParameterValues();
*代码
${ param.name } --- <%= request.getParameter("name") %>
${ paramValues.hobby[0] }${ paramValues.hobby[1] } --- <%= Arrays.toString(request.getParameterValues("hobby")) %>
header :获得请求头信息.获得的是一个key对应一个value的头信息.getHeader();
headerValues :获得请求头信息.获得的是一个key对应多个value的头信息.getHeaders();
* 代码:
<!-- 获得请求头信息 -->
${ header.referer }<!-- referer:网站来源 防盗链 -->
<!-- User-Agent:获得客户端浏览器类型 -->
${ header["User-Agent"] }
initParam :获得全局初始化参数.
<!-- 获得全局初始化参数 -->
${ initParam.name }
${ initParam.pass }
cookie :获得cookie的信息
* ${ cookie.autoLogin.value }
pageContext :获得其他的8个内置对象.
* 获得工程名 ${pageContext.request.contextPath}
* 获得IP地址 ${pageContext.request.remoteAddr}
1.3 JSTL标签库
1.3.1 JSTL概述
什么是JSTL
JSTL(JSP Standard Tag Library,JSP标准标签库)
标签:其实就是一段Java代码.(好处:代码的复用性.)
为什么学习JSTL
1.提供代码的复用性.
2.提高代码的可读性.
JSTL 结合EL 表达式 替换传统页面<%%>
如何使用JSTL
下载JSTL相应jar包:
http://tomcat.apache.org/taglibs/standard/
JSTL的版本:
* JSTL1.0 、JSTL1.1 、JSTL1.2
* JSTL1.0 在JavaEE1.4之前的年代使用.EL表达式没有被纳入官方规范.
* 使用JSTL1.0不支持EL表达式.
* JSTL1.1和JSTL1.2基本一致.(支持EL表达式.)
JSTL的使用:
* 1.引入jar包
* standard.jar
* jstl.jar
* 2.创建一个JSP,再JSP文件中引入JSTL的标签库
JSTL中有很多标签库:核心标签库(core)、fmt标签库(国际化标签库)、xml标签库(操作XML)、sql标签库(操作sql)、函数库(fn)
* 引入标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
* 3.使用标签库
jstl jar 包
https://yunpan.cn/cYg4dvvFSWDbW 访问密码 1fac
jstl的更多相关文章
- JSP 标准标签库(JSTL)
JSP 标准标签库(JSTL) JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签, ...
- JSTL标签 参考手册
前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...
- JavaWeb_day08_EL JSTL
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day08 EL JSTL EL表达式 语法:${} ...
- java web学习总结(三十) -------------------JSTL表达式
一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...
- [Java] JSP笔记 - EL、JSTL 常用标签
一. 什么是 EL 语言 表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言. 二.EL 语言的作用 为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMASc ...
- JSTL 操作符
el表达式的取值默认顺序: pageScope requestScope sessionScope applicationScope 结构,采用.导航,也称为存取器 ${us ...
- JSP页面JSTL提供的函数标签EL表达式操作字符串的方法
首先在jsp页面导入标签<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions&quo ...
- JSTL标签库
JSP页面作为内嵌java的Html简化了Servlet在控制页面显示的语法,但JSP脚本中的表达式功能不够强大,语法也稍显繁杂,EL(Expression Language)表达式语言的出现能够大大 ...
- 重温JSP学习笔记--与日期数字格式化有关的jstl标签库
上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: &l ...
- 重温JSP学习笔记--JSTL标签库
以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是 ...
随机推荐
- c语言游戏推箱子
前两天做了推箱子小游戏,看似简单的一个小游戏背后却 有巨大的秘密,这秘密就是一大堆逻辑. 自从学习了函数过后,的确是解决了很多问题,而且调用很方便,尽管我现在都不是很会调用. 写完一个函数,准备测试一 ...
- 十分钟轻松让你认识Entity Framework 7
EF7不是在EF6上更新,而是完全重写了.它完全支持.NET Core runtime,也就是说以后你可以在Mac或者是Linux机器上使用EF了. https://github.com/nichol ...
- Android SDK 墙内更新方法 速度杠杠的
- JS组件系列——表格组件神器:bootstrap table(二:父子表和行列调序)
前言:上篇 JS组件系列——表格组件神器:bootstrap table 简单介绍了下Bootstrap Table的基础用法,没想到讨论还挺热烈的.有园友在评论中提到了父子表的用法,今天就结合Boo ...
- 反射在ADO.NET中的运用(你还在每个项目中循环遍历DataTable吗)
图片有点大哈,但大更能说明问题.您是不是每个项目都在重复的做图片中的事情-----循环把数据库中返回的表转化为实体对象.是不是每次都在抱怨这样的重复工作.字段越多抱怨越多!不用抱怨了.当你看到这篇文章 ...
- 在oracle中,如何当前系统时间往前推7天
' day from dual 另附: 当前时间减去7分钟的时间 ' MINUTE from dual 当前时间减去7小时的时间 ' hour from dual 当前时间减去7天的时间 ' day ...
- 【javascript】箭头函数
ES6标准新增了一种新的函数:Arraw Function(箭头函数). x => x * x 这个函数相当于 function (x){ return x * x; } 题外话:user st ...
- 即使用ADO.NET,也要轻量级实体映射,比Dapper和Ormlite均快
不管出于什么原因,有时候框架人员摒弃了NH或EF,而使用原生数据库访问对象. 为了优美的编程,用上我写的轻量级映射扩展方法吧 目的:将SqlDataReader自动转换成T类型 代码如下: /// & ...
- 软件工程(FZU2015)赛季得分榜,第一回合
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- sublime编辑器插件
sublime---插件 http://www.cnblogs.com/dudumao/p/4054086.html sublime--- Emmet插件 使用方法 http://docs.emme ...