El表达式
来源:互联网 发布:梦幻西游手游for mac 编辑:程序博客网 时间:2024/06/08 04:39
1.当web.xml的版本是2.3(约束文档)的时候,默认是不支持EL表达式的。这时候如果还在jsp中使用el表达式,那么el表达式会原封不动的显示给浏览器。例:${name}
如果想让2.3版本支持EL表达式,那么必须在jsp的Page指令中添加一条如下语句,告诉jsp是要支持EL表达式。2.3版本默认为false
<%@page isELIgnored="true" %>
如果想让当前WEB应用程序中的所有JSP页面都忽略EL表达式,则可以在Web应用程序的web.xml配置文件中添加如下代码:
<jsp-config><jsp-property-group><url-pattern>*.jsp</url-pattern><el-ignored>true</el-ignored></jsp-property-group></jsp-config>
2.用EL表达式获取项目名称有两种方式:
*${pageContext.request.contextPath}
*${pageContext.servletContext.contextPath}
3.EL表达式的11个隐含对象:(表示在什么域里取值)这些域里存值的方式都是用Msp集合存的。
*${pageContext}
*${pageScope.userName}
*${requestScope.userName}
*${sessionScope.userName}
*${applicationScope.userName}
*${param.userName}//表示获取Url上的参数
*${paramValues.userName[0]}//表示获取Url上key为userName的value,这个value有多个,以数组形式返回。即127.0.0.1/servletDay1/servlet/servlet1?userName=xxc&userName=pkq
*${header.host }//表示获某个取消息头的值
*${headerValues.host[0]}//表示获取名字一样的消息头的值,以数组形式返回。
*${cookie}//返回所有的cookie 例如{JSESSIONID=javax.servlet.http.Cookie@4262d5d7} 这时如果${cookie.JSESSIONID}则返回javax.servlet.http.Cookie@4262d5d7
这时如果要返回的是JSESSIONID的值,就需要这么写${cookie.JSESSIONID.value}
*${initParam}//返回初始化参数的name和value {pass=123} 若要返回123则需要这么写${initParam.pass}
在web.xml中如下代码叫初始化参数
<context-param> <param-name>pass</param-name> <param-value>123</param-value> </context-param>
在使用隐含对象需要注意的是:如下是${pageScope}打印出来的内容,可以看出pageScope是当前页面所有对象的集合。
这时如果要通过pageScope来获取response的值
不能写成${pageScope.javax.servlet.jsp.jspResponse} 这样写的话 会去找pageScope 的javaBean里的javax javaBean里的 servlet....
正确写法是:${pageScope['javax.servlet.jsp.jspResponse'] }
注意:
EL中的标识符中不能包含单引号、双引号、减号和正斜杠(/)等特殊字符。${uesr_name}这样的是不允许出现的
EL表达式的执行运算:
*empty运算符:检查变量是否为null或空 ${not empty pageScope } 或者 ${ empty pageScope }
*三元运算符:${user==null?user.name:""}
在用EL表达式还有一个必须要注意的是:如下代码,是给userName设值,但是当设置的值为模拟消息头的标签的时候,就会出现不良后果。当前显示页面就会被跳转了。
<body> <% request.setAttribute("userName", "<meta http-equiv='Refresh' content='1;URL=http://www.baidu.com/'>"); %> ${userName}</body>
EL自定义函数就是在EL表达式中调用的某个Java类的静态方法,这个java的静态方法需要在Web应用程序中专门进行配置,才可以被EL表达式调用。EL自定义函数可以扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。
一般来说,EL自定义函数开发与应用包括以下三个步骤:
*编写EL自定义函数映射的Java类中的静态方法(这个Java类必有带有public修饰符,方法必须是这个类中的带有public修饰符的静态方法)
*编写标签库描述符(tld)文件,在tld文件中描述自定义函数
*在JSP页面中导入和使用自定义函数
例子如下:
1.编写EL自定义函数映射的Java类中的静态方法。路径为apache-tomcat-6.0.29\webapps\examples\WEB-INF\classes\util
本例子中EL自定义函数映射的Java类是Tomcat自带的JSP例子程序中提供的一个HTMLFilter类。
/** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License. You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package util;/** * HTML filter utility. * * @author Craig R. McClanahan * @author Tim Tye * @version $Id: HTMLFilter.java 939521 2010-04-30 00:16:33Z kkolinko $ */public final class HTMLFilter { /** * Filter the specified message string for characters that are sensitive * in HTML. This avoids potential attacks caused by including JavaScript * codes in the request URL that is often reported in error messages. * * @param message The message string to be filtered */ public static String filter(String message) { if (message == null) return (null); char content[] = new char[message.length()]; message.getChars(0, message.length(), content, 0); StringBuffer result = new StringBuffer(content.length + 50); for (int i = 0; i < content.length; i++) { switch (content[i]) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '&': result.append("&"); break; case '"': result.append("""); break; default: result.append(content[i]); } } return (result.toString()); }}
2.编写标签库描述符(tld)文件,在tld文件中描述自定义函数
该文件叫(el.tld)路径为apache-tomcat-6.0.29\webapps\examples\WEB-INF\jsp2目录下找到jsp2-example-taglib.tld文件
为了能够让一个java类的静态方法可以被EL表达式调用,需要在一个标签库描述符(tld)文件中对EL自定义函数进行描述,以将Java类中的静态方法映射成一个EL自定义函数。
下面对TLD文件中的一些主要元素进行解释说明:
(1)<taglib>元素是TLD文件的根元素,不应对其进行任何修改。
(2)<uri>元素用于指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件,必须将<uri>元素中的内容修改成我们自己的URI.
(3)<function>元素用于描述一个EL自定义函数,其中<name>子元素用于指定EL自定义函数的名称,<function-class>子元素用于指定完整的java类名(包名.类名),<function-signature>子元素用于指定Java类中的静态方法的签名(返回值+参数类型),方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号分隔。一个标签库描述文件中可以有多个<function>元素,每个<function>元素分别用于描述一个EL自定义函数,同一个TLD文件的每个<function>元素中的<name>子元素的设值不能相同,因为都代表一个方法。
<?xml version="1.0" encoding="UTF-8" ?><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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>SimpleTagLibrary</short-name> <uri>http://www.wow.com/xxc</uri> <function><description>Converts the string to all caps</description> <name>trans</name><function-class>util.HTMLFilter</function-class><function-signature>java.lang.String filter(java.lang.String)</function-signature> </function></taglib>
3.在JSP页面中导入和使用自定义函数
在JSP中需要使用taglib指令来引入标签库描述文件,其语法格式如下:
这边的uri属性和上面tld文件中的<uri>元素中的值一样。
<%@ taglib uri="http://www.wow.com/xxc" prefix="xxc"%>
使用:${引用代号:方法名(变量)} 方法名对应TLD文件中<function>元素中<name>子元素的值
${xxc:trans(userName) }
<meta http-equiv='Refresh' content='1;URL=http://www.baidu.com/'>
当JSP引擎遇到 ${xxc:trans(userName) }语句时候,它按如下流程进行处理:
(1)在JSP页面中查找prefix属性设置为“xxc”的taglic指令,获得其uri属性值为http://www.wow.com/xxc
(2)在<TOMCAT_HOME>\webapps\servletDay4\WEB-INF目录极其子目录下查找<uri>元素为http://www.wow.com/xxc的TLD文件,找到el.tld文件。
(3)在el.tld文件中查找<name>子元素的值为trans的<function>元素,该<function>元素的<function-class>和<function-signature>子元素的值分别为util.HTMLFilter和java.lang.String filter(java.lang.String)。
(4)在<TOMCAT_HOME>\webapps\servletDay4\WEB-INF\classes目录下查找util.HTMLFilter类,然后在这个类中查找签名形式为java.lang.String filter(java.lang.String)的public型的静态方法。
(5)将EL表达式中传递给EL自定义函数的每个参数的值转换为TLD文件中对应的方法签名中的类型,然后调用EL自定义函数对应的Java类中的静态方法。
(6)EL表达式获得Java类的静态方法返回的结果,然后进行输出或其他运算处理。如果Java类的静态方法的返回值类型为void,EL自定义函数就将其转换为null后进行处理。如果Java类的静态方法在执行过程中抛出了异常,EL引擎就将这个异常包装成ELException异常抛出。
- 【EL】EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- EL表达式
- el表达式
- EL表达式
- EL表达式
- EL表达式
- el表达式
- el 表达式
- EL表达式
- EL表达式
- EL表达式
- git如何使工程回到原来的版本
- 使用 Capistrano —— Rails应用快速部署工具
- opencv 学习第一天 学习opencv(中文版)创建一个类似滚动条
- 学生信息管理系统小结
- gcov lcov (一)
- El表达式
- Linux基本功一:文件相关命令初步
- 利用Qt对话框选择文件保存路径
- 深入了解MFC中的文挡/视结构
- JTAG、JLINK、ULINK、ST-LINK的区别
- Java乔晓松-android使用GridView布局的电子相册&服务器获取图片
- Git_Windows 系统下Git安装图解
- 一点近期装机组网的经验
- 从零开始学C++之构造函数与析构函数(二):初始化列表(const和引用成员)、拷贝构造函数