EL和JSTL

简介: EL和JSTL

1.为什么需要EL

在JSP中使用Java脚本的局限

               在JSP页面中嵌入大量的Java代码 访问结构比较复杂的数据时代码烦琐,且经常需要强制类型转换              

<%Employeeemployee= (Employee) request.getAttribute("employee");
Computercomp=employee.getComputer();
Stringmanufacturer=comp.getManufacturer();
%>

EL表达式使JSP的开发变得更加简单

               ${requestScope.employee.computer.manufacturer}    

2.EL表达式简介

(1)什么是EL

                Expression Language(表达式语言)

2)EL的功能

                替代JSP页面中数据访问时的复杂编码              

(3)EL的特点

               自动转换类型  EL得到某个数据时可以自动转换类型                

(4)使用简单

3.EL表达式语法

(1)通过变量名取值

               ${变量名} 按照page → request → session → application的作用域顺序依次查找,找到即返回,最终找不到返回null ${ EL expression }              

(2)获取对象的属性值

<%=  ( (User) request.getAttribute("user") ) .getName()  %>点操作符${user.name}
[ ]
操作符${user["name"]}

3)获取集合元素

// 在Servlet或JSP中保存数据Listnames=newArrayList();
names.add(0, "LiYang");
names.add(1,"WangHua");
request.setAttribute("names",names);
// 在JSP中访问数据姓名:${ names[0] }<br/>//使用[ ]指定元素下标姓名:${ names[1] }<br/>// 在Servlet或JSP中保存数据Mapnames=newHashMap();
names.put("one", "LiYang");
names.put("two", "WangHua");
request.setAttribute("names", names);
// 在JSP中访问数据姓名:${ names.one }<br/>姓名:${ names["two"] }<br/>

属性范围

EL中的名称

page

pageScope,例如${pageScope.username}表示在page作用域查找变量username,找不到返回null

request

requestScope

session

sessionScope

application

applicationScope

4.application作用于案例实现网站访问数量

<%@pagelanguage="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>application统计网站访问次数</title></head><body><%Integercount= (Integer)application.getAttribute("count");
if(count!=null){
count+=1;
}else{
count=1;
}
application.setAttribute("count", count);
%><!--页面显示--><%Integeri= (Integer) application.getAttribute("count");
out.println("您好,你是第"+i+"位访问本网站的用户!!" );
%></body></html>

4.EL隐式对象

image.png

EL隐式对象介绍

对象名称

说  明

pageScope

与page作用域相关联的Map对象(只在当前页面使用)

requestScope

与request作用域相关联的Map对象

sessionScope

与session作用域相关联的Map对象

applicationScope

与application作用域相关联的Map对象

param

按照请求参数名称返回单一值的Map对象

paramValues

按照请求参数名称返回String数组的Map对象

pageContext

提供对页面信息和JSP内置对象的访问

5.案例:问卷调查

<%@pagelanguage="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>问卷调查</title></head><body><formaction="investigationEl.jsp"method="POST">昵称:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<inputname="username"><br>所在城市:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<inputname="city"><br>你所使用的开发语言:<inputtype="checkbox"name="language"value="JAVA">Java<inputtype="checkbox"name="language"value="C">C<inputtype="checkbox"name="language"value="C++">C++<inputtype="checkbox"name="language"value="PHP">PHP<inputtype="checkbox"name="language"value="ASP">ASP<br><br><inputtype="submit"value="提交"></form></body></html>
<%@pagelanguage="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>使用EL展示问卷调查</title></head><body><%//设置字符集编码request.setCharacterEncoding("utf-8");
//获得语言集合String[] languages=request.getParameterValues("language");
%>你所填写的内容是:<br/>昵称:${param.username }
<br>所在城市:${param.city }
<br>使用的开发语言有:<%if(languages!=null){
for (inti=0; i<languages.length; i++) {
if (i>0) {
out.println("、");
    }
//将索引放到请求域中 request.setAttribute("i", i);
%>${paramValues.language[i]}
<%    }
}
%></body></html>

6.什么是JSTL

               JSP标准标签库(JSP Standard Tag Library) JSTL通常会与EL表达式合作实现JSP页面的编码              

(1)JSTL的优点:

               提供一组标准标签 可用于编写各种动态 功能              

(2)使用JSTL的步骤

               引入JSTL的jar文件和标签库描述符文件 在JSP页面添加taglib指令 使用JSTL标签              

引入方式:(固定模式)<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%>

7.JSTL标准标签库中的常用标签

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

8.通用标签

(1)set:设置指定范围内的变量值

语法:

将value值存储到范围为scope的变量

                <c:set  var="variable"  value="value"  scope="scope" />              

将value值设置到对象的属性中

<c:settarget="target"property="property"value="value"/>// 在Servlet或JSP中设置JavaBeanUseruser=newUser(); 
request.setAttribute("user",  user);
// 在JSP中修改JavaBean的属性值<c:settarget="${user}"property="name"value="defaultName"/>

(2)out:计算表达式并将结果输出显示

语法:

不指定默认值

               <c:out  value="value" />              

指定默认值

<c:outvalue="value"default="default"/>// 在Servlet或JSP中设置JavaBeanUseruser=newUser();
request.setAttribute("user",  user);
// 在JSP中输出JavaBean的属性值<c:outvalue="${user.name}"default="No UserName"/>

(3)out:计算表达式并将结果输出显示

语法:

转义特殊字符

<p>${ "<a href='http://www.baidu.com'>百度</a>" }</p><p><c:outescapeXml="false"value="<a href='http://www.baidu.com'>百度</a>"/></p><c:outvalue="<a href='http://www.baidu.com'>百度</a>"/>

image.png

(4)remove:删除指定范围内的变量

语法:

<!--设置之前应该是空值--><c:removevar="variable"scope="scope"/>设置变量之前的值是:msg=<c:outvalue="${msg}"default="null"/><br/><!--给变量msg设值--><c:setvar="msg"value="Hello  World!"scope="page"></c:set>--->使用set标签设置属性<!--此时msg的值应该是上面设置的“HelloWorld!-->设置新值以后:msg=<c:outvalue="${msg}"></c:out><br/>--->使用out输出属性显示<!--msg变量从page范围内移除--><c:removevar="msg"scope="page"/>--->使用remove移除属性<!--此时msg的值应该显示null-->移除变量msg以后:msg=<c:outvalue="${msg}"default="null"></c:out>

image.png

(5)通用标签的使用

image.png

9.条件标签

(1)if:实现Java语言中if语句的功能

语法:

网络异常,图片无法展示
|

(2)使用if标签判断是否登录

<%@pagelanguage="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!--引入标准标签库--><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Inserttitlehere</title></head><body><%session.setAttribute("user", "admin");
%><%--使用set设置一个boolean来区分是否登录--%><c:setvar="isLogin"value="${empty user}"></c:set><c:iftest="${isLogin }"><c:outvalue="对象不为空!"></c:out></c:if><c:iftest="${!isLogin }"><c:outvalue="对象为空!!"></c:out></c:if></body></html>

(3)choose:实现if - else if - else语句的功能

<c:choose><c:whentest="condition1">内容1</c:when><c:whentest="condition2">内容2</c:when>……<c:otherwise>内容n</c:otherwise></c:choose>

(4)forEach:实现对集合对象的遍历

image.png

(5)forEach:指定迭代的次数

语法:

               <c:forEach  begin="start"  end="end"  step= "stepSize"> …循环体代码… </c:forEach>              

示例:

               <c:forEach  begin="1"  end="5"  step= "2"> <c:out value="*"></c:out> </c:forEach>          

(6)使用foreach迭代循环生成表格,并实现表格隔行变色效果

<%@pagelanguage="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"import="java.util.*,entity.*"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>使用foreach进行表格的隔行变色效果</title></head><body><%List<User>list=newArrayList();
list.add(newUser(1, "张三", "123456"));
list.add(newUser(2, "张四", "123456"));
list.add(newUser(3, "张五", "123456"));
list.add(newUser(4, "张六", "123456"));
request.setAttribute("list", list);
%><tableborder="1"width="800px" ; align="center"><tr><th>编号</th><th>id</th><th>姓名</th><th>密码</th></tr><c:forEachitems="${list}"var="user"varStatus="s"><c:iftest="${s.count %2 ==0 }"><trstyle="background-color: red"><%--<td>${s.count}</td><td>${user.id }</td><td>${user.username }</td><td>${user.password }</td>--%></c:if><c:iftest="${s.count % 2 !=0 }"><trstyle="background-color: green"></c:if><td>${s.count}</td><td>${user.id }</td><td>${user.username }</td><td>${user.password }</td></c:forEach></table></body></html>

image.png

10.日期格式获取案例

<%@pagelanguage="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"import="java.util.*"%><%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%><%@taglibprefix="fmt"uri="http://java.sun.com/jsp/jstl/fmt"%><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Inserttitlehere</title></head><body><%Map<String, String>map=newHashMap<String, String>(16);
map.put("tom", "张三");
map.put("lili", "李四");
map.put("jack", "王五");
request.setAttribute("map", map);
request.setAttribute("date", newDate());
%><c:forEachitems="${requestScope.map }"var="name">${name.key}
${name.value}<br></c:forEach><br><fmt:formatDatevalue="${requestScope.date}"pattern="yyyy年MM月dd日 HH:mm:ss"></fmt:formatDate></body></html>

image.png

11.总结:

image.png

相关文章
jstl c:remove
jstl c:remove
36 0
|
Java
JavaWeb|认识表达式语言(EL)
JavaWeb|认识表达式语言(EL)
106 0
|
存储 Java 编译器
JSP表达式语言(EL)
JSP表达式语言(EL)
97 0
|
Java
JSP EL中的函数
JSP EL中的函数
73 0
|
存储 Java
EL和JSTL
EL和JSTL
110 0
EL和JSTL
|
存储 JavaScript Java
el 表达式以及JSTL详解
JavaEE中的el 表达式以及JSTL详解
el 表达式以及JSTL详解
|
Java
servlet中的三大作用域以及 jsp el jstl
servlet中的三大作用域以及 jsp el jstl
161 0
|
XML SQL JavaScript
JavaWeb - JSTL、EL 表达式
JavaWeb - JSTL、EL 表达式
205 0
JavaWeb - JSTL、EL 表达式
【EL与JSTL表达式】学习JSP之后,这是你不得不知道的技术
之前我们已经完成了对JSP的学习,但是还有一些其他的东西我们必须得知道,今天我们来学习EL与JSTL表达式。它们将简化JSP的书写并且使得JSP更加强大。但是如果你对JSP一无所知的话建议你先去看一下之前入门JSP的文章。
【EL与JSTL表达式】学习JSP之后,这是你不得不知道的技术
JSP+EL+JSTL学习小结
PageContext:pageConext 存放的数据仅在当前页面有效。开发时使用较少。当前页面存放数据用表单标签中的 ,且该存值方式用户看不到。 ServletRequest: request 存放的数据在一次请求(转发:可以传数据)内有效。
1054 0