外观
JSP中的模板技术
1.EL表达式
形式:$
<li>${requestScope.msg}</li>
1.设置支持EL表达式的两种方式
1.设置isELIgnored="false"
<%@page contentType="text/html; charset=utf-8" pageEncoding="UTF-8" isELIgnored="false" %>
2.设置web.xml文件
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
</web-app>
3.配置jstl
pom.xml配置
<!-- JSTL标签库 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
2.EL表达式的功能
1.输出属性值
2.简单运算
3.调用属性值中的对象的方法
3.EL表达式的11个对象
使用EL表达式和动态标签来代替Java脚本
EL替代的是<%=... %>,也就是说EL只能做输出
EL可以输出的东西都在11个内置对象中,11个内置对象,其中10个是Map,只有pageContext不是Map,它就是PageContext类型,EL所有内置对象如下:
pageScope:获取pageContext域属性,相当于pageContext.getAttribute("xxx")
requestScope:获取request域属性,相当于request.getAttribute("xxx")
sessionScope:获取session域属性,相当于session.getAttribute("xxx")
applicationScope:获取application域属性,相当于application.getAttribute("xxx")
param:对应参数,它是一个Map,其中key是参数,value是参数值,适用于单值的参数,相当于request.getParameter("xxx")
paramValues:对应参数,她是一个Map,其中key是参数,value是多个参数值,适用于多值的参数,相当于request.getParameterValues("xxx")
header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值的请求头,相当于request.getHeader("xxx")
headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值的请求头,相当于request.getHeaders("xxx")
initParam:获取web.xml中<context-param>
内的参数,${ initParam.xxx},xxx就是<param-name>
标签内的值,进而得到<param-value>
中的值
cookie:用于获取cookie,Map<String,Cookie>,其中key是cookie的name,value是cookie对象,例如${cookie.JSESSIONID.value }就是获取sessionId
pageContext:可以获取JSP九大内置对象,相当于使用该对象调用getxxx()方法,例如pageContext.getRequest()可以写为${pageContext.request)
EL表达式在获取Map的值或Bean的属性值是,可以使用“点”的方法,也可以使用“下标”的方法。
initParam.a与{initParam['a']},它们是完成的东西相同的。但是,如果Map的键或Bean的属性名中包含下划线或横岗时,那么就必须使用“下标”方法,例如:$
4.EL表达式的运算符
1.算术运算符
例如:6+6。注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现{'a'+'b'}则会出现异常。
例如:$
例如:$
例如:$
2.关系运算符
或者 gt, 例如:${8>9} 或者 ${8 gt 9 }
= 或者 ge, 例如:${45>=9} 或者 ${45 ge 9 }
< 或者 lt, 例如:${4<9} 或者 ${4 lt 9 }
<= 或者 le, 例如:${9<=8} 或者 ${9 le 8 }
== 或者 eq, 例如:${4==4} 或者 ${4 eq 4 }
!= 或者 ne, 例如:${4!=3} 或者 ${4 ne 3 }
3.逻辑运算符
&& 或者 and, 例如:${false && false} 或者 ${false and false }
|| 或者 or, 例如:${true || false} 或者 ${true or false }
! 或者 not,例如:${!true}(相当于${false}) 或者 ${not true }
4.三元运算符
? : 例如:${3
>2?'是':'不是'}
5.特殊运算符
empty 判断EL表达式中的表达式是否为空,例如:${empty sessionScope.user}
"." 是我们最常用的,作用相当于执行Bean中的get方法。 例如:sessionScope.user.userName意思是:在会话中得到名称为user的Bean对象,通过“.”运算符执行getUserName();方法,返回存放在Bean中的用户名属性的值。[]作用和“.”运算符的一样,只不过[]运算符可以执行一些不规则的标识符。例如:{requestScope.user["score-math"]},这个表达式中有不规则的标识符,是不能使用“.”来访问的。
JSTL
JSTL:Java server pages standarded tag library,JSP标准标签库
1. 5种标签
标签库 taglib指令格式 核心标签库 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 格式标签库 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> SQL标签库 <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> XML标签库 <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%> 函数标签库 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
2.核心标签
包括JSTL的表达式标签、URL标签、流程控制标签和循环标签共4种标签。其中,表达式标签包括:<c:out>、<c:set>、<c:remove>和<c:catch>;URL标签包括:<c:import>、<c:redirect>、<c:url>和<c:param>;流程控制标签包括:<c:if>、<c:choose>、<c:when>和<c:otherwise>;循环标签包括:<c:forEach>和<c:forTokens>。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out> 将表达式的值输出到JSP页面中,相当于JSP表达式<%=表达式%>。
<c:set> 在指定范围中定义变量,或为指定的对象设置属性值。
<c:remove> 从指定的JSP范围中移除指定的变量。
<c:catch> 捕获程序中出现的异常,相当于Java语言中的 try...catch语句。
<c:import> 导入站内或其他网站的静态和动态文件到Web页面中。
<c:redirect> 将客户端发出的request请求重定向到其他URL服务端。
<c:url> 使用正确的URL重写规则构造一个URL。
<c:param> 为其它标签提供参数信息,通常与其它标签结合使用。
<c:if> 根据不同的条件处理不同的业务,与Java语言中的if语句类似,只不过该语句没有else标签。
<c:choose>、<c:when><c:otherwise> 根据不同的条件完成指定的业务逻辑,如果没有符合的条件,则会执行默认条件的业务逻辑,相当于Java语言中的seitch语句。
<c:forEach> 根据循环条件,遍历数组和集合类中的所有或部分数据。
<c:forTokens> 迭代字符串中由分隔符分隔的各成员。
<%--使用forEach变量集合-->%
<c:forEach var="item" items="${students}">
<li>${item}</li>
<li>${item.code}:${item.name}</li>
</c:forEach>
3.格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<fmt:formatNumber> 使用指定的格式或精度格式化数字。
<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串。
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间。
<fmt:parseDate> 解析一个代表着日期或时间的字符串。
<fmt:bundle> 绑定资源。
<fmt:setLocale> 指定地区。
<fmt:setBundle> 绑定资源。
<fmt:timeZone> 指定时区。
<fmt:setTimeZone> 指定时区。
<fmt:message> 显示资源配置文件信息。
<fmt:requestEncoding> 设置request的字符编码。
4.SQL标签
不常用
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<sql:setDataSource> 指定数据源。
<sql:query> 运行SQL查询语句。
<sql:update> 运行SQL更新语句。
<sql:param> 将SQL语句中的参数设为指定值。
<sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值。
<sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行。
5.xml标签
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<x:out> 与<%= ... >,类似,不过只用于XPath表达式。
<x:parse> 解析 XML 数据。
<x:set> 设置XPath表达式。
<x:if> 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体。
<x:forEach> 迭代XML文档中的节点。
<x:choose> <x:when>和<x:otherwise>的父标签。
<x:when> <x:choose>的子标签,用来进行条件判断。
<x:otherwise> <x:choose>的子标签,当<x:when>判断为false时被执行。
<x:transform> 将XSL转换应用在XML文档中。
<x:param> 与<x:transform>共同使用,用于设置XSL样式表。
6.函数标签
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
fn:contains(string, substring) 如果参数string中包含参数substring,返回true。
fn:containsIgnoreCase(string, substring) 如果参数string中包含参数substring(忽略大小写),返回true。
fn:endsWith(string, suffix) 如果参数 string 以参数suffix结尾,返回true。
fn:escapeXml(string) 将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回。
fn:indexOf(string, substring) 返回参数substring在参数string中第一次出现的位置。
fn:join(array, separator) 将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
fn:length(item) 返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。
fn:replace(string, before, after) 返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果。
fn:split(string, separator) 返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素。
fn:startsWith(string, prefix) 如果参数string以参数prefix开头,返回true。
fn:substring(string, begin, end) 返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符。
fn:substringAfter(string, substring) 返回参数substring在参数string中后面的那一部分字符串。
fn:substringBefore(string, substring) 返回参数substring在参数string中前面的那一部分字符串。
fn:toLowerCase(string) 将参数string所有的字符变为小写,并将其返回。
fn:toUpperCase(string) 将参数string所有的字符变为大写,并将其返回。
fn:trim(string) 去除参数string 首尾的空格,并将其返回。