后台(17)——JSP(3)

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

探索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>

运行后效果如下图所示:

这里写图片描述

相关文章
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/addNews.jsp
新闻发布项目——后台JSP界面adminManage/addNews.jsp
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/editNews.jsp
新闻发布项目——后台JSP界面adminManage/editNews.jsp
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/manageTopic.jsp
新闻发布项目——后台JSP界面adminManage/manageTopic.jsp
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/modifyCategory.jsp
新闻发布项目——后台JSP界面adminManage/modifyCategory.jsp
|
7月前
|
Java 数据库 数据安全/隐私保护
基于SSM框架实现管科类考研自我管理系统(分前后台spring+springmvc+mybatis+maven+jsp+jquery)
基于SSM框架实现管科类考研自我管理系统(分前后台spring+springmvc+mybatis+maven+jsp+jquery)
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/newsPage.jsp
新闻发布项目——后台JSP界面adminManage/newsPage.jsp
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/addCategory.jsp
新闻发布项目——后台JSP界面adminManage/addCategory.jsp
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/modifyNews.jsp
新闻发布项目——后台JSP界面adminManage/modifyNews.jsp
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/adminIndex.jsp
新闻发布项目——后台JSP界面adminManage/adminIndex.jsp
|
7月前
|
Java
新闻发布项目——后台JSP界面adminManage/readNews.jsp
新闻发布项目——后台JSP界面adminManage/readNews.jsp