Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

谷哥的小弟学后台(17)——JSP(3)

$
0
0

探索Android软键盘的疑难杂症
深入探讨Android异步精髓Handler
详解Android主流框架不可或缺的基石
站在源码的肩膀上全解Scroller工作机制


Android多分辨率适配框架(1)— 核心基础
Android多分辨率适配框架(2)— 原理剖析
Android多分辨率适配框架(3)— 使用指南


自定义View系列教程00–推翻自己和过往,重学自定义View
自定义View系列教程01–常用工具介绍
自定义View系列教程02–onMeasure源码详尽分析
自定义View系列教程03–onLayout源码详尽分析
自定义View系列教程04–Draw源码分析及其实践
自定义View系列教程05–示例分析
自定义View系列教程06–详解View的Touch事件处理
自定义View系列教程07–详解ViewGroup分发Touch事件
自定义View系列教程08–滑动冲突的产生及其处理


版权声明


今天我们继续学习JSP中的EL和JSTL。

EL表达式

EL(expression language)表达式是JSP中获取数据的一种规范,它主要用于简化jsp中java代码开发。

利用EL表达式获取数据

我们利用EL表达式获取数据,但是请务必注意它只可以获取存在4个作用域中的数据。

语法格式:${ }

比如,我们在session中存了数据:

session.setAttribute(“name”, “波少野结衣”);

那么我们可以利用EL表达式获取存的数据

${name}

嗯哼,这里使用EL表达式就非常简单了,究其根本是因为${}背后执行的是pageContext.findAttribute( )。

与此类似,如果我们有一个User类,其中有name属性,user是该类的对象。现在将该对象保存到域中后,如果要获取该对象的name可以这么写:

${user.name}

该方式就等效于user.getName()。也就是说在EL表达式中.运算符相当于调了getter方法。同理如果User中有一个Address属性,Address中又有一个city,我们也可以通过该方式获取city的值

${user.address.city}

还有一个功能与.运算符非常类似的运算符[],但它比.运算符要强大许多,在此不再赘述。

EL表达式的简单运算

我们还可以利用EL表达式做一些简单的运算。

利用empty判断null

它会将空字符串和没有元素的集合都判断为null即返回true,示例如下:

${empty object}

EL的三元运算符

请看如下示例:

${empty user ? “未登录”:”已经登录”}

EL表达式的隐式对象

在之前的文章中介绍了JSP的内置对象,在此列举几个EL表达式的常用对象

pageContext
对应于JSP页面中的pageContext对象

pageScope
代表page域中用于保存属性的Map对象

requestScope
代表request域中用于保存属性的Map对象

sessionScope
代表session域中用于保存属性的Map对象

applicationScope
代表application域中用于保存属性的Map对象

param
表示一个保存所有请求参数的Map对象

paramValues
表示一个保存了所有请求参数的Map对象,它对于某个请求参数返回一个string类型数组

header
表示一个保存了所有http请求头字段的Map对象

headerValues
表示一个保存了所有http请求头字段的Map对象,返回string类型数组

cookie
表示一个保存了所有cookie的Map对象

initParam
表示一个保存了所有web应用初始化参数的map对象


JSTL

JSTL简介

从JSP 1.1规范开始JSP就支持使用自定义标签,使用自定义标签极大地降低了JSP页面的复杂度,同时增强了代码的重用性,所以自定义标签在WEB应用中被广泛使用。故,许多WEB应用厂商都开发出了自己的一套标签库,这导致出现了许多功能相同的标签,令开发人员手忙脚乱,无所适从。为了解决该问题,Apache开发了一套用于解决这些常用问题的自定义标签库,这套标签库被SUN公司定义为标准标签库(The JavaServer Pages Standard Tag Library),简称JSTL。在开发中可使用JSTL实现JSP页面中逻辑处理,如判断、循环等等操作。

添加JSTL

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

  • 利用taglib指令设置JSTL的路径和前缀名
  • 导入包jstl.jar和standard.jar

JSTL常用标签

<c:set>标签
用于设置各种域中的属性

<c:out>标签
用于输出一段文本内容到客户端浏览器

<c:remove>标签
用于删除各种域中的属性

<c:if>标签
用于条件判断

<c:choose>标签
该标签非常类似于Java中的switch语句,用于多个条件选择。它必须与<c:when>和<c:otherwise>一起使用

<c:forEach>标签
用于对集合对象进行循环迭代操作

请看如下示例:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL</title>
<style type="text/css">
</style>
</head>
<body>
    <!-- 测试set、remove、out -->
    <c:set var="number" value="9527" scope="session"/>
    number=<c:out value="${number}"/>
    <c:remove var="number" scope="session"/>
    number=<c:out value="${number}" default="没有取到number的值"/>
    </br>
     <!-- 测试if -->
    <c:if test="${9527>1234}">
       zxx number is 9527
    </c:if>
    </br>
     <!-- 测试choose -->
    <c:set var="size" value="${3}"></c:set>
    <c:choose>
        <c:when test="${size==1 }">The size is 1</c:when>
        <c:when test="${size==2 }">The size is 2</c:when>
        <c:when test="${size==3 }">The size is 3</c:when>
        <c:otherwise>
            The size is other
        </c:otherwise>
    </c:choose>
    </br>
     <!-- 测试forEach -->
    <c:forEach var="i" begin="1" end="20" step="3"> 
        ${i}<br/>
    </c:forEach>
    </br>
    <%
        List list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        request.setAttribute("list", list);
     %>
    <c:forEach items="${list}" var="listitem">
        ${listitem}<br/>
    </c:forEach>
    <br/>

    <!-- 测试forEach -->
    <%
        List arrayList = new ArrayList();
        arrayList.add("aaa");
        arrayList.add("bbb");
        arrayList.add("ccc");
        arrayList.add("ddd");
        arrayList.add("eee");
        request.setAttribute("arrayList", arrayList);
    %>

    <table border="1">
        <tr>
            <th>数据</th>
            <th>索引</th>
            <th>计数</th>
            <th>是否是第一个</th>
            <th>是否是最后一个</th>
        </tr>

        <c:forEach items="${arrayList}" var="item" varStatus="vs">
            <tr>
                <td>${item}</td>
                <td>${vs.index}</td>
                <td>${vs.count}</td>
                <td>${vs.first}</td>
                <td>${vs.last}</td>
            </tr>
        </c:forEach>    
    </table>

</body>
</html>

运行后效果如下图所示:

这里写图片描述

作者:lfdfhl 发表于2017/2/15 20:47:43 原文链接
阅读:18 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles