必威体育Betway必威体育官网
当前位置:首页 > IT技术

EL表达式

时间:2019-08-30 20:11:04来源:IT技术作者:seo实验室小编阅读:60次「手机版」
 

el表达式

语法格式:

${EL表达式}

EL表达式通常由两部分组成:对象和属性。可以使用“点操作符”或“中括号[ ]操作符”来操作对象的属性,如下:

package entity;

public class Student {

 private int stuNo;

 private String stuName;

 private Address address;

public int getStuNo() {

   return stuNo;

}

public void setStuNo(int stuNo) {

   this.stuNo = stuNo;

}

public String getStuName() {

   return stuName;

}

public void setStuName(String stuName) {

   this.stuName = stuName;

}

public Address getAddress() {

   return address;

}

public void setAddress(Address address) {

   this.address = address;

}

 

}

------------------------------------------------

package entity;

public class Address {

private String homeAddress;

private String schoolAddress;

   public String getHomeAddress() {

       return homeAddress;

   }

   public void setHomeAddress(String homeAddress) {

       this.homeAddress = homeAddress;

   }

   public String getSchoolAddress() {

       return schoolAddress;

   }

   public void setSchoolAddress(String schoolAddress) {

       this.schoolAddress = schoolAddress;

   }

}

---------------------------------

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletrequest;

import javax.servlet.http.HttpServletresponse;

import entity.Address;

import entity.Student;

/**

* Servlet implementation class StudentServlet

*/

@WebServlet("/StudentServlet")

public class StudentServlet extends HttpServlet {

   private static final long serialversionuid = 1L;

  

public StudentServlet() {

super();

// TODO Auto-generated constructor stub

}

   

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       // TODO Auto-generated method stub

       doPost(request, response);

   }

   

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Student student = new Student();

        student.setStuName("小安妮");

        student.setStuNo(30);

        Address address = new Address();

        address.setHomeAddress("杭州西湖");

        address.setSchoolAddress("中科大");

        student.setAddress(address);

        request.setattribute("student", student);

        request.getRequestDispatcher("jsp/stu.jsp").forward(request, response);

   }

}

------------------------------------------

<%@ page language="java" import="entity.Student" import="entity.Address" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

<%

    //类没有引入,记得在JSP文件最上面引入Student类 import="entity.Student"

   Student student = (Student)request.getAttribute("student");

   String stuName = student.getStuName();

   int stuNo = student.getStuNo();

   Address address = student.getAddress();

   String schoolAddress = address.getSchoolAddress();

   String homeAddress = address.getHomeAddress();

   out.print("学号:"+student.getStuNo()+"<br/>");

   out.print("姓名:"+student.getStuName()+"<br/>");

   out.print("学校:"+address.getSchoolAddress()+"<br/>");

   out.print("家庭地址:"+address.getHomeAddress());

%>       

</body>

</html>

以上是使用传统的Scriptlet接受对象,并将对象的属性显示到前台,如果使用EL表达式来实现,就会简单许多:

<%@ page language="java" import="entity.Student" import="entity.Address" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

  

                        学生对象:${requestScope.student}<br/>

                        学号:${requestScope.student.stuNo} <br/>

                         姓名:${requestScope.student.stuName}<br/>

                         学校:${requestScope.student.address.schoolAddress }<br/>

                         家庭住址:${requestScope.student.address.homeAddress }

</body>

</html>

使用EL可以将JSP中的Java代码彻底消除,并且不用再做强制的类型转换,整体的JSP代码就会简单许多。

EL表达式操作符:

1.点操作符

${requestScope.student},表示在request作用域内查找student对象;${requestScope.student.stuNo},表示在request作用域内查找student对象的stuNo属性。

2.中括号[ ]操作符

(1)如果属性名称中包含一些特殊字符,如“ . ”、“ ?”、“ - ”等,就必须使用中括号操作符。如不能写成 ${requestScope.scholl-name},而必须改为${requestScope["scholl-name"]}

(2)如果要动态取值时,也必须使用中括号操作符。例如,String data = "school"(data是一个变量),那么只能用${requestScope[data]}。需要注意的是,中括号里面的值:如果加了双引号则表示一个常量,如 ${requestScope["school"]},表示获取school的属性值;而如果不加上双引号,则表示一个变量,如${requestScope[data]},表示获取data所表示的school的属性值,即等价于${requestScope["school"]},所以在使用中括号获取属性值时,一定要注意是否加引号,除了双引号,也可以使用单引号,其作用是一样的。

(3)访问数组。如果要访问request作用域的一个对象名为names的数组,就可以通过中括号来表示索引,如${requestScope.names[0]}、${requestScope.names[1]}等

(4)点操作符和中括号操作符还可以用来获取Map中的属性值:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Map<String,String> countries = new HashMap<String,String>();

        countries.put("US", "美国");

        countries.put("CN", "中国");

        request.setAttribute("countries", countries);

        request.getRequestDispatcher("jsp/stu.jsp").forward(request, response);

   }

<body>

US:${countries.US}<br/>

CN:${countries["CN"] }                

</body>

4.关系运算符

EL表达式还能进行一些简单的运算,如下所示:

含义                               关系运算符                                                   示例                                             结果

大于                                >(或gt)                                       ${2>1}或$(2 gt 1)                                   true

大于或等于                    >= (或ge)                                        ${2>=1}或${2 ge 1}                               true

等于                                == (或eq)                                        ${2==1}或${2 eq 1}                               false

小于或等于                    <=(或le)                                     ${2<=1}或${2 le 1}                                false

小于                                <(或lt)                                              ${2<1}或${2 lt 1}                                   false

不等于                            !=(或ne)                                          ${2!=1}或${2 ne 1}                                true

逻辑运算符

EL表达式能够进行的逻辑运算,如下:

含义                           关系运算符                                                 示例                                                  结果

逻辑或                        ||(或or)                                      true||false (或true or false)                         true     

逻辑与                        &&(或and)                                   true&&false (或true and false)                   false

逻辑非                        !(或not)                                         !true (或not true)                                          false

5.empty操作符

用来判断一个之是否为null或不存在。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       request.setAttribute("test", "test");

       request.setAttribute("dog", null);

       request.getRequestDispatcher("jsp/stu.jsp").forward(request, response);

   }

<body>

          之前不存在temp变量:${empty temp }<br/>

           变量dog为空:${empty dog }<br/>

           变量test已经被赋值:${empty test }                            

</body>

之前不存在的变量temp和值为空的变量dog,用empty操作符运算输出的结果为true,而之前存在的变量,但未被赋值,则为false

6.EL表达式的隐式对象

"隐式对象"又称“内置对象”。之前JSP里的request,session,APPlication等都是JSP的隐式对象,这些“隐式对象”可以不用实例化就可以直接使用。同样的,在EL表达式中也存在一些隐式对象,按照使用途径的不同,EL隐式对象分为作用域访问对象、参数访问对象和JSP隐式对象。

1.四个作用域访问对象

${requestScope.student.stuNo}中的requestScope表示request作用域。即在使用EL表达式来获取一个变量的同时,可以指定改变量的作用域。EL表达式提供了四个可选的作用域对象:

对象名                                                                                            作用域

pageScope                                                    把pagecontext作用域中的数据映射为一个Map类的对象

requestScope                                                把request作用域中的数据映射为一个Map类的对象

sessionScope                                                把session作用域中的数据映射为一个Map类的对象

applicationScope                                          把application作用域中的数据映射为一个Map类的对象               

pageScope  、requestScope 、sessionScope 和 applicationScope都可以看成Map型变量,要获取其中的数据就可以使用点操作符或中括号操作符。另外,如果不指定作用域,EL表达式就会依次从pageScope -->requestScope -->sessionScope ---> applicationScope的范围内寻找。例如EL表达式在解析${student}时,就会先在pageContext作用域中查找是否有student属性,如果有则直接获取,如果没有则再会去request作用域中查找是否有student属性,以此类推。

2.参数访问对象

在JSP中,可以使用request.getparameter()和request.getParameterValues()来获取表单中的值(或地址栏、超链接中附带的参数值)。对应的,EL表达式可以通过param、paramValues来获取这些值,如下:

对象名                                        示例                                                                                        作用

param                                 ${param.userName}                                             等价于request.getParameter("userName")

paramValues                     ${paramValues.hobbies}                                   等价于request.getParameterValues("hobbies")

3.JSP隐式对象

pageContext是JSP的一个隐式对象,同时也是EL表达式的隐式对象。因此,pageContext是EL表达式与JSP之间的一个桥梁。在EL表达式中,可以通过pageContext来获取JSP的内置对象和ServletContext对象,如下:

EL表达式                                                                    获取对象

${pageContext.page}                                         获取page对象

${pageContext.request}                                     获取request对象

${pageContext.response}                                  获取response对象

${pageContext.session}                                    获取session对象

${pageContext.out}                                            获取out对象

${pageContext.exception}                                 获取exception对象

${pageContext.servletContext}                         获取servletContext对象

还可以获取这些对象的getXxx()方法:例如${pageContext.request.studentNo}就表示访问request对象的getStudentNo()方法。可以发现,在使用时EL去掉了方法中的get和“()”,并将首字母改为了小写。

小结:

语法:${EL表达式}

其中,${  }中的“EL表达式”可以是一个作用域访问对象、参数访问对象或JSP隐式对象pageContext三者之一。并且EL表达式可以向HTML一样直接写在JSP页面中,而不用“<%...%>”括起来。

相关阅读

D. Vessels

http://codeforces.com/problemset/problem/371/D  题意:给一个多层的漏斗,当一层满后会流向下一层,最后一层满后漏出; n(<=2e5)层数

Sobel算子的理解

sobel算子主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。 原理 算子使用两个33的矩阵(图1)算子使用两个33的矩阵

Hello World!

计算机如何实现Hello World hello.cinclude<stdio.h> void main() { printf("Hello World!"); } 在你的c编译器里,编译执行后

excel2010彩蛋愤怒的小鸟如何激活

你可能听说过旧版本的Excel内置的彩蛋赛车游戏,现在新版Excel又添加了热门的愤怒小鸟,不过激活它有点小麻烦。下面让seo实验室小编

WPF-StackPanel面板

StackPanel Orientation属性Orientation属性决定SatckPanel中元素的排列方向,默认为垂直排列 Orientation=“Vertical”<Window x:

分享到:

栏目导航

推荐阅读

热门阅读