JSTL库

本文详细介绍了如何在JSP中使用JSTL进行条件判断(if-else、if...elseif...else...),循环遍历(forEach)以及自定义函数的运用,包括内置函数的使用和自定义标签的步骤。
摘要由CSDN通过智能技术生成

目录

使用jstl的步骤

模拟 if

模拟 if...else if...else if...else...

模拟 循环forEach

接收集合类型

JSTL源码分析(if为例子)   

函数

内置函数的使用步骤

函数源码分析(contains方法为例)

自定义标签的步骤


1、JSTL:JSP标准的标签库,作用是使用标签代替java代码。

2、JSTL:标准是SUN制定,apache实现的。(SUN收录了Apache的实现)

3、jstl标签可以使用内置的标签,也可以自定义标签。(这里只使用内置标签)

使用jstl的步骤

        *   在项目中引入jstl的相关jar包,确保jar存在:jstl.jar、standard.jar,可以使用这个连接直接跳转到官网,在官网下,选择自己想要的jar包。

         *   在需要使用标签的jsp页面上使用taglib指令引入标签库

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

解析:让jsp和核心标签库的相关配置文件c.tld建立连接。

        *   在需要使用标签的位置直接使用标签

模拟 if

<c:if test="${empty param.username}" scope="page" var="a">
    <h1 align="center"><font color="red">请提供用户名</font></h1>
</c:if>
<c:if test="${not empty param.username}" scope="page" var="b">
    <h1 align="center"><font color="green">欢迎${param.username}</font></h1>
</c:if>

解析:

scope 指定test属性运算符结果保存范围,可选值:
        "page"              pageContext范围
        "request"           request范围
        "session"           session范围
        "application"       application范围

【注】scope如果不写默认值是“page”,耗费资源最少,范围最小。

url: localhost:8080/myweb/jstl_text.jsp,输出

请提供用户名

url :http://localhost:8080/myweb/jstl_text.jsp?username=lili,输出

欢迎lili

模拟 if...else if...else if...else...

<c:choose>
    <c:when test="${param.age < 18}">
        少年
    </c:when>
    <c:when test="${param.age < 35}">
        青年
    </c:when>
    <c:otherwise>
        老年
    </c:otherwise>
</c:choose>

模拟 循环forEach

<c:forEach begin="1" end="10" step="1" var="i">
    ${i}
</c:forEach>

将上述代码转为java代码

for (int i=1; i<=10; i++){
    作用域对象.setAttribute("i",i);
    System.out.println(作用域对象.getAttribute("i") == null ? "" : 作用域对象.getAttribute("i"));
}

接收集合类型

<c:forEach items="${stuList}" var="stu" varStatus="stuStatus">
    ${stuStatus.count}、${stu.sno}、${stu.sname}<br/>
</c:forEach>

解析:

        items 属性可以接受EL表达式,类型可以是数组或者集合。

        var 代表集合中元素。

        varStatus 属性指向了一个状态对象,状态对象都有一个count属性,count属性的值是序号。

将上述代码转为java代码

for (Student s : stuList){
    pageContext.setAttribute("e",e);
    System.out.println(((Student)作用域对象.getAttribute("s")).getSno());
    System.out.println(((Student)作用域对象.getAttribute("s")).getSname());
}

附加:

<c:forTokens items="127.0.0.1,192.168.0.3,192.168.6.5" delims="," var="ip">
    ${ip}<br/>
</c:forTokens>

还可以把 items 的内容写在 webapp/WEB-INF/web.xml中

    <context-param>
        <param-name>ips</param-name>
        <param-value>127.0.0.1,192.168.0.3,192.168.6.5</param-value>
    </context-param>

用 initParma 内置对象接收数据

<c:forTokens items="${initParam.ips}" delims="," var="ip">
    ${ip}<br/>
</c:forTokens>

JSTL源码分析(if为例子)   

         <tag>
            <description></description>
            <name>if</name>            
            <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class> 
            <body-content>JSP</body-content>                                     
            <attribute>                                                          
                <description></description>                                      
                <name>test</name>                                                
                <required>true</required>                                        
                <rtexprvalue>true</rtexprvalue>                                  
                <type>boolean</type>                                             
            </attribute>
        </tag>

解析:

description:标签描述

name:标签名字

tag-class:标签对应的需要执行的类

body-content:标签体中的内容类型

attribute:标签可以出现的属性

        description:对属性的描述

        name:属性的名字

        required:该属性是否必须的,true表示必须的

        rtexprvalue:该属性是否可以接收EL表达式,true表示支持EL表达式

        type:该属性的数据类型

函数

1、函数是对EL表达式的补充,函数是属于JSTL的一部分,对应的配置文件,standard.jar包中的fn.tld文件。

2、函数也是联合EL表达式也是代替JSP中的java代码

3、函数成分:内置函数、自定义函数(都需要掌握)

4、EL表达式怎么用,函数就怎么用。

内置函数的使用步骤

        * 导入jar包(jstl.jar、standard.jar)

        * 使用taglib指令导入函数库

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

        * 在需要使用函数的位置使用即可

${fn:contains("HelloWorld.java", ".java")}

函数源码分析(contains方法为例)

        <function>
            <description></description>                                                                         函数描述
            <name>contains</name>                                                                               函数名
            <function-class>org.apache.taglibs.standard.functions.Functions</function-class>                    函数对应的类
            <function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>       函数对应的类中需要执行的方法
            <example>
              &lt;c:if test="${fn:contains(name, searchString)}">                                               例子
            </example>
        </function>

解析:

        description:函数描述

        name:函数名

        function-class:函数对应的类

        function-signature:函数对应的类中需要执行的方法

        example:例子

自定义标签的步骤

        * 在WEB-INF目录下新建text.tld文件,从fn.tld文件中拷贝模板。

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">

    <description>Text 1.1 functions library</description>
    <display-name>Text functions</display-name>
    <tlib-version>1.1</tlib-version>
    <short-name>text</short-name>
    <uri>http://www.km.com/jsp/jstl/functions</uri>

    <function>
        <name>getText</name>
        <function-class>km.bean.StringUtil</function-class>
        <function-signature>java.lang.String getText(java.lang.String))</function-signature>
    </function>
</taglib>

        * 编写一个类,在该类中编写一个方法,该方法必须是public的。并且必须是static的

package km.bean;

public class StringUtil {

    /**
     * 工具类的构造方法一定都是私有化的
     */
    private StringUtil(){}

    /**
     * 通过属性配置文件中的key获取value
     */
    public static String getText(String code){
        return "方法执行了";
    }
}

        * 使用即可

<%=StringUtil.getText("000")%>
${text:getText("000")}

方法结果是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值