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页面中,而不用“<%...%>”括起来。
相关阅读
http://codeforces.com/problemset/problem/371/D 题意:给一个多层的漏斗,当一层满后会流向下一层,最后一层满后漏出; n(<=2e5)层数
sobel算子主要用于获得数字图像的一阶梯度,常见的应用和物理意义是边缘检测。 原理 算子使用两个33的矩阵(图1)算子使用两个33的矩阵
计算机如何实现Hello World hello.cinclude<stdio.h> void main() { printf("Hello World!"); } 在你的c编译器里,编译执行后
你可能听说过旧版本的Excel内置的彩蛋赛车游戏,现在新版Excel又添加了热门的愤怒小鸟,不过激活它有点小麻烦。下面让seo实验室小编
StackPanel Orientation属性Orientation属性决定SatckPanel中元素的排列方向,默认为垂直排列 Orientation=“Vertical”<Window x: