JAVAEE ---EL表达式和JSTL标签大总结

该文是JSP程序设计学习的一部分
后续会更新系列笔记
在这里插入图片描述

EL表达式和JSTL标签

7.1EL表达式

7.1.1EL表达式的概念及用法

EL表达式可以获取参数的值,获取隐含对象作用域中的属性的值,从而代替JSP页面中的复制代码。

是一种简单,容易使用的语言,简化了寻常获取页面数据的方式。

EL基本格式

${表达式}

功能:计算花括号内表达式的值,将其转换成Sting类型并进行显示。

1.EL表达式可以访问数组元素

String name[]={"tom","jack"};
#将数组name存储在request对象范围中
request.setAttribute("arr_name",name);
#用EL表达式获取其值
${arr_name[0]}     #输出tom

2.EL表达式简单访问对象

#str存储在request范围中
request.setAttribute("str","hello world");
#用java代码获取值
request.getAttribute("str");
#用EL表达式获取值
${str}

3.EL表达式获取类中属性的值

#emoloyee表中有id,name属性  并有对应的方法
#jsp代码
request.getAttribute("emp.id");
request.getAttribute("emp.name");
#EL代码
${emp.id}
${emp.name}

EL表达式有两种操作符 .或[]

${emp.id}等同于 ${emp[id]}

[]适应性更广–当对象的属性名包含特殊字符或属性名是一个变量的值时候,只能用[]

7.1.2EL隐藏对象

根据功能可以分为:参数访问对象,作用域访问对象,上下文访问对象。

1.参数访问对象

1.1param对象

将请求参数名称映射到单个字符串参数值

${param.name}相当于request.getParamter(name)
1.2paramValues对象

将请求参数名称映射到一个数值数值

${paramvalues.name}相当于request.getParamterValues(name)

2.作用域访问对象

1.pageScope对象

page范围表示当前页面有效

访问一个JSP中页面范围的对象

${pageScope.objectName}

访问对象的属性

${pageScope.objectName.attributeName}
2.requestScope对象

request范围表示当前页面有效或者请求转发有效

访问一个JSP中页面范围的对象

${requestScope.objectName}
相当于
request.getAttribute(objectName)

访问对象的属性

${requestScope.objectName.attributeName}
3.sessionScope对象

session范围表示一次会话有效

访问一个会话范围的对象

${sessionScope.objectName}
相当于
session.getAttribute(objectName)

访问对象的属性

${sessionScope.objectName.attributeName}
4.applicationScope对象

application表示服务器运行期间有效

访问一个application范围的对象

${applicationScope.objectName}
例–登录控制

可以修改的地方

session.setAttribute("uname",username);

欢迎${sessionScope.uname}登录

${sessionScope.uname}等价于(String)session.getAttribute("uname")

7.2JSTL入门

7.2.1JSTL概述

EL表达式主要功能是获取数据和存储数据

而JSP中要进行逻辑判断就需要使用JSTL标签

JSTL标签分为五类

JSTL核心标签、JSTL函数标签、数据库标签、I18N标签、XML标签

后面主要围绕核心展开

7.2.2JSTL用法

1.创建动态Web过程,,导入JSTL资源包

将两个JAR文件:jstl.jar和standard.jar复制到/WEB_INF/lib目录下

2.新建JSP页面,在页面顶部加入taglib指令

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

1.prefix=“c” 指定标签库的前缀,这个前缀有多值可以取

2.uri=“http://java.sun.com/jsp/jstl/core” 指定标签库的uri 不一定是真实的网站

但可以让jsp找到标签库的描述文件

3.使用JSTL标签

<%@ page language="java" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title> JSTL</title>
</head>
<body>
<h2>测试JSTL标签</h2>
<c:out value="helloworld"/>
</body>
</html>

7.3JSTL常用标签

JSTL核心标签库:表达式操作标签、条件标签、迭代标签

表达式操作标签:set,remove,out

条件标签:if,choose,when,otherwise

迭代标签:foreach

7.3.1表达式操作标签

1.< c:out>

作用:显示数据的内容

语法格式:

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

属性说明:

value:要显示的数据

escapeXml:是否转换特殊字符,默认为true ,如果设置为false就不会进行转换

将默认的< > ’ " &转换为 &lt; & gt; & #039; & #034; & amp;

default:如果value的值为null 则默认显示default的值

举例:

<c:out value="helloworld"/>

2.< c:set>

作用:

用于在指定范围(page,request,session,application)内定义保存某个值的变量,或为指定的对象设置属性值

语法格式:

在scope指定的范围内将变量值存储到变量中

<c:set var="name" value="value" [scope="{page|request|session|application}"]/>

在scope指定的范围内将标签体存储到变量中

<c:set var="name" [scope="{page|request|session|application}"]>
value
</c:set>

将变量值存储在target属性指定的目标对象propName属性中

<c:set  value="value" target="object" property="propName"/>

将标签体存储到target属性指定的目标对象的propName属性中

<c:set  target="object" property="propName">
value
</c:set>

属性说明:

value:要被存储的变量

var:欲存入的变量名称

scope:var变量的JSP范围,默认为page

target:为javaBean或Map对象

property:指定target对象的属性

举例:

<c:set var="uname" value="tom" scope="session" />
等价于
session.setAttribute("uname","tom")

3.< c:remove>

作用:移除变量

语法:

<c:remove var="varName"  [scope="{page|request|session|application}"] />

属性说明:

var:要移除的变量

scope:var变量所在的JSP范围,默认为page范围

举例:

#<c:remove >标签可以等价于removeAttribute
<c:remove var="uname" scope="session"/>
等价于
session.removeAttribute("uname","tom")

实例-改写登录案例

原来
<%
String username=request.getParameter("uname");
String password=request.getParameter("pwd");
session.setAttribute("uname",username);
session.setAttribute("pwd",password);
%>
改写
<c:set var="uname" value="${param.uname}" scope="session"/>
<c:set var="pwd" value="${param.pwd}" scope="session"/>
原来
<%
String uname=(String)session.getAttribute("uname");
%>
欢迎<%=uname%>登录
改写
欢迎<c:out value="${sessionScope.uname}"/>登录系统

7.3.2条件标签

1.< c:if>标签

条件判断标签,同java语言中的单分子if语句

语法格式:

<c:if test="condition" var="name" 
[scope="{page|request|session|application}"]/>
//body
</c:if>

属性说明:

test:若属性中的表达式运算结果为true,就会执行文本体内容,若为false就不执行

test=${}

var:存储test的运算结果,为true或false

scope:var变量的JSP范围

2.< c:choose> < c:when> < c:otherwise>

多分支判断语句

语法举例

<c:choose>
<c:when test="${condition1}">
condition1为true
</c:when>
<c:when test="${condition2}">
condition2为true
</c:when>
<c:otherwise>
condition1和condition2都为false
</c:otherwise>
</c:choose>

每一个wen代表一个条件,条件达成则触发下面的内容,可以有多个

相当于if

otherwise代表除了when的其他状况

相当于 else if

7.3.3迭代标签

1.< c:forEach>

作用:为循环控制,他可以将集合中成员循环浏览一遍,

当条件符合时,就会持续重复执行< c:foreach>的本体内容

基本语法格式

<c:forEach [item="collection"] [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]/>
循环体
</c:forEach>

属性说明

items:被迭代的集合对象

var:存放当前知道的集合对象的成员

varStatus:存放当前知道的成员的相关信息

begin:迭代开始的位置,默认为0。

end:迭代结束的位置,默认为最后。

step:每次迭代的间隔数,默认为1

例子-已知整型数组
<%@ page language="java" pageEncoding="utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title> zssz</title>
</head>
<body>
<% 
int num[]={1,2,3,4,5,6,7,8,9,10,11,12};
request.setAttribute("numlist",num);
%>
<c:forEach items="${requestScope.numlist}" var="number" varStatus="status">
<c:if test="${status.index%3==0}">
<br/>
</c:if>
${number}
</c:forEach>
</body>
</html>

说明:

forEach经常对集合进行遍历

通过if标签 达到三个数据换一行的效果

<c:if test="${status.index%3==0}">
<br/>
</c:if>

2.< c:forTokens>

主要用于浏览器字符串中的所有成员并且可以指定一个或多个字符串

语法格式

<c:forTokens items="String" delims="char" [var="name"] [begin="start"] [end="end"]
[setp="step"] [varStatus="varStatusName"]>
循环体
</c:forTokens>

属性说明

items:被分隔并迭代的字符串

delims:用来分割字符串的字符

var:存放当前指到成员

varStatus:存放当前指到的成员的相关信息

begin:迭代开始的位置,默认为0。

end:迭代结束的位置,默认为最后。

step:每次迭代的间隔数,默认为1

例子–输入学号,年龄,姓名中间用逗号隔开(info),要求数据分开
<c:forTokens items="param.info" delims="," var="student" >
<c:out value="${student}"/>
</c:forTokens>

7.4JSTL其他标签

7.4.1URL标签相关

1.< c:import>

作用:导入URL资源,是URL、资源标签中的一种,改标签主要是用于将其他静态或动态文件引入到当前jsp页面中。

语法

<c:import url="url" [var="varName"] [ [scope="{page|request|session|application}"] ]>
//
</c:import>

属性说明

url:要包含至本事JSP页面的其他文件URL

var:将包含进来的其他文件以字符串形式存放到指定变量中-

-如果指定了var,就不会直接显示,相当于保存到一个变量中,需要你自己使用

scope:var变量的作用范围

2.< c:url>

作用生成一个URL路径的字符串 并可以保存到一个变量中

语法、

<c:url value="url" [var="name"]  [scope="{page|request|session|application}"]  [context="context"]>
[<c:param name="name" value="value"/>]
...可以有多个c:param标签
</c:url>

子标签[<c:param name=“name” value=“value”/>]可以有 0个或者多个,若有子标签,则表示生成一个url,并传递参数。

例如

<c:url value="doLogin.jsp">
<c:param name="uname" value="tom"/>
<c:param name="pwd" value="12345"/>
</c:url>

生成的url字符串为:doLogin.jsp?uname=tom&&pwd=123456

3.< c:redirect>

作用:可以将客户端的请求从一个JSP页面导向到其他文件(跳转到其他网页)

语法

<c:redirect url="url">
[<c:param name="param" value="paramValue">]
</c:redirect>

子标签[<c:param name=“name” value=“value”/>]可以有 0个或者多个,若没有子标签这表示将请求导向URL指向的其他文件,若有这表示不要将请求导向URL指向的其他文件,还要传递参数

<c:set var="uname" value="${param.uname}" scope="session"/>
<c:set var="pwd" value="${param.pwd}" scope="session"/>
<c:redirect url="welcome.jsp"/>

表示将数据保存到session范围中,跳转到welcome.jsp欢迎界面

7.4.2国际化格式标签简介

首先要导入

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

1.< fmt:requestEncoding>

作用:设置编码格式

相当于jsp中的reques.setCharacterEncoding(String encoding)

<fmt:requestEncoding value="utf-8">

2.< fmt:formatdate>

作用 提供方便的时区格式化显示方式

语法格式

<fmt:formatDate value="date" [type="time|date|both"] 
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[pattern="customPattern"] [timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]  >
</fmt:formaDate>

属性说明

value:指定要格式化的日期或时间

type:指定是格式化输出日期部分还是时间部分还是都输出

dateStyle:指定日期部分的输出格式 属性仅在both和date才有效

timeStyle:指定时间部分的输出格式 属性仅在both和time才有效

pattern:指定一个自定义的日期和时间的输出格式

timeZone:指定当前采用的时区

var:用于指定格式化结果保存到变量中

scope:指定var指定的范围 默认page

猜你喜欢

转载自blog.csdn.net/qq_57013916/article/details/124694493
今日推荐