文章目录
1. EL表达式
1.1 EL (Expression Language)
- Expression Language, 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
- 作用:作用域中获得属性 – 只有作用域能把Servlet中的值回传给JSP
String admin_name = "王晓霞";
String[] names = { "张三", "李四", "王五" };
request.setAttribute("admin_name", admin_name);
request.setAttribute("names", names);
request.getRequestDispatcher("EL.jsp").forward(request, response);
<body>
<h1>EL 表达式</h1>
${admin_name}<br/>
${requestScope.names[0]}
</body>
1.2 EL 表达式执行运算
- EL提供.和[]两种运算符来获取数据
1.3 EL 隐式对象(11个)
隐含对象名称 | 描 述 |
pageContext | 对应于JSP页面中的pageContext(页面上下文)对象(注意:取的是pageContext对象。) ${pageContext.request.localAddr } ${pageContext.request.contextPath } ==引用css、js、img== ${pageContext.request.localName } ${pageContext.request.localPort } ${pageContext.session.id } ${pageContext.response.bufferSize } |
pageScope | pageScope 代表page域中用于保存属性的Map对象 |
requestScope | 代表request域中用于保存属性的Map对象 |
sessionScope | 代表session域中用于保存属性的Map对象 |
applicationScope | 代表application域中用于保存属性的Map对象 |
cookie | 表示一个保存了所有cookie的Map对象 |
param | 表示一个保存了所有请求参数的Map对象 http://localhost:8088/JSPDemo01/EL.jsp?id=7 ${param.id } |
paramValues | 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[] http://localhost:8088/JSPDemo01/EL.jsp?id=7&city=jinan&city=shanghai&city=jiangxi ${paramValues.city } |
header | 表示一个保存了所有http请求头字段的Map对象 |
headerValues | 同上,返回string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”] |
initParam | 表示一个保存了所有web应用初始化参数的map对象 |
1.4 运算符
-
算术运算符
+ 、-、 *、 /(div)、 %(mod)${8/3} 2.6666666666666665
-
关系运算符
== 或 eq
!= 或 ne
< 或 lt
<= 或 le
> 或 gt
>= 或 ge -
逻辑运算符
&& 或 and
|| 或 or
! 或 not -
empty 运算符
<c:if test="${empty list }">没有数据</c:if>
<c:if test="${not empty list }"></c:if>
1.5 EL 函数库(Sun)
Sun公司的标准函数库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
${fn:length(requestScope.list)}
${fn:replace("sadasqeqw","a","A") }
${fn:substring("abcdefg",2,3) }
${fn:startsWith("abc21321","abc") }
${fn:toLowerCase("AABBddc") }
${fn:toUpperCase("AABBddc") }
${fn:trim(" abc21321 ") }
2. JSTL
2.1 JSTL
- JavaServer Pages Standard Tag Library , JSP标准标签库
- 标准通用的标签函数库
2.2 JSTL需要导入的包(Eclipse)
- Maven 依赖
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
2.3 JSTL标签库分类
2.4 使用<%@ taglib %> 指令引用JSTL标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
2.5 JSTL标签库 – 核心标签库 C
-
<c:set> – 作用域中设置变量
<c:set var="uname" value="lisi" scope="request"></c:set> scope :表示作用范围
-
<c:out> – 输出变量值
<c:out value="${requestScope.uname}"></c:out>
-
<c:remove> – 作用域中移除变量
<c:remove var="uname" scope="request"/>
-
<c:catch> 异常处理
-
<c:if> : 条件判断
<c:if test="${uname=='admin'}">管理员</c:if> <c:if test="${uname=='lisi'}">保洁员</c:if>
-
<c:choose>
-
<c:when>
-
<c:otherwise>
<c:set var="number" value="500"></c:set> <c:choose> <c:when test="${number < 0 }"> 小于 0 </c:when> <c:when test="${number >= 0 and number < 70 }"> 0 ~ 69 </c:when> <c:when test="${number >= 70 and number < 100 }"> 70 ~ 99 </c:when> <c:when test="${number >= 100 and number < 180 }"> 100 ~ 179 </c:when> <c:otherwise>大于180</c:otherwise> </c:choose>
-
<c:forEach> : 标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。
<%
List<Student> list = new ArrayList<>();
list.add(new Student(11, "张三", "123456", 19));
list.add(new Student(2, "李四", "666666", 20));
list.add(new Student(53, "王五", "123456", 21));
request.setAttribute("list", list);
%>
<c:if test="${empty list }">没有数据</c:if>
<c:if test="${not empty list }">
<table border="1">
<tr>
<td>编号</td>
<td>用户名</td>
<td>密码</td>
<td>年龄</td>
<td>操作</td>
</tr>
<c:forEach items="${list}" var="stu" varStatus="status">
<tr>
<td>${status.count}</td>
<%-- <td>${stu.id}</td> --%>
<td>${stu.username}</td>
<td>${stu.password}</td>
<td>${stu.age}</td>
<td><a href="">编辑</a> <a
href="javascript:delStu(${stu.id})">删除</a></td>
</tr>
</c:forEach>
</table>
</c:if>
- varStatus属性
- <c:forTokens> : 用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的。
<c:set var="word" value="This is a cat."></c:set>
<c:forTokens items="${word }" var="w" delims=" ">
${w } <br/>
</c:forTokens>
-
<c:param>:
<c:param>标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,如果传递的参数值为“中国”,则将其转换为“%d6%d0%b9%fa”后再附加到URL地址后面,这也就是使用<c:param>标签的最大好处。 -
<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。
<c:url var="myURl" value="demo2.jsp">
<c:param name="stuName">张三</c:param>
<c:param name="stuAge">20</c:param>
</c:url>
<a href=${myURl}>我的链接</a>
http://localhost:8088/JSPDemo01/demo2.jsp?stuName=%E5%BC%A0%E4%B8%89&stuAge=20
- <c:redirect> 重定向
- <c:import> 导入其他页面资源
2.6 国际化标签 i18n
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
- 示例
<fmt:formatNumber value="2131241234.5234231" pattern="#,###.####"></fmt:formatNumber>
<fmt:formatDate value="<%=new Date() %>" pattern="yyyy-MM-dd HH:mm:ss"/>
3. 自定义标签
3.1 标签实现类
package com.jstltest;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
/**
* 自定义标签
* @author Administrator
*/
public class Zidingyijstl extends SimpleTagSupport {
private String mytag = "p";
private int count;
public void setMytag(String mytag) {
this.mytag = mytag;
}
public void setCount(int count) {
this.count = count;
}
public void doTag() throws JspException, IOException { // 重写doTage()方法
JspFragment frag = this.getJspBody();
this.getJspContext().getOut().write("<" + mytag + ">");
for (int i = 0; i < count; i++) {
frag.invoke(null);
}
this.getJspContext().getOut().write("</" + mytag + ">");
}
}
3.2 标签部署描述文件 tld
- tld文件放在webapp中的WEB-INF下
- 和web.xml文件同级
messageTag.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>自定义的一些标签</description>
<display-name>自定义标签</display-name>
<tlib-version>1.0</tlib-version>
<short-name>m</short-name>
<uri>/myjstl</uri>
<tag>
<description>描述</description>
<name>show</name> <!-- 标签名 -->
<tag-class>com.jstltest.Zidingyijstl</tag-class> <!-- 唯一标识 -->
<body-content>scriptless</body-content> <!-- 标签里不可写脚本<%%> -->
<!-- 添加属性 -->
<attribute>
<description>
这是自定义标签的描述信息,可以在MyEclipse中有提示
</description>
<name>mytag</name> <!-- 属性的名字,要跟方法名要对应的 -->
<required>true</required> <!--是否必填 -->
<rtexprvalue>false</rtexprvalue> <!--标签里可不可以用EL表达式 -->
</attribute>
<!--再写一个属性 -->
<attribute>
<description>
这是自定义标签的描述信息,可以在MyEclipse中有提示.
</description>
<name>count</name> <!-- 属性的名字,要跟方法名要对应的 -->
<required>true</required> <!--是否必填 -->
<rtexprvalue>false</rtexprvalue><!--标签里可不可以用EL表达式 -->
</attribute>
</tag>
</taglib>
3.3 JSP页面中引用自定义标签
<%@ taglib prefix="m" uri="/myjstl" %>
3.4 JSP页面中使用自定义标签
<m:show mytag="h3" count="5">
HaoHao
</m:show>