笔记 - EL表达式 和 JSP标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记 - EL表达式 和 JSP标签相关的知识,希望对你有一定的参考价值。

一、EL表达式

        1 EL作用

                   jsp的核心语法: jsp表达式 <%=%>和 jsp脚本<%  %>。

                   以后开发jsp的原则: 尽量在jsp页面中少写甚至不写java代码。

 

                  使用EL表达式替换掉jsp表达式

 

                   EL表达式作用: 向浏览器输出域对象中的变量值或表达式计算的结果!!!

 

                   语法: ${变量或表达式}

        

        2 EL语法

                                     1)输出基本数据类型变量

                                                        1.1 从四个域获取

                                                                 ${name}

                                                        1.2 指定域获取

                                                                 ${pageScope.name}

                    域范围: pageScoep / requestScope / sessionScope / applicationScope

 

                                2)输出对象的属性值

                                                        Student

                                     3)输出集合对象

                                                  List  和 Map

                                     4)EL表达式计算

二、jsp标签

             1 jsp标签的作用

                                     jsp标签作用:替换jsp脚本。

                                    

                                     1)流程判断(if   for循环)

                                     2)跳转页面(转发,重定向)

                                     3)。。。。。

 

             2 Jsp标签分类

                                     1)内置标签(动作标签): 不需要在jsp页面导入标签

                                     2)jstl标签: 需要在jsp页面中导入标签

                                     3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签

             3 动作标签

                          转发标签:     <jsp:forward />

            参数标签:  <jsp:pararm/>

                            包含标签:  <jsp:include/>

                                     原理: 包含与被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。

                                                        (先翻译再合并),动态包含

 

                                               静态包含  vs  动态包含的区别?

 

                                     1) 语法不同

                                     静态包含语法: <%@inclue file="被包含的页面"%>

                                     动态包含语法: <jsp:include page="被包含的页面">

 

                                     2)参数传递不同

                                     静态包含不能向被包含页面传递参数

                                     动态包含可以向被包含页面传递参数

        

                                     3)原理不同

                                     静态包含: 先合并再翻译

                                     动态包含: 先翻译再合并

                                              

            4 JSTL标签

                            JSTL (全名:java  standard  tag  libarary   -  java标准标签库  )

 

                            核心标签库 (c标签库) 天天用

                            国际化标签(fmt标签库)

                            EL函数库(fn函数库)

                            xml标签库(x标签库)

                            sql标签库(sql标签库)                        

           5 使用JSTL标签步骤

                            1) 导入jstl支持的jar包(标签背后隐藏的java代码)

                                               注意:使用javaee5.0的项目自动导入jstl支持jar包

                            2)使用taglib指令导入标签库

                                                                 <%@taglib uri="tld文件的uri名称" prefix="简写" %>

                     3)在jsp中使用标签             

                  

            6 核心标签库的重点标签             

                     保存数据:     <c:set></c:set>  

                     获取数据:     <c:out value=""></c:out>

                    单条件判断:   <c:if test=""></c:if>

                    多条件判断:    <c:choose>

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

                                             <c:otherwise></c:otherwise>

              </c:choose>

                    循环数据:      <c:forEach></c:forEach>

                                      <c:forTokens items="" delims=""></c:forTokens>     (遍历特殊字符串)

                    重定向:       <c:redirect></c:redirect>

 

      7 自定义标签

              1 引入

                                     需求: 向浏览器输出当前客户的IP地址 (只能使用jsp标签)                                                  

              2 第一个自定义标签开发步骤

                            1)编写一个普通的java类,继承SimpleTagSupport类,叫标签处理器类

                                    

/**

 * 标签处理器类

 * @author APPle

 * 1)继承SimpleTagSupport

 *

 */

public class ShowIpTag extends SimpleTagSupport{

    private JspContext context;

   

    /**

     * 传入pageContext

     */

    @Override

    public void setJspContext(JspContext pc) {

       this.context = pc;

    }

 

    /**

     * 2)覆盖doTag方法

     */

    @Override

    public void doTag() throws JspException, IOException {

       //向浏览器输出客户的ip地址

       PageContext pageContext = (PageContext)context;

      

       HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();

      

       String ip = request.getRemoteHost();

      

       JspWriter out = pageContext.getOut();

      

       out.write("使用自定义标签输出客户的IP地址:"+ip);

      

    }

}

 

                   2)在web项目的WEB-INF目录下建立itcast.tld文件,这个tld叫标签库的声明文件。(参考核心标签库的tld文件)

 

<?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">

  <!-- 标签库的版本 -->

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

  <!-- 标签库前缀 -->

  <short-name>itcast</short-name>

  <!-- tld文件的唯一标记 -->

  <uri>http://gz.itcast.cn</uri>

 

  <!-- 一个标签的声明 -->

  <tag>

    <!-- 标签名称 -->

    <name>showIp</name>

    <!-- 标签处理器类的全名 -->

    <tag-class>gz.itcast.a_tag.ShowIpTag</tag-class>

    <!-- 输出标签体内容格式 -->

    <body-content>scriptless</body-content>

  </tag>

 

</taglib>

 

 

                   3) 在jsp页面的头部导入自定义标签库

                                         <%@taglib uri="http://gz.itcast.cn" prefix="itcast"%>

 

                   4) 在jsp中使用自定义标签

                                               <itcast:showIp></itcast:showIp>

 

              3 自定义标签的执行过程     

                            问题: http://localhost:8080/day14/01.hellotag.jsp  如何访问到自定义标签?

 

前提: tomcat服务器启动时,加载到每个web应用,加载每个web应用的WEB-INF目录下的所有文件!!!例如。web.xml, tld文件!!!

                            1)访问01.hellotag.jsp资源

                            2)tomcat服务器把jsp文件翻译成java源文件->编译class->构造类对象->调用_jspService()方法

                            3)检查jsp文件的taglib指令,是否存在一个名为http://gz.itcast.cn的tld文件。如果没有,则报错

                            4)上一步已经读到itcast.tld文件

                            5)读到<itcast:showIp> 到itcast.tld文件中查询是否存在<name>为showIp的<tag>标签

                            6)找到对应的<tag>标签,则读到<tag-class>内容

                            7)得到 gz.itcast.a_tag.ShowIpTag

          

           构造ShowIpTag对象,然后调用ShowIpTag里面的方法

 

              4 自定义标签处理器类的生命周期

                            SimpleTag接口:

                                     void          setJspContext(JspContext pc)  --设置pageContext对象,传入pageContext(一定调用)

                                                                                                                                   通过getJspCotext()方法得到pageContext对象

                                     void          setParent(JspTag parent)  --设置父标签对象,传入父标签对象,如果没有父标签,则不                                                                                                                          调用此方法。通过getParent()方法得到父标签对象。

                                     void     setXXX(值)             --设置属性值。

                                     void          setJspBody(JspFragment jspBody) --设置标签体内容。标签体内容封装到JspFragment对象                                                                                                                         中,然后传入JspFragment对象。通过getJspBody()方法                                                                                                                                  得到标签体内容。如果没有标签体内容,则不会调                                                                                                                                   用此方法

                                     void          doTag()                     --执行标签时调用的方法。(一定调用)

 

              5 自定义标签的作用

                            1)控制标签体内容是否输出

                            2)控制标签余下内容是否输出

                            3)控制重复输出标签体内容

                            4)改变标签体内容

                            5)带属性的标签

                                     步骤:

                                               5.1 在标签处理器中添加一个成语变量和setter方法

                                                       

    //1.声明属性的成员变量

    private Integer num;

   

    //2.关键点: 必须提供公开的setter方法,用于给属性赋值

    public void setNum(Integer num) {

       this.num = num;

    }

 

 

              6 输出标签体内容格式

                                     JSP:   在传统标签中使用的。可以写和执行jsp的java代码。

                                     scriptless:  标签体不可以写jsp的java代码

                                     empty:    必须是空标签。

                                     tagdependent : 标签体内容可以写jsp的java代码,但不会执行。

              7 案例

                                     核心标签库: c:if   c:choose+c:when+c:otherwise   c:forEach

                                     高仿核心标签库

 

以上是关于笔记 - EL表达式 和 JSP标签的主要内容,如果未能解决你的问题,请参考以下文章

[Java] JSP笔记 - ELJSTL 常用标签

JSP系列:JSP进阶-EL表达式和JSP标签

EL表达式和jsp标签

JSP常用标签——JSTL标签和EL表达式

EL表达式jsp标签JSTL标签

EL表达式和JSTL标签