一、实验内容
前言
JSTL的安装使用:
在JSP中为了将脚本语言与标签分离,以实现前端全部由标签的方式实现,在java web中使用JSTL标准标签库,配合EL表达式获取数据,以此提高程序的可读性和易维护性。
下载地址:http://tomcat.apache.org/taglibs/standard/
(1)选择版本下载,最新的为1.2
(2)将红框的四个包下载放到项目的运行环境classpath中,在Eclipse工具下,可将其复制到WebContent\WEB-INF\lib目录下,为了方便推荐第二种。
image.png
(3)错误
如果出现下面的错误就重新打开下载链接,多试几次,不要问我为什么,我也遇到这个情况了,就是这么解决的。
image.png
(5)最终效果
image.png
然后你就可以愉快的写作业了,记得加上这个代码
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1、JSTL标签库的熟练使用
在页面中接收用户输入的字符串,使用JSTL将此字符串反向输出。不允许使用Java代码。
思路:
通过JSTL的标准函数库<c:forEach >将字符串中的字符反向排序然后输出
代码如下:
JSTL.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 函数标签库,后面求字符串长度需要 -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form name="one" action="JSTL.jsp" method="get">
<table>
<tr>
<td> 输入您的字符串:</td>
<td><input type="text" name="str" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
<!-- 用EL获取字符串数据 -->
<c:set var="str" value ="${param.str}"></c:set>
<p>正序:</p>
<c:out value="${str }"></c:out>
<!-- 求长度,需要前面导入的函数标签库 -->
<c:set var="strlen" value="${fn:length(str)}" />
<c:forEach var="i" begin="0" end="${strlen}" step="1">
<!-- 每次返回一个字符将它放置到最前面,比如abc,返回a,newstr为a,然后返回b放在newstr前面,nwestr变为ba -->
<c:set var = "newstr" value="${fn:substring(str,i,i+1)}${newstr}" />
</c:forEach>
<!-- 反序输出 -->
<p>反序:</p>
<c:out value="${newstr }"></c:out>
</body>
</html>
效果图:
image.png
2、JSTL标签库的熟练使用
使用JSTL在页面中输出1到100的质数。不允许使用Java代码。
思路:
用<c:forEach >实现两重循环,第一层循环从2到100,第二层循环从2到第一层数本身,用来判断是否为质数,其中设置exitId标志是否为质数,代码中<c:if test="${num1.index%num2.index==0&&exitId==1 }">语句中num1.index%num2.index==0,能被num2整除只有非质数和数本身,所以在exitId标志为质数的状态下还能被num2整除的只有数本身了,即如果执行了该判断内的代码(输出数值),数必定是质数且为第二层循环的最后一次也就是数本身(num1=num2),此时再将exitId重置为下一个数判断做准备。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 函数标签库,后面求字符串长度需要 -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>1到100的质数:</p>
<c:forEach begin="2" end="100" varStatus="num1">
<!-- 设置一个exitId用于标记是否为质数,即有一个数能整除你,则代表你不是质数 exitId=0-->
<c:set var="exitId" value="1"></c:set>
<!-- num1.index是num1的数值,varStatus还有其他三个属性,count、first、last -->
<c:forEach begin="2" end="${num1.index}" varStatus="num2">
<!-- 如果能被除自己以外的数整除则非质数,将exitId赋值0 -->
<c:if test="${num1.index%num2.index==0&&num1.index!=num2.index}">
<c:set var="exitId" value="0"></c:set>
</c:if>
<!-- exitId=1说明在前面的循环中没有能被整除的数,只能被自己整除所以为质数-->
<c:if test="${num1.index%num2.index==0&&exitId==1 }">
<!-- 这里将exitId置1是因为这次判断成立的话必定是这个数本身,也就是第二层循环最后一次,将exitId置1是个为下一个数标记 -->
<c:set var="exitId" value="1"></c:set>
${num1.index}
</c:if>
</c:forEach>
</c:forEach>
</body>
</html>
效果图:
image.png
3、JSTL标签库的熟练使用
使用JSTL实现一个用户登录页面(中文和英文可自由切换)。
思路:
用下拉框选择语言,提交后根据下拉框的选择设置页面为不同的语言即可。
在实验开始需要建立两个资源包,新建文件,名字后缀为xxx.properties,我的是messageResource_zh_CN.properties和messageResource_en_US.properties,直接右键新建File即可,而且需要把这两文件放在如下图路径,没有的话要新建。中文资源包内只需正常输入中文即可,Eclipse会自动转换格式。
资源包内容:
messageResource_zh_CN.properties
messageResource_zh_CN.properties
messageResource_en_US.properties
messageResource_en_US.properties
源代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:if test="${param.language eq 'zh'}">
<fmt:setLocale value="zh_CN" />
</c:if>
<c:if test="${param.language eq 'en'}">
<fmt:setLocale value="en_US" />
</c:if>
<!-- 资源包 -->
<fmt:bundle basename="messageResource">
<!--第一个表单用来切换语言,采用下拉框方式 -->
<form name="one" action="JSTL.jsp" method="post">
<li><label><fmt:message key="language"/></label>
<select name="language" >
<option value="zh" <c:if test="${language=='zh'}"></c:if>>中文</option>
<option value="en" <c:if test="${language=='en'}"></c:if>>English</option>
</select>
<input type="submit" value="<fmt:message key="change"/>" />
</li>
</form>
<!-- 第二个表单进行登录 -->
<form name="two" action="JSTL.jsp" method="get">
<table>
<tr>
<td>
<fmt:message key="user"/>
<input type="text" name="user" />
</td>
</tr>
<tr>
<td>
<fmt:message key="password"/>
<input type="password" name="password" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="<fmt:message key="enter"/>"/>
</td>
</tr>
</table>
</form>
</fmt:bundle>
</body>
</html>
效果图:
中文版.png
英文版.png
总结
在使用JSTL标签库的时候确实会更加简洁,与EL表达式配合使用可以直接在JSP中如同java一样书写代码,让你的逻辑能够更好的表达出来,很好的将脚本和标签分离,使代码可读性和易维护性大大提高,同时能让页面在即是不使用脚本的情况下变得更加灵活。
网友评论