JavaWeb笔记之EL表达式

Posted JAVA开发区

tags:

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

表达式语言(Expression Language,EL)

  • 是一种可以在JSP页面中使用的数据访问语言

EL可以用来干啥

  • 使动态网页的设计、开发和维护更加容易,网页编写人员不必懂得Java编程语言,也可以编写JSP网页。

1. 理解表达式语言

EL并不是一种通用的编程语言,它仅仅是一种数据访问语言。

1.1 EL表达式的语法

在JSP页面中,表达式语言的语法:

$expression
//例如
<ul>
	<li>用户名:$user.username
	<li>密码:$user.password
</ul>
//在JSP动作中使用EL表达式
<jsp:include page="$expression" />

1.2 EL表达式的功能

  1. 提供了一组简单的运算符
  2. 对作用域变量的方便访问
  3. 对JavaBeans对象访问的简单表示
  4. 对集合元素的简单访问
  5. 对请求参数的简单访问
  6. 对请求参数、Cookie和其他请求数据的简单访问

1.3 EL表达式和JSP表达式的区别

在EL中不能定义变量,也不能使用脚本中声明的变量,但它可以访问请求参数、作用域变量、JavaBeans以及EL隐含变量等。

  1. JSP表达式:
<%=expression %>
//此处的expression为合法的Java表达式,它属于脚本语言的代码,在expression中可以使用由脚本声明的变量

//例如
<%! int count = 100; %>
count is <%=count %>
  1. EL表达式:
$expression
//这里的expression是符合EL规范的表达式,并不需要包含在标签内。在EL表达式中不能使用脚本声明的变量

<%! int count = 100; %>
count is  $count//此处会返回空

2. EL运算符

2.1. 算术运算符

+ 例如:$6+6 

- 例如:$4-3 

* 例如:$4*3 

/ 例如:$9/3

注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现$‘a’+‘b’则会出现异常。

2.2. 关系运算符

> 或者 gt, 例如:$8>9  或者 $8 gt 9 

>= 或者 ge, 例如:$45>=9 或者 $45 ge 9 

< 或者 lt, 例如:$4<9 或者 $4 lt 9 

<= 或者 le, 例如:$9<=8 或者 $9 le 8 

== 或者 eq, 例如:$4==4 或者 $4 eq 4 

!= 或者 ne, 例如:$4!=3 或者 $4 ne 3 

2.3. 逻辑运算符

&& 或者 and, 例如:$false && false 或者 $false and false 

|| 或者 or, 例如:$true || false 或者 $true or false 

! 或者 not,例如:$!true(相当于$false) 或者 $not true 

2.4. 三元运算符

? : 例如:$3>2?'是':'不是'

2.5. 特殊运算符

empty 判断EL表达式中的表达式是否为空
例如:$empty sessionScope.user 

2.5 属性与集合元素访问运算符

"." 是我们最常用的,作用相当于执行Bean中的get方法。
 
	例如:
	$sessionScope.user.userName意思是:在会话中得到名称为user的Bean对
	象,通过“.”运算符执行getUserName();方法,返回存放在Bean中的用户名属性
	的值。 
	
[] 作用和“.”运算符的一样,只不过[]运算符可以执行一些不规则的标识符。
 
	例如:
	$requestScope.user["score-math"],这个表达式中有不规则的标识符,
	是不能使用“.”来访问的。

3. 使用EL访问数据

3.1 访问作用域变量

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL中数据的读取</title>
</head>
<body>
    <%
        String[] arr = "Java web从入门到精通","Java开发规范手册","Java网络编程";
        request.setAttribute("book",arr);    //将数组保存到request对象中
    %>
    <%
        String[] arr1 = (String[])request.getAttribute("book");    //获取保存到request范围内的变量
        //通过循环和EL输出一维数组的内容
        for(int i = 0;i < arr1.length;i++)
            request.setAttribute("requestI", i);

    %>
    $ requestI : $ book[requestI] <br> <!-- 输出数组中第i个元素 -->
    <%
        
    %>
</body>
</html>

3.2 访问JavaBeans属性

JavaBeans类:


public class Student 
 
	private boolean flag;
	
	public Student()
 
	public boolean getFlag() 
		return flag;
	
	public void setFlag(boolean flag) 
		this.flag = flag;
	
	

Servlet类:

public class StudentServlet extends HttpServlet 
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
		doPost(request,response);
	
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
		Student student = new Student();
		student.setFlag(false);
		
		request.setAttribute("student", student);
		request.getRequestDispatcher("student.jsp").forward(request, response);
	
 

JSP页面访问

$student.flag//获取student对象的flag属性,就是这么简单

3.3 访问集合元素

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ page import="java.util.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EL获取指定元素</title>
</head>
<body>
    <%
        List<String> list = new ArrayList<String>();    //声明一个List集合的对象
        list.add("饼干");
        list.add("牛奶");
        list.add("果冻");
        session.setAttribute("goodList",list);    //将List对象保存到session对象中

        List<String> list1 = (List<String>)session.getAttribute("goodList");    //获取保存到session范围内的对象
        for(int i=0;i<list1.size();i++)
            request.setAttribute("requestI", i);    //将循环增量保存到request范围内的对象中
    %>
    $ requestI : $ goodList[requestI] <br>    <!-- 输出集合的第i个元素 -->
        <% %>

</body>
</html>

EL隐含变量

复习一下JSP的隐含变量:
request、response、application、pageContext、session、page、out、config、exception
下面是EL隐含变量:

变量名说明
pageContext包含JSP常规隐含对象的PageContext类型对象
param包含了请求参数字符串的Map对象
paramValues包含了请求参数字符串数组的Map对象
header包含请求头字符串的Map对象
headerValues包含请求头字符串数组的Map对象
initParam包含Servlet上下文参数的参数名和参数值的Map对象
cookie包含Cookie域和单个对象的Map对象
pageScope包含page作用域属性的Map对象
requestScope包含request作用域属性的Map对象
sessionScope包含session作用域属性的Map对象
applicationScope包含application作用域属性的Map对象

例子

$pageContext.request.method       	//获得HTTP请求的方法,如GET或POST
$pageContext.request.queryString   	//获取请求的查询串
$pageContext.request.requestURL    	//获取请求的URL
$pageContext.request.remoteAddr    	//获取请求的IP地址
$pageContext.session.id           	//获取会话的ID
$pageContext.session.new           	//判断会话对象是否是新建的  
$pageContext.servletContext.serverInfo//获取服务器的信息

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

JavaWeb 之 EL表达式

JavaWeb之EL表达式

javaweb之EL自定义函数

JAVAWEB学习笔记18

JavaWeb 学习笔记总结( 二 )

JavaWeb详解(第五篇)之EL表达式简介