1.1 EL运算符
1.1.1 算数运算符
| 算术运算符 | 说明 | 实例 | 结果 |
|---|
| + | 加 | ${6.80 + -12} | -5.2 |
| - | 减 | ${15 - 5} | 10 |
| * | 乘 | ${2 * 3.14159} | 6.28318 |
| / 或者 div | 除 |
25
d
i
v
4
或
{25 div 4}或
25div4或{25/4} | 6.25 |
| %或者mod | 取余 |
24
m
o
d
5
与
{24 mod 5}与
24mod5与{24 % 5} | 4 |
与数值一样,String对象也可以使用, ${"16" * 4},字符串“16”会被转换成整数16
1.1.2 关系 & 逻辑运算符
1.1.3 条件运算符
```java
```Java
格式:
expression ? expression1 : expression2
${(5 * 5) == 25 ? 1 : 0}//return 1
1.1.4 empty运算符
```Java
格式:
${empty expression}
判断expression的值是否为**null、空字符串""、空数组、空Map、空集合**
## 1.1.5 属性与集合元素访问运算符
1. **点号运算符**
```Java
点号运算符用来访问bean对象的属性值或者Map对象的一个键的值
ex:param是EL的一个隐含对象,它是是个Map对象,返回param对象username请求参数的值
${param.username}
- 方括号运算符
可以用来访问Map、bean的属性、List属性值
${param["username"]} 或者 ${param.['username']}
${cuntomer["name"]}
-
实例使用
| ${2 + 5} | ${2 + 5} |
| ${4 / 5} | ${4 / 5} |
//可以使用 " "来转义使得网页打印除后面的内容
1.2 使用EL访问拿数据
1.2.1 访问作用域变量
> servlet中使用setAttribute()将一个变量存到HttpServletRequest、HttpSession、ServletContext等
> jsp可以使用EL隐含的调用getAttribute()作用域的变量的值
如:${variable_name}
容器依次在页面作用域page、request、session、application作用域中寻找,如果找到就调用toString()方法
返回属性值,如果没找到,就返回空字符串(不是null!)
**1、 demo.java**
```Java
doGet(){
request.setAttribute("attrib1", nen Integer(250));
HttpSession seesion = request.getSession();
session.setAttribute("attrib2", "jsp EL");
ServletContext application = getServletContext();
application.setAttribute("attrib3", LocatlData.new());
request.setAttribute("attrib4", "请求作用域");
session.setAttribute("attrib4", "会话作用域");
application.setAttribute("attrib4", "应用作用域");
RequestDispatchaer rd = request.getRequestDispatcher("demo.jsp");
rd.forword(request, response);
}
**2、 demo.jsp**
```Java
- 属性1: ${attrib1}
- 属性2: ${attrib2}
- 属性3: ${attrib3}
- 属性4: ${attrib4}
**3、 页面显示:**
属性1: 250
属性2: jsp EL
属性3: 2021-10-24
属性4: 请求作用域
[这里之所以输出的是请求作用域,是因为客户端查找的是从page、request、sesssion、application的顺序,]
1.2.2 访问JavaBeans属性
**1、 Address.java**
public Address implements java.io.Serializable{
private String city;
private String street;
private String zipCode;
public Address(){}
public Address(String city, String street, String zipCode){
this.city = city;
this.street = street;
this.zipCode = zipCode;
}
}
**2、 Employee.java**
public class Employee implements java.io.Serializable{
private String name;
private String email;
private String phone;
private Address address;
public Employee(){};
public Employee(String name, String email, String phone, Address address){
this.name = name;
this.email = email;
this.phone = phone;
this.address = address;
}
}
**3、 EmployeeServlet.java**
public class EmployeeServlet extends HttpServlet{
public doGet(){
Address address = new Address("上海市", "科技路25路", "201600");
Employee employee = new Employee("automan", "hacker@163.com", "8899123", address);
request.setAttribute("emloyee", employee);
RequestDispatchaer rd = request.getRequestDispatchar("demo1.jsp");
rd.forward(request, response);
}
}
**4、 demo1.jsp**
- 员工名: ${employee.name}
- Email地址: ${employee.email}
- 电话:${employee.phone}
- 客户地址:
- 城市:${employee.address.city}
- 街道:${employee.address.street}
- 邮编:${emploee.address.zipCode}
**5、客户端浏览器输出**
员工名:automan
Email地址:hacker@163.com
电话:8899123
客户地址
城市:上海市
街道:科技路220
邮编:201600
1.2.3 访问集合元素
1. **CollectServlet.java**
@WebServlet("/CollectServlet")
public class CollectServlet extends HttpServlet{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html;charset=UTF-8");
String[] city = {"北京","上海","广州"};
request.setAttribute("mycity", city);
ArrayList fruit = new ArrayList<>();
fruit.add("apple");
fruit.add("orange");
fruit.add("banana");
request.setAttribute("myFruit", fruit);
HashMap capital = new HashMap();
capital.put("China","北京");
capital.put("England","伦敦");
capital.put("Russia","莫斯科");
request.setAttribute("capital",capital);
RequestDispatcher rd =
request.getRequestDispatcher("/collections.jsp");
rd.forward(request,response);
}
}
**2、clooection.jsp**
<%@ page contentType="text/html;charset=UTF-8" %>
访问集合元素
访问集合元素
我最喜欢的水果是:${myFruit[2]}
1.3 EL隐含变量
### EL表达式中的隐含变量
| 变量名 | 说明 |
|---|
| pageContext | 包含JSP常规隐含对象的PageContext类型对象 |
| param | 包含请求参数字符串的Map对象 |
| paramValues | 包含请求参数字符串组的Map对象 |
| header | 包含请求头字符串的Map对象 |
| headerValues | 包含请求头字符串数组的Map对象 |
| initParam | 包含Servlet上下文参数的参数名和参数值的Map对象 |
| cookie | 匹配cookie域和单个对象的Map对象 |
| pageScope | 包含page作用域属性的Map对象 |
| sessionScope | 包含session作用域属性的Map对象 |
| requestScope | 包含request作用域属性的Map对象 |
| applicationScope | 包含application作用于属性的Map对象 |
## 1.3.1 pageContext变量
pageContext变量包含request、response、session、out、servletContext属性
${pageContext.request.method} //获取HTTP请求的方法,GET/POST
${pageContext.request.queryString} //获取请求的查询串
${pageContext.request.requestURL}
${pageContext.request.remoteAddr} //IP地址
${pageContext.session.id} //会话id
${pageContext.session.new} //判断会话对象是不是新建的
${pageContext.servletContext.servletInfo} //获取服务器信息
EL可以访问对象的属性,但不能嗲用对象的方法 如: ${pageContext.request.getMethod()}
## 1.3.2 param和paramValues变量
**param**和**paramValues**变量**用来从请求对象中检索请求参数值**
1. param是调用给定参数名的getParamter(String name)的结果,用EL表示如下:
${param.name} 相当于调用了getParamter(String name);
1. paramValues使用了getParamterValues(String name);
${paramValues.name["0"]} 相当于调用了阿 getParamterValues(String name);
## 1.3.3 initParam变量
initParam变量存储了Servlet上下文的参数名和参数值
例如在DD中定义了如下初始化参数
emain
hacker@163.com
相对应的EL表达式得到的参数email的值
${initParam.email} //application.getInitParamter("email");
1.3.4 pageScoperequestScopesessionScopeapplication 变量
很好理解,就是用他们访问不同作用域的属性
如果java里写了
session.setAttribute("temp", 1000);
那么jsp页面里使用sessionScope变量访问:
${sessionScope.temp}
其他同理
1.3.5 header、headerValues
> header和headerValues是从HTTP请求头中检索值
有点像param和paramValues
${header.host}或者${header["host"]}
同样的headerValues就是获取一个数组了
${headerValues.host[0]}或者
${headerValues.host['0']}或者
${headerValues.host["0"]}
1.3.6 cookit变量
显而易见,就是有关cookie的
比如servlet里写了:
cookie[] cookie = new cookie("username", "zhangsan");
在servlet里获取是如下代码:
cookie[] cookies = request.getcookie();
for(int i =0; < cookies.length){
if((cookies[i].getName()).equals("username")){
out.println(cookies[i].getValue());
}
}
用EL表达式的话就一句:
${cookit.username.value}
1.3.7 综合实例
废话不多说,直接上代码
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.model.*" %>
EL隐含变量的使用
<%
Address address = new Address("上海",
"科技路25号","201600");//创建一个地址对象
Employee employee = new Employee("automan",
"hacker@163.com","8899123",address);//创建一个员工对象
session.setAttribute("employee", employee);//吧员工对象发送给session的范围
cookie cookie = new cookie("userName","Hacker");//发送给cookie
response.addcookie(cookie);//发送给客户端
%>
EL隐含变量的使用
| EL表达式 | 值 |
| ${pageContext.request.method} |
${pageContext.request.method} |
| ${param.userName} | ${param.userName} |
//userName为什么是Smith?请看下图的地址栏get请求提交的是userName是Smith
| ${header.host} | ${header.host} |
| ${cookie.userName.value} |
${cookie.userName.value} |
| ${initParam.email} | ${initParam.email} |
| ${sessionScope.employee.address.street} |
${sessionScope.employee.address.street} |