the5fire的技术博客

关注python、vim、linux、web开发和互联网--life is short, we need python.


JSTL的核心库简单使用

作者:the5fire | 标签:   | 发布:2010-12-31 2:14 p.m. | 阅读量: 2989, 2989

其实看了前面的那篇文章 《JSTL的EL表达式简单使用》 ,再结合说明文档使用JSTL已经基本可行了,不过由于EL在JSTL中实在是比较简单,因此很有必要说一下JSTL的核心库的使用。

EL就像是被封装好的函数,而核心库中的表达式像是一个新的语言,包括基本的语句。废话不多说了,还是代码为主。 差点忘了,这里需要引入两个jar包,从这下载: http://www.apache.org/dist/jakarta/taglibs/standard/binaries/,然后在使用JSTL核心库的JSP页面要声明一下,看下面具体的JSP代码吧。

首先Servlet:

package com.jstl;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 演示JSTL核心库
 * @author 胡阳
 *
 */
public class JstlCoreServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //普通字符串
        request.setAttribute("hello", "hello world");

        //HTML
        request.setAttribute("welcome", "<font color=red>the5fire的技术博客</font>");

        //条件控制
        request.setAttribute("v1", 10);
        request.setAttribute("v2", 20);

        //对象数组
        //对象数组
        User[] users = new User[9];
        for (int i = 0; i < users.length; i++) {
            users[i] = new User();
            users[i].setUsername("胡阳" + i);
            users[i].setAge(23 + i);
        }
        request.setAttribute("users", users);

        request.getRequestDispatcher("/jstl_core.jsp").forward(request, response);
    }


}

然后关于xml的配置,你看上篇文章吧,比较简单

建立JSP页面:jstl_core.jsp:(要注意第二行的这个引入)

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ 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=GB18030">
<title>jstl核心库</title>
</head>
<body>
    <h1>jstl核心库</h1>
    <hr>
    <li>采用c:out标签</li>
    hello(使用标签):<c:out value="123"/><br>
    hello(使用标签):<c:out value="hello"/><br>
    hello(使用标签):<c:out value="${hello }"/><br>
    hello(使用EL表达式):${hello }<br>
    hello(default):${hello123 }<br>
    hello(使用缺省值):<c:out value="${hello123 }" default="没有纸"/><br>
    hello(使用缺省值):<c:out value="${hello123 }">没有纸</c:out><br>
    welcome(使用EL表达式):${welcome }<br>
    welcome(使用标签,escapeXml):<c:out value="${welcome }" escapeXml="true"/><br>
    welcome(使用标签,escapeXml):<c:out value="${welcome }" escapeXml="false"/><br>
    <p>
    <li>测试c:set,c:remove</li><br>
    <c:set value="root" var="userid"/>
    userid:${userid }<br>
    <c:remove var="userid"/>

    <p>
    <li>条件控制标签:c:if</li><br>
    <c:if test="${v1 lt v2 }">
        v1小于v2<br>
    </c:if>

    <p>
    <li>条件控制标签:c:choose,c:when,c:otherwise</li><br>
    <c:choose>
        <c:when test="${v1 gt v2 }">
            v1大于v2<br>
        </c:when>
    </c:choose>
    <c:choose>
        <c:when test="${empty userList }">
            没有符合条件的数据<br>
        </c:when>
        <c:otherwise>
            存在用户数据<br>
        </c:otherwise>
    </c:choose>
    <p>
    <li>演示循环控制标签:forEach</li><br>
    <h3>采用jsp脚本显示</h3>

        <table border="1">
            <tr>
                <td>用户名称</td>
                <td>年龄</td>
            </tr>
            <c:choose>
                <c:when test="${empty users }">
                    <tr>
                        <td colspan="3">没有符合条件的数据</td>
                    </tr>
                </c:when>
                <c:otherwise>
                    <c:forEach items="${users }" var="user">
                        <tr>
                            <td>${user.username }</td>
                            <td>${user.age }</td>
                        </tr>
                    </c:forEach>

                </c:otherwise>
            </c:choose>
        </table>
    <h3>采用forEach标签,varstatus</h3>
    <table border="1">
            <tr>
                <td>用户名称</td>
                <td>年龄</td>
            </tr>
            <c:choose>
                <c:when test="${empty users }">
                    <tr>
                        <td colspan="3">没有符合条件的数据</td>
                    </tr>
                </c:when>
                <c:otherwise>
                    <c:forEach items="${users }" var="user" varStatus="vs">
                        <c:choose>
                            <c:when test="${vs.count mod 2 == 0 }">
                                <tr bgcolor=red>
                            </c:when>
                            <c:otherwise>
                                <tr bgcolor=blue>
                            </c:otherwise>
                        </c:choose>
                            <td>${user.username }</td>
                            <td>${user.age }</td>
                        </tr>
                    </c:forEach>

                </c:otherwise>
            </c:choose>
        </table>
</body>
</html>

在原先的index页面中添加:

<a href="servlet/JstlCoreServlet">测试核心库</a>

然后启动index页面,完了

其实这里面在对JSP核心库的引用进行声明时,你需要看一下standard.jar下面的META-INF的tld文件。比如说你要使用c标签,你就看一下c.tld中的uri。这个是在jsp页面声明时需要使用的。

如果你有足够的好奇心,我想你现在应该已经发现了JSTL的一些秘密,到底是什么秘密呢?下篇文章再说。


----EOF-----

扫码关注,或者搜索微信公众号:码农悟凡


其他分类: