JSP常用标签

1.JSTL简介和环境搭建

JSTL是java中的一个定制标记库集,实现了jsp页面的代码复用,书写jsp的页面时可读性更强,剩下的步骤则是下载jar包,导入即可。

2.第一个JSTL小程序

JSTL在基本配置导入jar后,使用前还需导入标签库
在uri中之所以能找到该http,是因为导入了jar,否则是找不到的。prefix=”c”,里面的名字可以自定义,一般为“c”。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:out value="this is my first JSTL Demo"></c:out>
</body>
</html>

运行上面结果就会在页面输出我们value里的那句话

3.JSTL的好帮手-EL表达式

JSTL标签的value属性的属性值可以为变量和常量
变量需要通过EL表达式来获取.

1.什么是EL表达式
全名为Exoression Language
经常与JSTL配合使用,使得JSP页面更直观,写法更简单
普通写法:<%=session.getValue("name") %>
EL表达式:<c:out value="${sessionScope.name}"/>

2.EL表达式的格式

用美元符号"$"定界,内容包括在花括号"{}"中;
EL表达式的基本格式:${表达式}

EL表达式中的".""[]"运算符:
通常情况两者通用,eg:${user.sex}等同于${user["sex"]}
其中"[]"还可以用来进行集合元素中的定位${booklist[0].price}。
不通用的情况:
1、包含特殊符号:
如${user.first-name}则为错误的写法,正确的:${user["first-name"]};
2、通过变量动态的取值时:
${user[param]}---param可以是name or sex or others,是用户传入的情况。
而"."不能动态取值,它的写法是:${user.name}or${user.sex}or...

4.EL变量

当el表达式没有指定范围时,默认会从jsp四个内置对象中取值,顺序是Page>Request>Session>Application,如果全都取不到值不会输出null,会输出一个空字符串。
这里写图片描述

5. EL自动类型转换

要取得文本框中的输入,我们需要做类型转换

EL的运算符,EL的“+”运算符和Java中的“+”运算符不一样,它不能实现两个字符串的链接,如果这两个字符串是不能转化为数值型的字符串,就将抛出异常,如果要使用两个字符串连接(拼接)的话就要${表达式}${表达式}连接不需要“+”符号。

这里写图片描述

EL隐式对象
这里写图片描述

6. EL运算符

这里写图片描述

<% String username="null"; request.setAttribute("username", username); %>
    <c:out value="${empty username}"></c:out>

//如果username为null或者"",则返回true;如果username为"有内容",则返回false。

注意属性需要先set进4个内置对象中,不然会调用不了

7. JSTL标签之out标签

JSTL的核心标签库标签共13个,从功能上分类分为4类:
表达式控制标签:out set remove catch
流程控制标签:if choose when otherwise
循环标签:forEach forTokens
URL操作标签:import url redirect

JSTL标签之out标签
变量输出default设置默认值
escapexml = “false”,设置后即可输出转义字符

<!-- 使用out标签输出常量 -->
<c:out value="This is first JSTL demo"></c:out><br>
<!-- 使用out标签输出变量 -->
<% session.setAttribute("name", "John"); %>
<!-- 直接输出变量 -->
<c:out value="${name }"></c:out><br>
<!-- 当变量不存在时,通过default属性输出默认值 -->
<c:out value="${username }" default="error"></c:out><br>
<!-- 设置输出转义后的字符需要escapeXml属性值设置成false,escapeXml默认值:true -->
<c:out value="&lt out标签  &gt" escapeXml="false"></c:out>

8.JSTL标签之set标签

set标签的用法:

  • 存值到scope中,scope就是我们之前说的四种配置,request,session等等,可将值以变量形式存放在指定范围中(2种形式)举例:
<body>
    <c:out value="这是我第一个web页面!" />
    <c:set value="today" var="day" scope="session"/>
    <c:out value="${day}" />
</body>
<c:set var="today" scope="session">today值</c:set>
<c:out value="${today}" />
  • 存值到javabean的属性当中,需要配合target属性指定对象并且通过property属性指定要赋值为对象中的哪个属性,存到javabean中需要有java实体类,jsp需要引入<useBean>标签,设置属性的值可以写到value中,也可以写到标签的内容里面。
<c:set target="${student}" property="sName" value="薛江波"></c:set>
    <c:out value="${student.sName}" /><br>
    <c:set target="${student}" property="age" value="1"></c:set>
    <c:out value="${student.age}" />
    <c:set target="${student}" property="sAdress" >世界</c:set>
    <c:out value="${student.sAdress}" />

这里注意一个错误,当把年龄设置成int类型时,不在属性里直接写value,而是在两个<set>之间置入值时会报错。

9.JSTL标签之remove标签

remove只能移除某个变量;不能移除某个对象中的某一个属性,要删除只能移除整个对象
var属性是必选的,scope是可选的

<c:set value="today" var="day" scope="session"/>
    <c:remove var="day" />
    <c:out value="${day}" /><br>

10.JSTL标签之catch标签

JSTL标签之catch标签

catch标签的用法
catch标签中可以包含哪些容易出错的JSTL标签(逻辑)

<!-- catch标签的用法 -->
<c:catch var="error">
<c:set target="aa" property="bb">asasa</c:set>
</c:catch>
<c:out value="${error}"></c:out>

11.JSTL标签之if标签

流程控制标签if,if标签的用法和我们程序中的if作用相同,用来实现分支条件的控制。

  • test属性用于存放判断的条件,一般使用EL表达式来编写
  • var属性指定名称用来存放判断的结果类型为true或者false
  • scope属性用来存放var属性存放的范围
<c:if test="" var="" scope=""></c:if>

实例

<c:out value="${student.age}" />
    <c:if test="${student.age>=2}" var="result" />
    <c:out value="${result}" />

12.JSTL标签之choose-when-otherwise标签

接下来学习choose when以及otherwise这三个标签,之所以放在一起讲是因为这三个标签通常都会放在一起配合使用

-通常这三个标签被放在一起配合使用
-<c:choose>标签嵌套在<c:when><c:otherwise>标签外面作为他们的父标签来使用
-其中choose和when标签也可以一起组合使用

<!-- choose、when、otherwise标签的用法 -->
<c:choose>
<c:when test="${param.score<=100 && param.score>=60 }">
<c:out value="及格"></c:out>
</c:when>
<c:when test="${param.score<60 && param.score>=0 }">
<c:out value="不及格"></c:out>
</c:when>
<c:otherwise>
<c:out value="请检查你的输入!"></c:out>
</c:otherwise>
</c:choose>

Ps:用法类似于switch——case——default。

只是用choose和when

<c:choose>
    <c:when test="${student.age>=18}" >
    <c:out value="该学生已成年"></c:out>
    </c:when>

13.JSTL标签之forEach标签

forEach标签的用法
-根据循环条件遍历集合(Collectoin)中的元素
.var设定变量名用于存储从集合中取出元素(必须无默认值)
.items指定要遍历的集合(必须无默认值)
.begin、end用于指定遍历的起始位置和终止位置(有默认)
.step指定循环的步长(有默认)
.varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素状态

<%
List<String> fruits=new ArrayList<String>();
fruits.add("apple");
fruits.add("pear");
fruits.add("orange");
fruits.add("banana");
request.setAttribute("fruits", fruits);
%>
<!-- forEach标签用法 -->
<!-- 用法一:全部遍历 -->
<c:forEach var="fruit" items="${fruits}">
<c:out value="${fruit}"></c:out><br>
</c:forEach>
<hr>
<!-- 用法二:部分遍历 -->
<c:forEach var="fruit" items="${fruits}" begin="1" end="2">
<c:out value="${fruit}"></c:out><br>
</c:forEach>

<!-- 用法三:部分遍历中指定步长 -->
     <c:forEach var="fruit" items="${fruits}" begin="1" end="3" step="2">
        <c:out value="${fruit}"></c:out><br>
     </c:forEach>

Ps:step默认值:1。

<!-- 用法四:部分遍历并带状态 -->
     <c:forEach var="fruit" items="${fruits}" begin="1" end="3" varStatus="fru">
        <c:out value="${fruit}——四个属性:"></c:out><br>
        <c:out value="index属性:${fru.index}"></c:out><br>
        <c:out value="count属性:${fru.count}"></c:out><br>
        <c:out value="first属性:${fru.first}"></c:out><br>
        <c:out value="last属性:${fru.last}"></c:out><br>
        <c:out value="----------"></c:out><br>
     </c:forEach>

Ps:index从0开始;count从1开始;first是否第一个(boolean);last是否最后一个(boolean)。

14.JSTL标签之forTocken标签

forTokens标签的用法
-用于浏览字符串,并根据指定的字符将字符串截取
items指定被迭代的字符串
delims指定使用的分隔符
var指定用了存放遍历到的成员

<!--forTokens标签的用法 -->
<c:forTokens items="029-88886666-999" delims="-" var="num">
<c:out value="${num }"></c:out><br>
</c:forTokens>

这里写图片描述

15.JSTL标签之import标签

JSTL标签之import标签

import标签:可以把其他静态或动态文件包含到本JSP页面
<jsp:include>不同的是:include只能包含同一个web应用的文件,而import可以包含其他web应用中的文件,甚至是网络上的资源
PS:由于import标签导入网络上的资源可能会出现路径问题,所以import标签要包含在catch标签内使用
这里写图片描述

import标签用法
语法格式:
<c:import url="" context="" var="" scope="" charEncoding="" varReader="">
</c:import>
.url被导入资源的URL路径
.context相同服务器下其他的web工程,必须以"/"开头
.var以String类型存入被包含文件的内容
.Scope var变量的JSP范围
.charEncoding被导入文件的编码格式
.varReader以Reader类型存储被包含文件内容

<!-- 通过import标签导入网络上的相对路径 -->
<c:catch var="error20161">
<c:import url="招聘需要学的技术.txt" charEncoding="utf-8"></c:import>
</c:catch>
<c:out value="${ error20161}"></c:out><br>
<!-- 通过import标签导入网络上的绝对路径 -->
<c:catch var="error2016">
<c:import url="http://www.baidu.com"></c:import>
</c:catch>
<c:out value="${ error2016}"></c:out><br>

<!-- var及scope用法 -->
<c:catch var="error2">
<c:import url="Test.txt" var="test" scope="session" charEncoding="gbk"></c:import>
</c:catch>
<c:out value="import标签存储的test字符串变量值:${sessionScope.test}"></c:out>

context用来显示同一个服务器不同project的页面
context引入的内容是webapps下的其他Web project
-1.修改tomcat的发布路径(改eclipse中tomcat的部署路径,如果是灰掉的,停掉tomcat,然后clean,就可以改为第二项了。下面的path改为webapps)
-2.修改%TOMCAT_HOME%/conf/context.xml的Context标签中的属性
.crossContext=”ture”

<!-- context属性用法 -->
<c:catch var="error3">
<c:import url="/index1.jsp" context="/Test1"></c:import>
</c:catch>
<c:out value="${error3}"></c:out><br>

16.JSTL标签之redirect标签

redirect标签的用法
-该标签用来实现请求的重定向,同时可以在url中加入指定的参数
.url指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址
.context用于导入其他web应用中的页面

<!-- redirect标签的用法,传递参数 -->
<c:redirect url="firstDemo.jsp">
<c:param name="username">zhangsan</c:param>
<c:param name="password">123</c:param>
</c:redirect>

目标页面输出
<c:out value="username是${param.username }"></c:out>
<c:out value="password是${param.password }"></c:out>

17.JSTL标签之url标签

url标签的用法
该标签用于动态生成一个String类型的URL,可以同<c:param>标签共同使用,也可以使用html的<a>标签实现超链接
value表示url路径值
例子:

<!-- url标签用法 -->
<c:if test="${1<2}">
<c:set var="partUrl">temp.jsp</c:set>
</c:if>
<c:url value="http://localhost:8080/Test/${partUrl}" var="newUrl" scope="session"></c:url>
<a href="${newUrl}">New URL</a>

18.JSTL函数之常用函数

使用JSTL函数需要导入:

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

函数用法:${fn:函数名}
使用JSTL标签需要导入:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- JSTL函数使用 -->
<c:out value="“Hello World”字符串中是否包含“Hello”?${fn:contains('Hello World','Hello')}"></c:out>
<hr>
<c:out value="“Hello World”字符串中是否包含“ABCD”?${fn:contains('Hello World','ABCD')}"></c:out>
<hr>
<c:out value="“Hello World”字符串中是否包含“hello”(忽略大小写)?${fn:containsIgnoreCase('Hello World','hello')}"></c:out>
<hr>
<c:out value="“Hello”是否在“Hello World”字符串开头?${fn:startsWith('Hello World','Hello')}"></c:out>
<hr>
<c:out value="“world”是否在“Hello World”字符串尾部?${fn:endsWith('Hello World','world')}"></c:out>

<!-- 不会输出<book>标签 -->
    <book></book>
    <hr>
    <!-- 可输出标签但会出现转义问题 -->
    <c:out value="${fn:escapeXml('<book>书</book>')}"></c:out>
    <hr>
    <!-- 可输出标签且不会出现转义问题 -->
    <c:out value="<book>书</book>"></c:out>
    <hr>
    <!-- indexOf函数用法 -->
    <c:out value="“Hello World”字符串“llo”出现的index值:${fn:indexOf('Hello World','llo')}"></c:out>

Ps:如果是xml标签(即使系统不认识),但是也不会输出。


escapeXml();对特殊字符进行转义;如果不想转义直接赋值给value即可;
indexOf(串1,串2,);串2在串1中出现的索引

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值