JavaWeb开发知识总结(JSP,EL,JSTL)

本文详细总结了JavaWeb开发中的关键知识点,包括JSP概述、执行流程、脚本、指令,特别是JSP的内置对象,重点讲解了EL表达式的功能和JSTL标签库的使用,如EL获取JSP域中的数据、JSTL的if和foreach标签。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaWeb开发知识总结(JSP,EL,JSTL)

1. JSP概述

JSP技术:Java服务器端页面(Java Server Pages),是一种动态网页开发技术。

JSP的组成:HTML+Java代码+JSP自身元素。

JSP自身元素包括JSP指令,JSP动作标签和JSP的内置对象。

2. JSP执行流程

JSP的本质是Servlet,tomcat服务器会将jsp文件进行编译生成一个servlet.java文件和对应的servlet.class文件,执行的是.class文件。在tomcat服务器的\work\Catalina\localhost目录下对应的项目目录中可以看到jsp页面被翻译成java文件和class文件,查看java文件可以发现JSP页面经过编译后的java类是继承HttpJspBase类,而该类是继承至HttpServlet类,则JSP本质是Servlet。通过查看jsp翻译后的java源文件可知,jsp被翻译成的Servlet其实就是使用jsp内置的out(是JspWriter类型)对象中的Write()方法将jsp页面中的内容进行逐行输出到客户端浏览器中的。

3. JSP的脚本

​ JSP的脚本就是在jsp页面中编写Java代码的方式;由于jsp页面会被翻译成Servlet的java文件并重写Servlet中service方法,java类有成员位置和局部位置(参数位置和方法内部),则针对jsp页面编写Java代码就有三种方式,这三种方式编写的代码会被翻译成Java类中对应的部分。

JSP脚本JSP被编译成Servlet后对应的位置
<%! java代码; %>翻译成Servlet类中的成员内容,可以定义变量,方法,类 – 不建议使用
<% java代码; %>翻译成Servlet类中的service方法内部,可以定义变量和类,必须加分号
<%= java代码 %>翻译成Servlet类中的service方法的out.write()方法的参数,相当于是直接输出,不能加分号

注意事项:<%= java代码 %>中输出的是变量时,如果变量值为空时,输出的null字符串。

4. JSP文件中的注释

​ 由于JSP是结合HTML和JAVA并定义自身的内置对象,则其注释方式有三种:html的注释,Java代码的注释,及JSP自身的注释。

注释类型注释格式注释格式说明注意事项
HTML注释输出到客户端还存在不能注释jsp的脚本内容
Java注释// 单行 /多行注释*/ /*文档注释*/一般用在在jsp脚本中存在于翻译后Servlet中,输出到客户端的html页面时消失
jsp注释<%– jsp注释 –%>只存在于JSP的源代码中翻译成Servlet后,JSP的注释就消失了

5. JSP指令

​ JSP指令就是设置JSP页面属性的,JSP有三个指令:page,include,taglib

5.1 JSP指令的语法

<%@ 指令名称 属性名称=”属性值” 属性名称=”属性值” …%>,指令名称可以为page,include和taglib。

5.2 JSP的page指令

page指令是设置jsp页面的参数信息。page指令常用的属性有以下几个:

page属性值属性值说明使用时注意事项
languageJSP脚本中使用的语言目前只写java
contentType设置浏览器打开这个JSP的时采用的默认的字符集编码
pageEncoding设置jsp文件保存到本地硬盘,以及生成Servlet后,Servlet保存到硬盘上的编码
import在JSP中引入java类对象import可以出现多次,其他属性只能出现一次
extends设置JSP翻译成Servlet后继承的类默认值是HttpJspBase,设置时的类必须是HttpServlet的子类.继承后自定义的类中会没有jsp的一些功能
autoFlush设置JSP的缓存自动刷出默认是true:自动刷出
buffer设置JSP的缓冲区的大小,默认8kb
session设置JSP中是否可以直接使用session对象默认值是true,设置后直接使用session变量进行Session的操作
isELIgnored设置在JSP中是否忽略EL表达式默认值是false不忽略
errorPage设置错误友好页面的提示和isErrorPage一起使用,jsp出错后跳转(转发方式)到指定页面,路径是服务器端路径,不能加上工程名
isErrorPage通过这个设置显示JSP的错误信息和errorPage一起使用,在errorPage跳转到页面使用

扩展:在web项目下配置全局的错误友好提示

​ 当整个页面出现错误时,系统会跳到指定的页面。在项目的web.xml文件中配置如下:

<!--web.xml配置文件-->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <!-- 配置错误友好页面 -->
  <error-page>
    <error-code>错误的状态码</error-code>
    <location>/出错后跳转到指定的jsp页面</location>
  </error-page>
  <!-- 配置出现500错误时友好页面 -->
  <error-page>
    <error-code>500</error-code>
    <location>/500.jsp</location>
  </error-page>
</web-app>

5.3 JSP的include指令

​ include指令是使得当前jsp页面去包含其他的jsp页面,使用的包含使用的文件的相对路径。包含的方式是静态包含。其本质就是直接将被包含的jsp页面直接放在此jsp页面使用include指令包含页面的位置,因此使用此种包含时,被包含的页面只需要有内容题就可以了,不需要再定义一个完整的jsp的结构。

格式:<%@ include file=”被包含的jsp文件”%> 文件使用的相对路径。

5.4 JSP的taglib指令

​ taglib指令是用来为jsp页面引入jsp标签库的。一般引入的是jstl标签库。

格式:<%@ taglib uri=”标签库uri” prefix=”标签的别名” %>

6. JSP动作标签

​ JSP动作标签的作用是用来进行简化代码编写的。JSP常用的6个标签如下:

JSP动作标签说明
< jsp:forward page=”转发的页面”>< /jsp:forward>页面的转发,使用服务器端路径
< jsp:include page=”被包含的jsp页面”>< /jsp:include>用于页面包含(动态包含)
< jsp:param value=”参数值” name=”参数名”/>一般和带有路径的标签一起使用,传递参数,常用上述两个标签
< jsp:useBean id=”javabean类的id”>< /jsp:useBean>用于在JSP中使用JavaBean
< jsp:setProperty property=”属性值” name=”属性名”/>用于在JSP中向JavaBean设置属性
< jsp:getProperty property=”属性值” name=”属性名”/>用于在JSP中获得JavaBean的属性

JSP页面的静态包含(include指令)和动态包含(include标签)的区别:

<%@ include file="被包含的jsp文件"%>是静态包含jsp页面,< jsp:include page="被包含的jsp页面">< /jsp:include>是动态包含jsp页面。 静态包含是直接包含jsp页面的全部内容,而动态包含只是包含被包含jsp页面的运行结果。

静态包含和动态包含的区别

7. JSP内置对象(重点)

​ JSP内置对象:在jsp页面中可以直接使用的对象(9大内置对象)。在jsp页面翻译成的Servlet的java文件中可以查看到。

7.1 JSP的9大内置对象

内置对象名称内置对象的数据类型内置对象常用API
requestHttpServletRequestgetParameter(String name),setAttribute(String name,Object value),getAttribute(String name);
responseHttpServletResponsesetHeader(String name,String value),getOutputStream();getWriter()
sessionHttpSessionsetAttribute(String name,Object value),getAttribute(String name);
applicationServletContextsetAttribute(String name,Object value),getAttribute(String name);
pageObjecttoString();wait();(是jsp页面翻译成Servlet后对象引用)
pageContextPageContextsetAttribute(String name,Object value),getAttribute(String name);
configServletConfiggetServletName();getServletContext();
outJspWriterwrite(),print();
exceptionThrowablegetMessage(),getCause();(设置isErrorPage=”true”后才有效)
7.1.1 out内置对象和response.getWriter()的区别:

out内置对象的数据类型是JspWriter,response获取的Writer的数据类型是PrintWriter。

jsp内置对象out和response的getWriter()的区别

7.1.3 JSP的四个域(重点): 域存储数据的作用范围从小到大
域范围名称域范围含义对应jsp内置对象(域对象)域对象的数据类型作用范围说明
PageScope当前页面中有效pageContextPageContext页面跳转或者转发后,设置的值无效
RequestScope一次请求范围requestHttpServletRequest页面跳转后,设置的值无效,转发后设置的值有效
SessionScope一次会话范围sessionHttpSession页面跳转或者转发后,设置的值有效,重启浏览器或session过期后设置的值无效
ApplicationScopeweb项目范围applicationServletContext服务器关闭或者项目被移除后,设置的值无效
7.1.3 pageContext内置对象:

​ pageContext内置对象有两方面的作用:获取其他的8个内置对象(多用在框架中)和操作jsp的四个域存取数据。案例代码如下:

<%-- jsp文件中编写Java代码 --%>
<% 
    // 获得其他8个内置对象.--主要在编写框架,通用性很高代码中.
    // jsp中四个域对象存储数据
    pageContext.setAttribute("pname", "pvalue");
    request.setAttribute("rname", "rvalue");
    session.setAttribute("sname", "svalue");
    application.setAttribute("aname", "avalue"); 

    // 使用pageContext对象对jsp中四个域范围存取数据
    pageContext.setAttribute("pname", "pvalue", PageContext.PAGE_SCOPE); 
    // 等价于pageContext.setAttribute("pname", "pvalue");
    pageContext.setAttribute("rname", "rvalue", PageContext.REQUEST_SCOPE); 
    // request.setAttribute("rname", "rvalue");
    pageContext.setAttribute("sname", "svalue", PageContext.SESSION_SCOPE); 
    // session.setAttribute("sname", "svalue");
    pageContext.setAttribute("aname", "avalue", PageContext.APPLICATION_SCOPE);              
    //application.setAttribute("aname", "avalue");
%>

<!-- 使用jsp的四个域对象获取该页面中四个域存储的值 -->
<%= pageContext.getAttribute("pname") %>
<%= request.getAttribute("rname") %>
<%= session.getAttribute("sname") %>
<%= application.getAttribute("aname") %>

<!-- 通过pageContext对象获取四个域中存储的值 -->
<%= pageContext.getAttribute("pname", PageContext.PAGE_SCOPE) %>
<%= pageContext.getAttribute("rname", PageContext.REQUEST_SCOPE) %>
<%= pageContext.getAttribute("sname", PageContext.SESSION_SCOPE) %>
<%= pageContext.getAttribute("aname", PageContext.APPLICATION_SCOPE) %>
<!--使用pageContext对象查找jsp页面中四个域中指定名称的值-->
<%= pageContext.findAttribute("name") %>  从四个域范围中查找指定名称的值,从域范围从小到大的顺序进行查找,查到就返回,后面的域不会再查找,没有查到就返回null

注意事项:<%= pageContext.findAttribute(“name”) %> 代表 从四个域范围中查找指定名称的值,从域范围从小到大的顺序进行查找,查到就返回,后面的域不会再查找,没有查到就返回null。

8. EL表达式

EL表达式:Expression Language,是用来简化表达式的方法。

EL表达式能简化jsp的代码书写及jsp脚本的使用。

EL表达式语法:${ EL表达式 }

8.1 EL表达式的功能

​ EL表达式可以用来获取jsp的四个域中存储的数据,执行运算,EL内置对象(操作web开发的对象)和调用Java类中的方法。 注意:EL表达式只可以用来获取jsp域中的数据,不能更改域中存储的数据。

8.1.1 EL表达式获取JSP四个域中的数据
使用EL表达式获取jsp域中普通单值数据:
<!--使用jsp脚本及jsp内置对象向四个域中存储数据-->
<%
    pageContext.setAttribute("name", "pValue");
    request.setAttribute("name", "rValue");
    session.setAttribute("name", "sValue");
    application.setAttribute("name", "aValue");
%>
<!--使用jsp脚本及jsp内置对象从四个域中获取数据-->
<%=pageContext.getAttribute("name") %> <!-- 如果没找到 返回null -->
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>

<!--使用EL表达式从jsp的四个域中获取数据-->
${ pageScope.name } <!-- 返回的是"",不会显示在页面中 -->  
${ requestScope.name }   
${ sessionScope.name }
${ applicationScope.name }
<!--使用EL表达式搜索jsp的四个域查找指定名称的数据-->
${ name } <!-- 类似findAttribute("name") 先从page域中查找,没找到去request域中查询,没有找到去session域中找,没有找到就去application域中查找,没有则返回""-->

注意事项: EL表达式查找域中指定名称的数据时,没有返回的是空字符串,在页面中不会显示;jsp内置对象查找域中指定名称的数据时,没有返回的是null,在页面中会显示‘null’字符串。

使用EL表达式获取jsp域中数组或List集合形式的数据:
<!--使用jsp内置域对象存储数组数据-->
<%
    String[] arrs = {"李旭华","李冠希","杨凤","杨如花"};
    pageContext.setAttribute("arrs", arrs);
%>
<!--使用EL表达式获取域中存储的数组数据-->
${ arrs[0] }
${ arrs[1] }
${ arrs[2] }
${ arrs[3] }
<!--使用jsp内置域对象存储List集合数据-->
<%
    List<String> list = new ArrayList<String>();
    list.add("李芙蓉");
    list.add("杨芙蓉");
    list.add("王凤");
    pageContext.setAttribute("list", list);
%>
<!--使用EL表达式获取域中存储的List集合数据-->
<!--List集合的本质是数组,则和数组获取数据相同-->
${ list[0] }
${ list[1] }
${ list[2] }
使用EL表达式获取jsp域中Map集合形式的数据:
<!--使用jsp内置域对象存储Map集合数据-->
<%
    Map<String,String> map = new HashMap<String,String>();
    map.put("aaa","李旭华");
    map.put("bbb","杨久君");
    map.put("ccc","李芮");
    map.put("ddd","李凤");
    map.put("eee.fff","李凤");
    pageContext.setAttribute("map", map);
%>
<!--使用EL表达式获取域中存储的Map集合数据-->
${ map.aaa }
${ map.bbb }
${ map.ccc }
${ map.ddd }
${ map[“eee.fff”] }   <!--当数据中名称中存在特殊字符时需使用["数据名称"]方式获取数据-->

注意事项:当数据中名称中存在特殊字符时需使用[“数据名称”]方式获取数据。

使用EL表达式获取jsp域中对象及对象List集合形式的数据:
<!--使用jsp内置域对象存储对象数据-->
<%
    User user = new User(1,"aaa","123");
    pageContext.setAttribute("user", user);
%>
<!--使用EL表达式获取域中存储的对象数据-->
${ user.id }    <!--前提是类中必须有该属性的get方法,才能使用-->
${ user.username }
${ user.password }
<!--使用jsp内置域对象存储对象List集合数据-->
<%
    User user1 = new User(1,"aaa","123");
    User user2 = new User(2,"bbb","123");
    User user3 = new User(3,"ccc","123");
    List<User> userList = new ArrayList<User>();
    userList.add(user1);
    userList.add(user2);
    userList.add(user3);
    pageContext.setAttribute("userList", userList);
%>
<!--使用EL表达式获取域中存储的对象List集合数据-->
${ userList[0].id } - ${ userList[0].username } - ${ userList[0].password }
${ userList[1].id } - ${ userList[1].username } - ${ userList[1].password }
${ userList[2].id } - ${ userList[2].username } - ${ userList[2].password }

注意事项:使用EL表达式获取对象中属性值时,其实调用是该对象该属性的get方法,则对象必须有对应属性的get方法。

EL表达式使用点和[ ]的区别:
  1. []用于有下标的数据(数组,list集合) 。
  2. .用于有属性的数据(map,对象)。
  3. 如果属性名中包含有特殊的字符(如.,-等),必须使用[],如:${ map[“eee.fff”] } 。
8.1.2 EL表达式执行运算
<h1>EL表达式执行运算</h1>
<h3>EL执行算数运算</h3>
<%
    pageContext.setAttribute("n1", "10");
    pageContext.setAttribute("n2", "20");
    pageContext.setAttribute("n3", "30");
    pageContext.setAttribute("n4", "40");
%>
${ n1 + n2 + n3 }  <!-- 会自动执行类型转换  当其中的某些值不存在时自动跳过 --> 
<h3>EL执行逻辑运算</h3>    <!-- 不能执行位运算 -->
${ n1 < n2 } - ${ n1 lt n2 } <!-- less than -->
${ n1 > n2 } - ${ n1 gt n2 } <!-- great than -->
${ n1 <= n2 } - ${ n1 le n2 } <!-- less equal -->
${ n1 >= n2 } - ${ n1 ge n2 } <!-- great equal -->
${ n1 == n2 } - ${ n1 eq n2 } <!-- equal -->
<h3>EL执行关系运算</h3>
${ n1<n2 && n3 < n4 } - ${ n1<n2 and n3 < n4 }
${ n1<n2 || n3 < n4 } - ${ n1<n2 or n3 < n4 }
${ !(n1 < n2) } - ${ not(n1<n2) }
<h3>EL执行三元运算</h3>
${ n1 < n2 ? "正确":"错误" }
<h3>empty运算</h3>  <!--判断某个值是否为空-->
${ user == null } - ${ empty user }
${ user != null } - ${ not empty user }
8.1.3 EL表达式操作web开发常用对象
EL表达式内置的常用的web开发对象:11个

注意:EL表达式内置的对象不能直接操作四个域存储数据,只能获取jsp四个域中的数据,并且只有pageContext能获取到jsp的内置对象,使用pageContext获取jsp的内置对象后才能对jsp进行控制,如:获取web项目的根路径(${pageContext.request.ContentPath})。

EL表达式内置对象作用对应JSP中对象(对象数据类型)
pageScope获取jsp的pageContext域中数据pageContext(PageContext)
requestScope获取jsp的request域中数据request(HttpServletRequest)
sessionScope获取jsp的session域中数据session(HttpSession)
applicationScope获取jsp的application域中数据application(ServletContext)
param获取请求中参数数据request.getParameter(String name)
paramValues获取请求中多个同名参数的数据,返回是数组request.getParameterValues(String name)
header获取请求头信息request.getHeader(String name)
headerValues获取请求头中的多个信息
initParam获取全局初始化参数ServletContext.getInitParameter(String name)
cookie获取WEB开发中cookierequest.getCookies()
pageContext获取jsp中的pageContext对象
<h3>接收请求的参数</h3>
<%= request.getParameter("id") %>
<%= request.getParameter("name") %>
<%= Arrays.toString(request.getParameterValues("hobby")) %> <!--获取复选框爱好的值-->
<hr/>
${ param.id }
${ param.name }
${ paramValues.hobby[0] }
${ paramValues.hobby[1] }
<h3>获取请求头</h3>
<%= request.getHeader("User-Agent") %>  <!--获取用户的浏览器类型-->
${ header["User-Agent"] }  <!--获取用户的浏览器类型-->
<h3>获取全局初始化参数</h3>
${ initParam.username }
<h3>获取Cookie中的值</h3>
${ cookie.history.value } <!-- 一般用在记住密码和用户名等-->
<h3>获取PageContext中的对象</h3>
<!--IP地址:-->${ pageContext.request.remoteAddr }
<!--工程路径:-->${ pageContext.request.contextPath }

8.2 在外部js文件中使用EL表达式的结果

在jsp页面中引入的外部的javascript文件是无法直接使用EL表达式的,如果要使用EL表达式,可以在jsp页面引入该js文件之前定义EL表达式,将EL表达式结果保存在js的全局变量中,在引入的外部的js文件中使用该变量表示EL表达式的结果。 如:在外部js文件中刷新jsp页面中验证码:

<!--login.jsp文件-->
<script type="text/javascript">
  // 设置项目路径变量,在js文件中使用
  var path = '${pageContext.request.contextPath}';
</script>
<!--校验表单的自定义checkForm.js文件-->
<script type="text/javascript" src="${ pageContext.request.contextPath }/bookmanager/js/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="${ pageContext.request.contextPath }/bookmanager/js/checkForm.js"></script>
<!-- 验证码图片-->
<div class="col-sm-3" style="padding-left:0px;">
  <img alt="验证码加载失败" id="iconCode" src="${pageContext.request.contextPath }/CheckImgServlet">
</div>
<div class="col-sm-3 text-center" style="padding-left:0px;margin-top:6px;">
  <span>看不清,<button type="button" id="changIconCode" class="btn btn-link">换一张</button></span>
</div>

<!--checkForm.js文件 部分代码-->
//验证码的刷新
$(function() {
    $("#changIconCode").click(function() {
        $("#iconCode").attr("src",path+"/CheckImgServlet?time"+new Date().getTime());
    });
    $("#iconCode").click(function() {
        $("#iconCode").attr("src",path+"/CheckImgServlet?time"+new Date().getTime());
    });
});

9. JSTL标签库

JSTL标签库:JSP Standard Tag Library,JSP标准标签库。EL表达式中没有进行循环和判断的作用,JSTL中提供了循环和判断的标签。作用是结合EL表达式替换jsp脚本。

注意事项:JSTL标签库有三个版本:1.0(不支持EL表达式),1.1和1.2(两个均支持EL表达式)。

9.1 JSTL标签库使用

  • 1. 引入standard.jarjstl.jar两个jar包。
  • 2. 在jsp页面中通过taglib指令引入标签库<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>.

注意事项:uri="http://java.sun.com/jsp/jstl/core"代表使用的是JSTL1.1或1.2版本,支持EL表达式;uri="http://java.sun.com/jstl/core"代表使用的是JSTL1.0版本,不支持EL表达式。

​ JSTL标签库中包含五类标签:core(核心标签),fmt(国际化标签),xml(xml标签),sql(SQL标签),fn(JSTL的函数库)。

9.2 JSTL核心标签的使用(重点是if和foreach标签)

<h1>JSTL的常用的标签一</h1>
<!--JSTL的set标签,在指定的jsp域中存储数据-->
<!--scope可以是:page(pageContext),request,session,application(servletContext)-->
<c:set var="i" value="张三" scope="page"></c:set>
${ i }
<c:set var="city" value="上海" scope="page"></c:set>

<!--JSTL的out标签,输出数据和${}功能相似,default属性是设置输出的默认值-->
<!--当city不为空时,显示的是city代表的值,否则显示的default设置的值-->
<c:out value="${ city }" default="北京"></c:out>
<!--escapeXml属性是设置是否将value中值进行转义输出,默认是转义后输出数据输出‘<h1>标题一</h1>’字符串;
当设置属性值为false是,是直接将value中值进行直接输出,输出是‘标题一’-->
<c:out value="<h1>标题一</h1>" escapeXml="false"></c:out>

<!--使用JSTL的set标签向jsp的域中存储数据-->
<c:set var="n1" value="10" scope="page"></c:set>
<c:set var="n2" value="20" scope="page"></c:set>
<!--JSTL的if标签,判断test属性中表达式为true时,标签内的内容执行,否则不执行;
var属性和scope属性是指将表达式的结果存储到指定的jsp域中并绑定到指定名称-->
<c:if test="${ n1 < n2 }" var="flag" scope="page"><!--将此次el表达式的结果存储在名称为flag的page域中-->
    n1 小于 n2
</c:if>
<!--if标签没有else,则可以使用多个if标签实现else的效果-->
<c:if test="${ n1 >= n2 }">
    n1 大于等于 n2
</c:if>
<!--执行if标签的判断语句,条件是上次判断后存到jsp域中的值-->
<c:if test="${ flag }">
    n1 小于 n2
</c:if>

<!--JSTL的choose标签,实现了if...else的效果-->
<c:choose>      实现了if...else的效果
    <c:when test="${n1 >= n2}">
        n1 大于等于 n2
    </c:when>
    <c:otherwise>
        n1 小于 n2
    </c:otherwise>
</c:choose>

<h1>JSTL常用标签:forEach的使用</h1>
<h3>遍历数组</h3>
<%
    String[] arrs = {"somnus1","somnus1","somnus1"};
    pageContext.setAttribute("arrs", arrs);
%>
<!--var代表的是迭代变量,items代表要迭代的数组-->
<c:forEach var="i" items="${ arrs }">
    ${ i }
</c:forEach>
<h3>遍历List集合</h3>
<%
    List list = new ArrayList();
    list.add("somnus1");
    list.add("somnus2");
    list.add("somnus3");
    pageContext.setAttribute("list", list);
%>
<c:forEach var="i" items="${ list }">
    ${ i }
</c:forEach>
<h3>遍历Map集合</h3>                
<%
    Map<String,String> map = new HashMap<String,String>();
    map.put("aaa","somnus1");
    map.put("bbb","somnus2");
    map.put("ccc","somnus3");
    pageContext.setAttribute("map", map);
%>
<c:forEach var="entry" items="${ map }">  <!-- ${map}中map代表的是map集合的entrySe t-->             
    ${ entry.key }-${ entry.value }
</c:forEach>

<h3>遍历从1到10</h3>
<c:forEach var="i" begin="1" end="10" step="2">
    ${ i }
</c:forEach>
<h3>遍历从100到300</h3>
<!-- varStatus代表当前遍历的状态,其有两个属性,count和index -->
<c:forEach var="i" begin="100" end="300" step="5" varStatus="status">   
    <c:if test="${ status.count % 3 == 0 }">
        <font color="red">${ i }</font>
    </c:if>
    <c:if test="${ status.count % 3 != 0 }">
        ${ i }
    </c:if>
</c:forEach>

9.3 JSTL提供的EL函数库的使用

JSTL标签库提供的EL函数库大多数是和字符串的操作相关的。

<h1>JSTL提供的EL的函数库</h1>
${ fn:contains("Hello World","Hello") } <!--查找第一个字符串中,是否包含第二个字符串-->
${ fn:length("HelloWorld") } <!--获取字符串的长度,该方法也可以用于获取集合的大小-->
${ fn:toLowerCase("ABCDE") } <!--将指定字符串转换为小写-->
<c:forEach var="i" items='${ fn:split("a-b-c-d","-") }'> <!--分割字符串后进行遍历输出-->
    ${ i }
</c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值