码迷,mamicode.com
首页 > 编程语言 > 详细

JavaWeb之EL篇

时间:2015-05-14 16:36:07      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

一.EL概述

EL(Expression Language):目的是使JSP写起来更简单。

1.1、EL的作用

在JSP2.0后要把html和css分离、要把html和js分开、要把Java脚本替换成标签。不包含<%...%>等

而标签的好处:即使不是java人员,也可以轻松的去使用

1.2、EL的格式及使用

使用格式:${}

使用前提:如果不希望使用EL,需要在JSP的page指令需要指定isELIgnore="true",默认是false,即不忽略

1.3、EL的运算符

运算符

说明

范例

结果

+

${17+5}

22

-

${17-5}

12

*

${17*5}

85

/div

${17/5}${17 div 5}

3

%mod

取余

${17%5}${17 mod 5}

2

==eq

等于

${5==5}${5 eq 5}

true

!=ne

不等于

${5!=5}${5 ne 5}

false

<lt

小于

${3<5}${3 lt 5}

true

>gt

大于

${3>5}${3 gt 5}

false 

<=le

小于等于

${3<=5}${3 le 5}

true 

>=ge

大于等于

${3>=5}${3 ge 5}

false 

&&and

并且

${true&&false}${true and false}

false 

!not

${!true}${not true}

false

||or

或者

${true||false}${true or false}

true

empty

是否为空

${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回trueempty还可以与not!一起使用。${not empty “”}

true


EL表达式的值如果为null,会显示空串,也就是什么也不显示

操作List和数组:${list[0]}${arr[0]}

操作bean的属性:${person.name}${person[‘name’]},对应person.getName()方法

操作Map的值:${map.key}${map[‘key’]},对应map.get(key)

1.4、EL的内置对象

EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。

Map applicationScope(重点)

应用程序范围内的scoped变量组成的集合

Map cookie

所有cookie组成的集合

Map header

HTTP请求头部,字符串

Map headerValues

HTTP请求头部,字符串集合

Map initParam

全部应用程序参数名组成的集合

pageContext

当前页面的javax.servlet.jsp.PageContext对象

Map pageScope(重点)

页面范围内所有对象的集合

Map param

所有请求参数字符串组成的集合

Map paramValues

所有作为字符串集合的请求参数

Map requestScope(重点)

所有请求范围的对象的集合

Map sessionScope(重点)

所有会话范围的对象的集合


EL域对象相关

l pageScope:${pageScope.name}等同与pageContext.getAttribute(“name”);
l requestScope:${requestScope.name}等同与request.getAttribute(“name”);
l sessionScoep: ${sessionScope.name}等同与session.getAttribute(“name”);
l applicationScope:${applicationScope.name}等同与application.getAttribute(“name”);

使用EL来获取域中保持的javaBean对象,那么javaBean一定要设置get方法

全域查找:${person}表示依次在pageScoperequesScopetsessionScopeappliationScope四个域中查找名字为person的属性

注意:

EL表达式在获取Map或javaBean的值时,有两种方式request.xxx或request[‘xxx‘],作用相同,但是若果Map的键或javaBean的属性名包含‘_‘,EL就必须使用下标的方式request[‘xx_x‘]

pageContext对象

pageContextpageContextPageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest(),可以${pageContext.request}。也就是读取JavaBean属性!

EL表达式

说明

${pageContext.request.queryString}

pageContext.getRequest().getQueryString();

${pageContext.request.requestURL}

pageContext.getRequest().getRequestURL();

${pageContext.request.contextPath}

pageContext.getRequest().getContextPath();

${pageContext.request.method}

pageContext.getRequest().getMethod();

${pageContext.request.protocol}

pageContext.getRequest().getProtocol();

${pageContext.request.remoteUser}

pageContext.getRequest().getRemoteUser();

${pageContext.request.remoteAddr}

pageContext.getRequest().getRemoteAddr();

${pageContext.session.new}

pageContext.getSession().isNew();

${pageContext.session.id}

pageContext.getSession().getId();

${pageContext.servletContext.serverInfo}

pageContext.getServletContext().getServerInfo();

二、EL函数库

1.什么是EL函数库

EL函数库是由第三方对EL的扩展,

EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!

EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)},但用的不是很多

因为是第三方的东西,所以需要导入。导入需要使用taglib指令!

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

常见方法:

l String toUpperCase(String input):
l String toLowerCase(String input):
l int indexOf(String input, String substring):
l boolean contains(String input, String substring):
l boolean containsIgnoreCase(String input, String substring):
l boolean startsWith(String input, String substring):
l boolean endsWith(String input, String substring):
l String substring(String input, int beginIndex, int endIndex):
l String substringAfter(String input, String substring):hello-world, “-“
l substringBefore(String input, String substring):hello-world, “-“
l String escapeXml(String input):把字符串的“>”、“<”。。。转义了!
l String trim(String input):
l String replace(String input, String substringBefore, String substringAfter):
l String[] split(String input, String delimiters):
l int length(Object obj):可以获取字符串、数组、各种集合的长度!
l String join(String array[], String separator):
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
…
String[] strs = {"a", "b","c"};
List list = new ArrayList();
list.add("a");
pageContext.setAttribute("arr", strs);
pageContext.setAttribute("list", list);
%>
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- hello -->
${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
${fn:contains("abc", "a")}<br/><!-- true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->

${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim("     a b c     ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->

同样,也可以自定义EL函数

1.写一个类,写一个有返回值的静态方法

2.编写tld文件,可以参考jstl给定的fn.tld文件来写,把tld文件放到/WEB-INF目录下

package cn.cil.funcations;

public class MyFuncations {
	public static String get() {
		return "自定义EL函数库测试";
	}
}
TLD

<?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">
    
  <tlib-version>1.0</tlib-version>
  <short-name>cc</short-name>
  <uri>http://www.xixihahaxiaobenzhu.cn/jsp/functions</uri>

  <function>
    <name>get</name>
    <function-class>cn.cil.funcations.MyFunction</function-class>
    <function-signature>String get()</function-signature>
  </function>
</taglib>

JSP

<body> 
  	<h1>${cc:get() }</h1>
  </body>

自定义EL函数的注意事项:

编写完tld后,需要将它放置到<web应用>\WEB-INF目录中或WEB-INF目录下的除了classes和lib目录之外的任意子目录中。
  TLD文件中的<uri> 元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。
  <function>元素用于描述一个EL自定义函数,其中:
  <name>子元素用于指定EL自定义函数的名称。
  <function-class>子元素用于指定完整的Java类名,
  <function-signature>子元素用于指定Java类中的静态方法的签名,方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号

JavaWeb之EL篇

标签:

原文地址:http://blog.csdn.net/wjw0130/article/details/45720273

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!