JSTL编程实践

作者: ERROR505 | 来源:发表于2019-11-22 22:01 被阅读0次

    一、实验内容

    前言

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

    相关文章

      网友评论

        本文标题:JSTL编程实践

        本文链接:https://www.haomeiwen.com/subject/xxrqwctx.html