【JavaWeb】之JSTL & EL表达式(上)

简介: 【JavaWeb】之JSTL & EL表达式

前言


本文为JavaWeb基础JSTL & EL表达式相关知识介绍,Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~


一、JSP标签


jsp标签的分类:


(1)内置标签(动作标签): 不需要在jsp页面导入标签

(2)jstl标签: 需要在jsp页面中导入标签

(3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签

内置标签(动作标签)

<jsp:forward />转发标签:

<!--语法:-->
<jsp:forward page="/MyJsp001.jsp"></jsp:forward>
<!--相当于java代码:--> 
request.getRequestDispatcher("/MyJsp001.jsp?name=jxf").forward(request, response);
<!--注意:但是java代码的转发可以通过url带参数的方式进行传递参数,而转发标签需要借助于下面的<jsp:param>标签实现参数传递--> 


jsp:pararm/参数标签:

<!--语法:-->
<jsp:param value="jxf" name="name"/> <%-- 传递一个名为name,值为jxf的参数,参数一般作为其他标签的子标签使用--%>
 <!--结合<jsp:forward>标签用法:-->
<jsp:forward page="/MyJsp001.jsp">
  <jsp:param value="jxf" name="name"/>
</jsp:forward> 

jsp:include/包含标签:

<!--语法:-->
<jsp:include page="/MyJsp001.jsp">
        <jsp:param value="jxf" name="name"/><%--可以将参数传递给包含进来的页面--%>
</jsp:include>

与@inclue包含指令的区别:

(1)首先是语法不同:<jsp:include page=“/MyJsp001.jsp”>;<%@inclue file=“被包含的页面”%>

(2)jsp:include可以传递参数,<%@inclue%>不可以

(3)jsp:include:包含页面与被包含页面分别编译为两个java源文件,在运行时引用;<%@inclue%>:包含页面与被包含页面合并编译为一个java源文件


二、JSTL标签


1.什么是JSTL


JSP标准标识库,使用JSTL可实现JSP页面的逻辑处理; 可用于编写各种动态JSP页面

JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给JavaWeb开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。

开发人员可以利用JSTL标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。


2.JSTL环境搭建


导入jar包文件


  • jstl-x.x.jar


在jsp页面添加taglib指令


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


这里的uri 标识符指向jar包的tld文件,prefix为前缀,可以自定义,一般定义为c;也称为c标签


使用JSTL标签


刚才用c作为前缀的,那么直接写<c:标签 , 标签属性>内容</c:标签> 即可


3.条件标签 —if


if标签的几个属性:


test:Boolean类型;决定是否处理标签体的内容,即条件判断

var:String类型;指定变量名,保存test属性的判断结果

scope:String类型;指定var值的作用域范围,默认为page,可选值:page,request,session,application


代码示例:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--使用tablib指令指向jstl标签库,定义前缀名prefix--%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--
在test中可写入条件判断(仅有test支持使用el标签),
var定义属性名,scope声明作用范围(默认为page,即PageContext域对象);
将该标签的test返回结果自动赋值给var,再由scope决定哪个域对象可以调用;--%>
<c:if test="${10<20}" var="qwe" scope="application">
    test判断为true:内容可显示!<br/>
</c:if>
scope指定了作用域,其他域对象获取不到==>
${pageScope.qwe}<br/>
上面指定的是application应用程序域对象==>
${qwe}
</body>
</html>

启动服务器,页面显示


test判断为true:内容可显示!
scope指定了作用域,其他域对象获取不到==>
上面指定的是application应用程序域对象==> true


4.迭代标签 —forEach


forEach对Java中的集合与数组进行遍历

forEach标签的几个属性:


(1)items : 获取需要迭代的集合或数组,支持EL表达式;类型为数组,字符串,集合;

(2)var : 定义一个变量,接收循环中获取的数据;不支持EL表达式,类型为String;

(3)varStatus : 获取循环的状态信息,不支持 EL表达式,类型为String;varStatus调用的几个参数:常用index,count

(4)step : 设置迭代的步长,默认为1; 支持EL表达式,类型为int;

(5)end : 设置迭代的结束索引 ,支持EL表达式,类型为int;若指定end属性,则在items的下标到指定end的位置就会结束迭代,若不指定,就全部迭代

(6)begin : 设置迭代的开始索引,支持EL表达式,类型为int;若指定begin属性,则从items的下标为begin的位置开始迭代,若不指定,则全部迭代


代码示例:


<%
    ArrayList<String> people = new ArrayList<>();
    people.add(0, "张三");
    people.add(1, "李四");
    people.add(2, "王五");
    people.add(3, "赵六");
    people.add(4, "丁一");
    people.add(5, "胡二");
    request.setAttribute("list", people);
%>
<%--
var,每一次遍历出来的变量
items,要遍历的对象
begin, 开始位置
end,   结束位置
step, 步长
--%>
<c:forEach var="people" items="${list}">
    <c:out value="${people}"/>
    <br>
</c:forEach>
<hr>
<c:forEach var="people" items="${list}" begin="1" end="3" step="2">
    <c:out value="${people}"/>
    <br>
</c:forEach>


5.迭代标签 —forTokens


forTokens 用于迭代分隔字符串


有以下属性:


items:需要进行处理的字符串

delims :分隔符,可以是数字、字符串或特殊字符

var:分隔items的字符串后的定义名

varStatus:当前迭代的状态信息

step: 迭代的步长

begin:设置迭代开始的索引

end:设置迭代结束的索引


代码示例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--指定导入的jstl标签库,定义前缀名prefix--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--forTokens 遍历字符串,进行分割--%>
<%
  String str="学习,forTokens,标,签,Q,WE,R12,3X10:100,500,IO,:,的,";
  request.setAttribute("str",str);
%>
<%--使用forTokens分割字符串--%>
<%-- items:需要遍历的字符串; delims:定义分隔符 ; var: 接收每次分割的字符 --%>
<c:forTokens items="${str}" delims="," var="ch">
    ${ch}<br/>
</c:forTokens>
</body>
</html>

启动服务器,页面显示:


学习
forTokens
Q
WE
R12
3X10:100
500
IO
:


相关文章
|
6天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
|
3月前
|
存储 前端开发 JavaScript
基于JavaWeb实现停车场管理系统
基于JavaWeb实现停车场管理系统
|
7天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
3月前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
41 0
|
8天前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
2月前
|
存储 程序员
JavaWeb之Listener监听器
JavaWeb之Listener监听器
33 0
|
3月前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
3月前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
67 0
|
3月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
21 0
|
3月前
|
Web App开发 JSON Java
JavaWeb基础第五章(请求,响应与分层解耦)
JavaWeb基础第五章(请求,响应与分层解耦)