jsp标签和el表达式

jsp标签和el表达式

1.jsp标签什么

sun公司指定的一种用来替换jsp中的jav代码的技术规范,jsp标签语法类似与html(有属性,有开始标签,结束标签,结束标记,有标签体)

优点:可易于维护,高复用,jsp页面简洁

2.表达式是什么

是一套简单的运算规则,用于给jsp标签的属性赋值,也可脱离jsp标签直接使用

3.如何写一个el表达式

方式一

${user.username}

执行过程--容器会pageContext,ServletContext,request,response依次查找绑定的沪剧的绑定值名是user的对象,找到后调用getUsername并且输出

指定查找的范围

可以使用pageContextScope,requestScope,responseScope,sessionScope来指定查找的范围,例如:usename:${sessionScope.user2.username}

方式二

${user['username']}

两个特殊用法:

[ ]里面允许出现绑定名,例如:${user[prop]}

[ ]里面允许出现从0开始的元素的下标的查找,例如:${user2.interets[0]}

3.做一些简单的运算

计算的结果可以给jsp赋值,也可直接输出

算术运算: +,-,*,/,%

逻辑运算: &&,|| ,!

关系运算:>,<,>=,<=,==,!=

empty运算: empty----用于判空(如果是空就返回true,不是空就返回false),特殊情况的true----找不到绑定名和直接null的时间也会是true

4.el表达式读取参数值

${param.username}等价与request.getParameter("username");

${paramValues.interset}等价与request.getParameterValues("interset");

5.jstl(java standard tag lib)标准标签库

1.jstl是什么--apache开发的一套jsp标签,后来捐献给了sun,sun将其命名为jstl(即标准标签库)

jsp标签的执行过程

容器依据别名(比如"c")找到对应的命名空间(比如

"http://java.sun.com/jsp/jstl/core"),然后依据命名空间找到jsp标签的描述文件(比如找到c.tld),接下来,就可以依据jsp标签名(比如"if")找到对应的标签类(比如"IfTag"),

最后调用该标签类的方法。

2.如何使用:导包-------使用taglib指令导入要使用的标签库

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

uri:指定标签的命名空间

prefix:命名空间的别名

<c:if test="${user.gender != 'm'}" var="" scope="">女</c:if>

var:指定绑定名

scope:指定查找域

4.几个核心的标签

1.if标签:<c:if test="">标签体</c:if>:当test的值为true时,容器会执行标签体的内容,test的属性可以使用el表达式赋值

2.choose标签: <c:choose>

      <c:when test=""></c:when>

      <c:otherwise></c:otherwise>

</c:choose>

when可以出现1此或者多次,相当于else if语句,当test属性时true的时间,执行标签体的内容,otherwise可出现0次或者1次,表示列外,最后一个值

3.<c:forEach items="" var="" varStatus=""></c:forEach>:用于编历集合或者数组

items:用于指定属性要遍历的集合或者数组,可以使用el表达式来赋值,也就是绑定名

var:用于指定绑定名:绑定范围是pageContext,该标签每次从集合或者数组元素中取一个元素,然后绑定到pageContext上

varStatus:用于绑定名,绑定的值是一个对象(方法有 count【数量】和index【下标】)

6.自定义标签(分为简单标签技术和复杂标签技术)

1.写一个java类,继承SimpleTagSupport类

package beanjstl;

 

import java.io.IOException;

 

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.JspWriter;

import javax.servlet.jsp.PageContext;

import javax.servlet.jsp.tagext.SimpleTagSupport;

/**

 * 自定义标签

 * 继承SimpleTagSupport

 * 重写doTag方法

 * 标签有那些属性,标签类就有那些属性,属性名要一致,类型要匹配,并且有对用的set方法

 * @author soft01

 *

 */

public class HelloKity extends SimpleTagSupport{

public HelloKity() {

System.out.println("HelloKity的构造器");

}

private String info;

private int qty;

public void setInfo(String info) {

System.out.println("setinfo方法:"+info);

this.info = info;

}

public void setQty(int qty) {

System.out.println("setqty方法:"+qty);

this.qty = qty;

}

@Override

public void doTag() throws JspException, IOException {

System.out.println("doTag方法");

//通过继承SimpleTagSupport类提供的方法来获得pageContext对象

PageContext ptxt = (PageContext)getJspContext();

JspWriter out = ptxt.getOut();

for(int i=1;i<=qty;i++){

out.println(info+"<br/>\r\n");

}

}

}

2.ovrride doTag方法

@Override

public void doTag() throws JspException, IOException {

System.out.println("doTag方法");

//通过继承SimpleTagSupport类提供的方法来获得pageContext对象

PageContext ptxt = (PageContext)getJspContext();

JspWriter out = ptxt.getOut();

for(int i=1;i<=qty;i++){

out.println(info+"<br/>\r\n");

}

}

}

3.在.tld文件里面描述标签【后缀名必须是tld结尾的】

jsp页面的代码【

<%@ taglib uri="test" prefix="d"%>

<d:hello info="Hello Kitty" qty="${1 + 10}"/>

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"

    version="2.1">

  <description>JSTL 1.1 core library</description>

  <display-name>JSTL core</display-name>

  <tlib-version>1.1</tlib-version>

  <short-name>d</short-name>

  <uri>test</uri>  

    

    <tag>

    <description><!-- 描述这个标签是做什么的 -->

        Catches any Throwable that occurs in its body and optionally

        exposes it.

    </description>

    <name>hello</name><!-- d:hello -->

    <tag-class>beanjstl.HelloKity</tag-class><!-- 类的路径 -->

     <!-- body-content 标签体的内容  

     empty:该标签没有标签体

     scriptless:该标签有标签体,但是不能有java代码(<% %>,<%= %>,<%! %)

     JSP:该标签有标签体,标签体里面的内容可以是java代码,但是复杂标签技术才支持该值

     -->

    <body-content>empty</body-content>

    <attribute><!-- 属性描述 -->

        <description><!-- 属性的说明 -->

        </description>

        <name>info</name><!-- 属性名 -->

        <required>true</required><!--true代表必须赋值-->

        <rtexprvalue>true</rtexprvalue><!-- true代表这个属性可以动态赋值,动态赋值就是可以使用el表达式赋值 -->

    </attribute>

    

     <attribute><!-- 属性描述 -->

        <description><!-- 属性的说明 -->

        </description>

        <name>qty</name><!-- 属性名 -->

        <required>true</required><!--true代表必须赋值-->

        <rtexprvalue>true</rtexprvalue><!-- true代表这个属性可以动态赋值,动态赋值就是可以使用el表达式赋值 -->

    </attribute>

  </tag>

</taglib>

4.标签的执行过程

容器依据标签的命名空间找到标签的描述文件,接下来依据标签的名称找到对应的标签类,然后将该类实例化,然后调用该标签类的set方法完成属性的赋值操作,最后调用标签类的doTag方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值