JSTL程序员

JSTL编程实践

2019-11-22  本文已影响0人  ERROR505

一、实验内容

前言

JSTL的安装使用:
在JSP中为了将脚本语言与标签分离,以实现前端全部由标签的方式实现,在java web中使用JSTL标准标签库,配合EL表达式获取数据,以此提高程序的可读性和易维护性。
下载地址:http://tomcat.apache.org/taglibs/standard/
(1)选择版本下载,最新的为1.2

image.png
(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会自动转换格式。

image.png
资源包内容:
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一样书写代码,让你的逻辑能够更好的表达出来,很好的将脚本和标签分离,使代码可读性和易维护性大大提高,同时能让页面在即是不使用脚本的情况下变得更加灵活。

上一篇 下一篇

猜你喜欢

热点阅读