>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23644 个阅读者 刷新本主题
 * 贴子主题:  EL表达式语言介绍 回复文章 点赞(0)  收藏  
作者:sunshine    发表时间:2018-06-16 00:29:41     消息  查看  搜索  好友  邮件  复制  引用

简介
  定义:表达式语言(Expression Language)是JSP2的一个重要特性,不同于编程语言,它仅仅是一种数据访问语言。
  作用:可替代JSP脚本,简化JSP开发;统一JSP文件的格式。
  语法格式:${expression}

使用
EL支持大多数算术运算符和逻辑运算符
${2 + 3}   //打印结果为5 (表达式语言把所有数值都当成浮点数处理)
${2 < 3}   //打印结果为true (也用于字符之间、字符串之间的比较,会根据其对应的Unicode值来判断大小)

EL表达式的内置对象
//pageContext:代表该页面的pageContext对象,与JSP的pageContext内置对象相同。
//pageScope:用于获取page范围的属性值。
//requestScope:用于获取request范围的属性值。
//sessionScope:用于获取session范围的属性值。
//applicationScope:用于获取application范围的属性值。
//param:用于获取请求的参数值。
//paramValues:用于获取请求的参数值,与param的区别在于,该对象用于获取属性值为数组的属性值。
//header:用于获取请求头的属性值。
//headerValues:用于获取请求头的属性值,与header的区别在于,该对象用于获取属性值为数组的属性值。
//initParam:用于获取请求Web应用的初始化参数。
//cookie:用于获取指定的Cookie值。

下面实例代码展示了param、sessionScope、cookie的简单使用。

<body>
    <form action="index.jsp" method="post">
        字符串 = <input type="text" name="name" /> <input type="submit"
            value="提交" />
    </form>
    <%
        session.setAttribute("user", "jujianfei");
        Cookie c = new Cookie("pwd", "123");
        c.setMaxAge(24 * 3600);
        response.addCookie(c);
    %>

    <!--获取提交的name值 -->
    name的值为: ${param['name']}<br>
    <!-- 获取session中user的值 -->
    session中user的值为:${sessionScope['user']}<br>
    <!-- 获取cookie中pwd的值 -->
    cookie中pwd的值为:${cookie["pwd"].value}<br>
</body>

EL的自定义函数

如果需要在EL中进行更复杂的处理,就可以通过EL函数来完成,其本质是:Java类的静态方法。具体操作分三步:

1、新建一个Java类,在类中写一个静态方法reverse(),代码如下:

package cn.jujianfei.test;

public class Test {
    //对字符串进行反转
    public static String reverse(String text){
        return new StringBuffer(text).reverse().toString();
    }
}

2、编写标签库描述文件。在WEB-INF目录下新建一个扩展名为.tld的文件,代码如下:

<?xml version="1.0" encoding="GBK"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    web-jsptaglibrary_2_0.xsd" version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>el</short-name>
    <!-- 定义该标签库的URI -->
    <uri>/tags</uri>

    <!-- 定义第一个函数 -->
    <function>
        <!-- 定义函数名:reverse -->
        <name>reverse</name>
        <!-- 定义函数的处理类 -->
        <function-class>cn.jujianfei.test.Test</function-class>
        <!-- 定义函数的实现方法-->
        <function-signature>java.lang.String reverse(java.lang.String)</function-signature>
    </function>
    <!-- 如果还有其他函数,按照第一个函数的定义格式,新起一个function标签即可 -->
</taglib>

3、在JSP文件中引用标签库,并调用定义的EL函数,完成功能。

<!-- 引入标签库 -->
<%@ taglib prefix = "el" uri="/tags" %>  

<body>
    <form action="index.jsp" method="post">
        字符串 = <input type="text" name="name" />
              <input type="submit" value="提交" />
    </form>
    调用EL函数:${el:reverse(param["name"])}
</body>

扩展
  在项目中定义文件路径经常会用到这个表达式:${pageContext.request.contextPath},它的作用是取出部署的应用程序名。例如:在一个名称为shop的Web项目中,${pageContext.request.contextPath}/index.jsp就是表示http://localhost:8080/shop/index.jsp。也可以使用脚本的写法:<%=request.getContextPath()%>,效果一致。

总结
  在jsp文件中,也可以设置是否禁用EL。<%@ page isELIgnored="true" %>表示禁用,此属性默认为false。


程序猿的技术大观园:www.javathinker.net
网站系统异常


系统异常信息
Request URL: http://www.javathinker.net/WEB-INF/lybbs/jsp/topic.jsp?postID=447

java.lang.NullPointerException

如果你不知道错误发生的原因,请把上面完整的信息提交给本站管理人员