java学习笔记—JSTL(37)

在前面的开发中我们会发现经常无法避免在JSP中或多或少的出现各种JSP脚本片段,那么导致页面美工人员无法对其很好的维护。因此今天的技术可以帮助开发人员快速减少JSP中脚本的出现。

JSTL简介

JSTL即Jsp Standard Tag Libraries即Jsp的标准标签库。该技术提供了很多的标签用于封装JSP中常用的一些基本的业务逻辑。

主要的分类如下:

核心库:主要封装的是一些基本的核心的业务逻辑。

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

格式化和国际化库:主要封装的是一些进行数据格式化和国际化的业务。如:日期格式化。

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

XML库:主要封装的是一些解析XML数据的业务逻辑。

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

SQL库:主要封装的是操作数据库的业务逻辑。

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

函数库:主演封装的是常见函数。如:String

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

1  JSTL引入

  1. 在web项目中导入jstl的jar包。如果创建的5.0的javaee项目那么自动引入。
  2. 如果需要在JSP页面中使用该抱歉库,那么必须使用taglib指令引入到当前的页面

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

2 体验

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

<c:out value="<%= 23 == 23 %>"></c:out>

以上的标签可以将如下的输出语句进行避免

<%

out.println(“”)

%>

核心库标签

1. c:out

  <c:out                 ? 输出标签
value=""             ? 输出的内容,可以是输出表达式<%= %>
default=""             ? 输出的默认值
escapeXml="">        ? 是否以xml方式输出数据
</c:out>
举例:

<c:out
    value=‘<%=pageContext.getAttribute("name",PageContext.REQUEST_SCOPE)%>‘ escapeXml="false"></c:out>

2. c:set

<c:set                      ? 设置一个域或者集合中的属性
var=""                 ? 指定域中的属性名
value=""                 ? 指定域中的属性值
scope=""                 ? 指定域对象
target=""                 ? 指定集合名
property="">            ? 集合的属性名
</c:set>
举例:
<c:set  var="psw" value="root" scope="page"></c:set><br/>
        <c:out        value=‘<%=pageContext.getAttribute("psw",PageContext.PAGE_SCOPE)%>‘></c:out>

举例:

<!-- map.put("qq","123456789") -->

<c:set target="<%= map %>" property="qq" value="123456789"></c:set>

<%= map.get("qq") %>

3. c:remove

<c:remove                 ? 删除域中的属性
var=""                 ? 指定属性名
scope=""/>            ? 指定域名

4. c:catch

<c:catch var="">       à 处理异常,指定异常对象以什么属性存储在page域

</c:catch>

举例:
<c:catch var="error">
            <%= 12/0 %>
        </c:catch>
        异常消息是:
        <c:out value=‘<%= ((Exception)pageContext.getAttribute("error",PageContext.PAGE_SCOPE)).getMessage() %>‘></c:out>

5. c:if 判断语句

<c:if test=””>                 à 指定的条件语句

à 如果成立执行标签体内容

</c:if>

举例:
<c:if test=‘<%= pageContext.getAttribute("list",PageContext.SESSION_SCOPE) == null %>‘>
           <font color="red">数据为空!</font><br/>
        </c:if>

6. if…selse

 <c:choose>                    ? 外部选择
          <c:when test="">    ? 指定的是条件语句

          </c:when>
          <c:otherwise>        ? 条件不成立

          </c:otherwise>
     </c:choose>
举例:
<c:choose>
          <c:when test=‘<%= "jack".equals("jack") && "root".equals("root2") %>‘>
             <c:out value="欢迎"></c:out>
          </c:when>
          <c:otherwise>
             <c:out value="注册"></c:out>
          </c:otherwise>
        </c:choose>

7. c:forEach 循环(重点)

 <c:forEach                     ? 循环
begin=""                 ? 循环的开始值
end=""                     ? 循环结束的值
step=""                     ? 循环的步长
var=""                     ? 将循环出来的数据已指定的属性名放置在page域
items=""                 ? 循环的集合数据
varStatus="">            ? 循环的状态对象

</c:forEach>

举例:
<c:forEach begin="0" end="10" var="i">
           <c:out value=‘<%= pageContext.getAttribute("i",PageContext.PAGE_SCOPE) %>‘></c:out><br/>
        </c:forEach>

举例:

<%

            List<String> list = new ArrayList<String>();

            list.add("aaaa");

            list.add("bbbb");

            list.add("cccc");

            session.setAttribute("list",list);

         %>

         <!-- pageContext.setAttribute("str","aaaa",PageContext.PAGE_SCOPE)  -->

         <c:forEach items=‘<%=pageContext.getAttribute("list",PageContext.SESSION_SCOPE) %>‘

                    var="str"> 

           <c:out value=‘<%= pageContext.getAttribute("str",PageContext.PAGE_SCOPE)%>‘></c:out><br/>

         </c:forEach>

举例:

<c:forEach items=‘<%=pageContext.getAttribute("list",PageContext.SESSION_SCOPE) %>‘
                       var="str"
                       varStatus="status">
                 <c:choose>
                    <c:when test="${status.count % 2 == 0}">
                       <tr bgcolor="red">
                    </c:when>
                    <c:otherwise>
                       <tr bgcolor="yellow">
                    </c:otherwise>
                 </c:choose>
                 <td>
                   <c:out value=‘<%= pageContext.getAttribute("str",PageContext.PAGE_SCOPE)%>‘></c:out>
                 </td>
              </tr>
            </c:forEach>

举例:

<table align="center" border="1">
            <!-- pageContext.setAttribute("str","aaaa",PageContext.PAGE_SCOPE)  -->
            <c:forEach items=‘<%=pageContext.getAttribute("list",PageContext.SESSION_SCOPE) %>‘
                       var="str"
                       varStatus="status">
                <tr bgcolor=‘${ status.count % 2 == 0 ?  "gray" : "pink" }‘>
                 <td>
                   <c:out value=‘<%= pageContext.getAttribute("str",PageContext.PAGE_SCOPE)%>‘></c:out>
                 </td>
              </tr>
            </c:forEach>
        </table>

8. c:url

<c:url
var=""                 ? 指定属性的名字
value=""             ? 指定属性的值
scope=""             ? 指定域
context="">        ? 指定网站
</c:url>

举例:

<c:url var="index" value="http://www.itcast.cn" scope="page">

<c:param name="name" value="焦宁波"></c:param>

</c:url>

9. c:redirect 重定向

举例:
<c:redirect url="/list" context="/day09_example"></c:redirect>

10. c:forTokens

 <c:forTokens items="james,jack,lucy,jnb" delims="," step="1" var="name">
           <c:out value=‘<%= pageContext.getAttribute("name",PageContext.PAGE_SCOPE) %>‘></c:out><br/>
        </c:forTokens>

11. c:import标签

引入页面
<c:import url="test.jsp"></c:import>
时间: 2024-10-17 16:27:36

java学习笔记—JSTL(37)的相关文章

疯狂Java学习笔记(37)----------List集合

在网上找了很长时间关于List集合的资料,发现都是代码,理论性的东西太少了,对于想要深入的学习我来说,很困难呀,光看代码,不能解决问题呀!所以,自己精心的搜刮来了一点资料在这整理了一下! List集合! ·List列表 ·list: list代表有序.可重复集合,每个元素都有对应的索引,所以List集合中的元素可以重复.List集合默认暗元素的添加顺序设计元素! ·list当然也用于collection中的所有方法,并且自己也有添加了额外的方法,所有List实现类都可以调用这些方法来操作元素.L

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

JAVA学习笔记一(JAVA输出环境变量)

package mytest; import java.util.*;; public class mymain { public static void main(String[] args) { // TODO Auto-generated method stub System.out.print(new Date()); Properties p=System.getProperties(); p.list(System.out); Runtime rt=Runtime.getRuntim

Java学习笔记之接口

一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(String msg); } 定义接口使用关键字interface 修饰符interface前面的public可以省略,如果省略,则采用默认访问控制,即只有在相同包结构的代码才可以访问此接口 接口不可以有构造方法(区别于类中的构造方法) 接口里面的所有成员,包括常量.方法等都是public访问权限,所以在

Java学习笔记之方法重载,动态方法调度和抽象类

一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程序: 1 class A 2 { 3 int i, j; 4 A(int a, int b) 5 { 6 i = a; 7 j = b; 8 } 9 10 // display i and j 11 void show() 12 { 13 System.out.println("i and j: &

Java学习笔记——动态代理

所谓动态,也就是说这个东西是可变的,或者说不是一生下来就有的.提到动态就不得不说静态,静态代理,个人觉得是指一个代理在程序中是事先写好的,不能变的,就像上一篇"Java学习笔记--RMI"中的远程代理,其中客户端服务对象就是一个远程服务对象的代理,这个代理可以使得客户在操作时感觉像在操作本地对象一样,远程对象对于客户是透明的.我们可以看出这里的远程代理,是在程序中事先写好的,而本节我们要讨论的远程代理,是由JVM根据反射机制,在程序运行时动态生成的.(以上是本人的理解,如果有不正确的地

Java学习笔记3-操作符

Java基本操作符:+.-.*./.%.=.==.!=.+=.-=. 优先级:先乘除后加减,如果是连接符+号会优先往前匹配,比如 a+++++b,会被解释称 a++ ++ +b,所以会报错,需要自行使用括号隔离为 (a++) + (++b). 对象的引用如果赋值给了对象的引用后,2 个对象将指向同一个引用,有一个对象的引用重新赋值后将同时影响到另一个对象,比如 ClassName classA = new ClassName(); ClassName classB = new ClassName