一、el + jstl 入门
1. EL 全名为Expression Language。它是一种数据访问语言
el 表达式
2. EL 能实现如下功能:
1) 使用变量访问web域中存储的对象 ${user } 从page, request, session, application
2) 访问javabean的属性 ${user.address.city } usr为javabean对象存于域中
3) 执行基本的逻辑运算, 如大于小于的比较
4) 直接使用隐式对象, 有11个隐式对象
5) 调用 el 函数, 可以自定义函数
3. el 表达式用在哪里
1) 在 jsp 页面直接输出数据
2) 在标签中使用el直接为属性赋值
4. el 表达式获取数据
在jsp页面使用el表达式可以轻松地获得web域中的对象
并对 javabean 、 数组、 list 、 map 进行取值
5. 需要对 web 域中的 list 和map 集合进行迭代就需要结合 jstl 迭代标签
JSTL是sun公司开发的一套标签库
使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码
在页面中使用JSTL标签需完成以下2个步骤:
1) 导入jstl.jar和standard.jar这两个JSTL的jar文件。
2) 在JSP页面中使用<%@ taglib url=“” prifix=“” %>元素导入标签库。
最常用的 jstl 标签为 forEach 和 if 标签
<c:foreach var=”” items=””>
<c:if test=””>
6. el表达式可以进行逻辑运算
7. el表达式中的保留关键字
重点: el 取值 从四个域中取
取出javabean的属性
取出容器的内容 数组 list map
jstl标签
导入jar包
在jsp页面通过taglib指令导入标签库
forEach迭代标签 if条件判断
二、 el 中的11 个隐式对象
隐含对象名称 描 述
pageContext 对应于JSP页面中的pageContext对象
pageScope 代表page域中用于保存属性的Map对象[page对象中有一个保存属性(通常由getAttribute函数获得)的 map 成员变量 ]
requestScope 代表request域中用于保存属性的Map对象
sessionScope 代表session域中用于保存属性的Map对象
applicationScope 代表application域中用于保存属性的Map对象
param 表示一个保存了所有请求参数的Map对象
paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
header 表示一个保存了所有http请求头字段的Map对象
headerValues 同上,返回string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
cookie 表示一个保存了所有cookie的Map对象
initParam 表示一个保存了所有web应用初始化参数的map对象
隐式对象的具体用途
1. pageContext
获得servlet上下文路径 (web应用名)
2. pageScope、requestScope、sessionScope、applicationScope
准确地获得四个域中的对象
3. param、paramValues
获得请求参数,一般用于做表单的回显
4. header、headerValues
获得请求参数
5. cookie
获得浏览器发送的cookie
6. initParam
获得web 初始化参数
三、 el 函数
1. 我们可以开发自定义函数,用于调用java类的方法
案例: 对页面输出的内容进行 html 转义
实现步骤:
1) 编写一个java类, 定义一个静态方法
去tomcat的例子中拷贝一个现成的
%tomcat安装目录%\webapps\examples\WEB-INF\classes
2) 编写标签库描述符(tld)文件,在tld文件中描述自定义函数
找个现成的修改一下
%tomcat安装目录%\webapps\examples\WEB-INF\jsp2
3) 在jsp页面中导入标签库 即可使用函数
<%@ taglib prefix="myfn" uri="/WEB-INF/myfn.tld" %>
<%@ taglib prefix="myfn" uri="http://www.itcast.cn/myfn" %>
帖子的内容 : ${myfn:transfer(requestScope.data) }
2. sun 公司针对常用的字符串处理在jstl技术中提供了el函数中
==============el表达式==============
数据访问语言 用于取数据
从四个域取对象
取javabean的属性
取容器的元素 arr list map
11个隐式对象
pageContext、param、paramValues、header、headerValues
pageScope、requestScope、sessionScope、applicationScope
cookie、initParam
el自定义函数
1) 写一个java类,定义一个静态方法
2) 在 WEB-INF目录下写 tld文件
3) 在jsp页面引入tld标签库 直接使用
-------el的应用------
1, el表达式生成正确的链接
<form action="${pageContext.request.contextPath }/servlet/Servlet1"
project->properties->web project settings
修改 Context root
之后链接依然正确
2, requestScope等于request的所有属性, getAttributes()可以遍历出
requestScope中所有内容
-----------------------------------
============ jstl标签==================
导入两个jar包 Jstl.jar Standard.jar
在jsp页面要声明引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
forEach 迭代标签
if 条件判断
----------------------
el表达式:
request.setAttribute("name","xx");
${name}会去4个域对象中查找page,request,session,applicaion
如果找不到显示 "" 空串
${usr.usrname} 调用usr.getusrname()
el表达式是一种表现层的技术
集合与数组都: ${list[3]}
map : ${map.key}
map : ${map["1"]}
----------------------------------
jstl简单逻辑:
jstl.jar
standard.jar
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
迭代items中指定的元素, 每次将元素以var为关键字存入page域
标签体执行次数为容器的长度
<c:foreach var="element" items="${arr}">
${element}
</c:foreach>
<c:foreach var="entry" items="${map}">
${entry.key} = ${entry.value}
</c:foreach>
<c:if test="true">
statments
</c:if>
<c:if test=${1>1}>
statments
</c:if>
<c:if test=${usr==null}>
请登录
</c:if>
<c:if test=${usr!=null}>
你好 ${usr.usrname} .
</c:if>
重点:
el取值, 从4个域中取, 取出javabean的属性
取出容器的内容, 数组,list,map
${ 3 mod2 }
jstl标签:
导入jar包, 在jsp页面,通过tablib指令导入标签库
foreach迭代, if判断
--------------------------
request内置了3个map, attributes, parameters, headers
| |
requestScope param
------------------
el:
${pageContext}
从url中取出参数
${param}
${paramValues}
取出请求头
${header}
${headerValues}
${pageScope}
${sessionScope.usr.usrname}
${requestScope} request中map
${applicationScope}
${cookie}
${cookie.JSESSIONID.name}
${cookie.JSESSIONID.value} Map<name,cookie>
所有初始化参数
${initParam}
---------------------
request.getContextPath()获得webapp名称
${pageContext.request.contextpath}
-----------------------
${pageContext.request.parameter}
${param}
------------------------------
native2ascii命令
往properties里, 写的中文要经过ascii编码
ResouceBoundle
----------------------
使用超链接提交时, 可以使用javascript
生成一个表单, 转为post方式
---------------
sina.com 域名
www 主机名
mail 主机名
---------------------------