一、基础

1、EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法

2、JSTL:(JSP Standard Tag Library)jstl标准标签库,由apache实现

3、JSTL一般要配合EL表达式一起使用,由于在JSTL在赋值时会大量的使用EL,能够说EL是JSTL的一种辅助。

4、在使用时:JSTL须要引入:jstl.jar和Standart.jar到WEB_INF/lib文件夹下,可是仅仅使用EL表达式不须要引用不论什么jar包,仅仅要JSP/SERVLET容器实现了J2EE1.4/Servlet2.4、Jsp2.0规范就能够。

二、为什么

在之前学习jsp的时候也说过是为了将html代码和java代码分离,可是大部分时候假设不进行限制,在jsp中调用java逻辑类是非常难避免的,所以我们有了JSTL来实现表示层与业务逻辑的分离,我们能够通过JSTL实现:与servlet数据的交互,操作xml,格式化数据显示和样式显示,Request中读取数据,循环,自己定义函数等等

三、EL表达式:

1、基本的语法:${}:例:hello:${hello}<br>

2、内置对象:pageScope,requestScope,sessionScope,applicationScope(按默认搜索顺序排列)

3、指定搜索:${requestScope.hello}

4、简单实例:

事实上EL非常easy

首先我们要写的是servlet:servlet的代码例如以下:

package com.tgb.jstl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 測试EL表达式
* @author YoungJong
*
*/
public class JstlElServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//super.doGet(req, resp);
//普通字符串
req.setAttribute("hello", "Hello World"); //结构
Group group=new Group();
group.setName("陈丽娜好样的"); User user=new User();
user.setUsername("杨政");
user.setAge(29);
user.setGroup(group); req.setAttribute("user", user); //map
Map map=new HashMap();
map.put("k1", "v1");
map.put("k2", "v2");
req.setAttribute("map", map); //数组
String[] strArray=new String[]{"a","b","c"};
req.setAttribute("str_array", strArray); //对象数组
User[] users=new User[10];
for(int i=0;i<users.length;i++){
users[i]=new User();
users[i].setUsername("张三_"+i);
}
req.setAttribute("users", users); //list
List userList=new ArrayList();
for(int i=0;i<10;i++){
User userl=new User();
userl.setUsername("李四_"+i);
userList.add(userl);
}
req.setAttribute("userList",userList); req.getRequestDispatcher("/jstl_el.jsp").forward(req, resp); }
}

以下是在jsp中获取的方法:

<body>
<h1>測试EL表达式</h1>
<hr>
<li>普通字符串</li><br> hello(jsp脚本):<%=request.getAttribute("hello") %><br>
hello(el表达式,语法:$和{}):${hello} <br> <p>
<li>结构</li><br>
姓名:${user.username}<br>
年龄:${user.age }<br>
组名:${user.group.name}<br>
<p>
<li>取得map</li><br>
map.k1:${map.k1 }<br>
map.k2:${map.k2 }<br> <p>
<li>字符串数组</li><br>
strArray[1]:${str_array[1] }<br> <p>
<li>对象数组</li><br>
users[5].username:${users[5].username }<br> <p>
<li>List</li><br>
userList[6]:${userList[6].username }<br> <p>
<li>表达式对运算符的支持</li><br>
1+1=${1+1 }<br>
10/5=${10/5 }<br>
10 % 3=${10 % 3 }<br>
10 mod 3=${10 mod 3 }<br>
</body>

效果截图:

四、JSTL核心库:

尽管EL非常easy,可是他的功能有限,比如:针对返回空值EL没有办法控制,循环输出数组元素,假设结合JSTL就不用再操心这些问题了。

经常使用的JSTL标签有非常多比如:<c:out><c:if><c:choose><c:forEach>等等

这里就不一一介绍,以下介绍一个EL与JSTL的结合带来的便利:

简单实例:首先是Servlet的代码:

package com.tgb.jstl;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class JstlCoreServlet extends HttpServlet { @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//普通字符串
request.setAttribute("hello", "Hello World"); //HTML字符串
request.setAttribute("welcome", "<font color='red'>欢迎你来到这个世界!</font>"); //结构
Group group = new Group();
group.setName("提高班"); List users = new ArrayList();
for (int i=0; i<10; i++) {
User user = new User();
user.setUsername("陈丽娜_" + i);
user.setAge(18 + i);
user.setGroup(group);
users.add(user);
}
request.setAttribute("users", users); //map
Map map = new HashMap();
map.put("k1", "v1");
map.put("k2", "v2");
request.setAttribute("map", map); request.getRequestDispatcher("/jstl_core.jsp").forward(request, response);
} }

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>Insert title here</title>
</head>
<body>
<h1>測试JSTL核心库</h1>
<hr>
<li>採用c:out标签</li><br>
hello(使用标签):<c:out value="${hello}"/><br>
hello(使用EL表达式):${hello }<br>
hello(使用缺省值):<c:out value="${hello123}" default="没有值"/><br>
welcome(使用EL表达式):${welcome}<br>
welcome(使用标签,escapeXml=true):<c:out value="${welcome}" escapeXml="true"/><br>
welcome(使用标签,escapeXml=false):<c:out value="${welcome}" escapeXml="false"/><br> <h3>採用forEach标签</h3>
<table border="1">
<tr>
<td>用户名称</td>
<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>
<td>${user.group.name }</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
<p> <li>演示循环控制标签:forEach,输出map</li><br>
<c:forEach items="${map}" var="entry">
${entry.key },${entry.value }<br>
</c:forEach>
<p>
</body>
</html>

当中要注意的是要引入:

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

页面显示截图:

使用JSTL与EL的结合分离了页面与逻辑,使得分层更加明白,代码更加清晰。

JAVA学习JSTL与EL的更多相关文章

  1. Java学习——JSTL标签与EL表达式之间的微妙关系

    原文总结的太好了,忍不住记录.转发. 原文地址:http://blog.csdn.net/u010168160/article/details/49182867 目录(?)[-] 一EL表达式 EL相 ...

  2. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  3. Java之旅(三)--- JSTL和EL表情

     先给大家看一段JSP的代码.看看有什么感受? <% List<UsEL> usELList = pageModel.getList(); for (ItELator<Us ...

  4. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  5. JavaWeb学习----JSTL标签库

    一.JSTL简介: JSTL全名为JavaServer Pages Standard Tag Library,中文名称为JSP标准标签函数库,目前最新的版本为1.2.JSTL是由JCP(Java Co ...

  6. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总

    一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出.       1,JSTL标签总结: a).JSTL标签有什么用?          JSTL是由JCP(Java Commu ...

  7. java学习路线(好资源大家分享)

    对于入门java将近两年的时间,曾经迷惘过,一直想知道java的具体学习路线,看过了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,发现没有一个符合我个人需求的学习路线,根 ...

  8. JSTL与EL常用标签(转)

    JSTL与EL EL相关概念 JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程 ...

  9. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

随机推荐

  1. 4.2、Libgdx每个模块概述

    (原版的:http://www.libgdx.cn/topic/34/4-2-libgdx%E5%90%84%E4%B8%AA%E6%A8%A1%E5%9D%97%E6%A6%82%E8%A7%88) ...

  2. Just learn how to use the JNI

    JNITestProject Just learn how to use the JNI Refer : 1. ant usage http://lmbj.net/blog/ant-build-and ...

  3. BZOJ 2809 APIO2012 dispatching Treap+启示式合并 / 可并堆

    题目大意:给定一棵树,选定一棵子树中的一些点,薪水和不能超过m,求点的数量*子树根节点的领导能力的最大值 考虑对于每一个节点,我们维护一种数据结构,在当中贪心寻找薪金小的雇佣. 每一个节点暴力重建一定 ...

  4. loj1236(数学)

    传送门:Pairs Forming LCM 题意:题意:问符合 lcm(i,j)=n (1<=i<=j<=n,1<=n<=10^14) 的 (i,j) 有多少对. 分析: ...

  5. zoj3795 Grouping --- 良好的沟通,寻找最长的公路

    给定一个图,为了保持图分裂至少成多个集合的集合内可以使点没有直接或间接的关系. 首先,题意可以得到图中可能含有环.该环的内侧是肯定是要被拆卸. 图点降低建DAG画画,能想象..图从零点渗透深入,在点中 ...

  6. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

  7. Perl中检测标准输入使用的字符集

    #Perl中检测标准输入使用的字符集 sub locale_encode{ my $lang = $ENV{'LANG'}; my $dot_pos = rindex($lang, '.'); my ...

  8. poj2378(树的dfs)

    题目链接:http://poj.org/problem?id=2378 题意:给一个树状图,有n个点.求出,去掉哪个点,使得剩下的每个连通子图中点的数量不超过n/2. 分析:num[u]表示以u为根节 ...

  9. 用VS2005编译生成Lua库文件和解释器

    TMD,本来很简单的东西,网上说的乱七八糟,说的也不明白,大家抄来抄去,估计都不自己实践的..花了半个下午研究了一下,总结一下. 1)下载lua工程文件,地址为http://www.lua.org/f ...

  10. 逆向project第004篇:令计算器程序显示汉字(下)

    一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...