Skip to content

JSP中的模板技术

2423字约8分钟

javajsp

2024-10-24

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}与{initParam['a']},它们是完成的东西相同的。但是,如果Map的键或Bean的属性名中包含下划线或横岗时,那么就必须使用“下标”方法,例如:$

4.EL表达式的运算符

1.算术运算符

例如:6+6。注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现{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意思是:在会话中得到名称为userBean对象,通过“.”运算符执行getUserName();方法,返回存放在Bean中的用户名属性的值。[]作用和“.”运算符的一样,只不过[]运算符可以执行一些不规则的标识符。例如:{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 首尾的空格,并将其返回。