EL表达式和EL函数库(JSTL提供)

EL表达式

1.EL是JSP内置的表达式语言!

  *jsp2.0开始,不让再使用Java脚本,而是使用el表达式和动作标签来替代Java脚本!

  *EL替代的是<%= ....%>,也就是说,EL只能做输出!

2.EL表达式来读取四大域

  * ${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。

  *  ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!

 1   <body>
 2     <%
 3         pageContext.setAttribute("xxx", "pageContext_XXX");
 4         request.setAttribute("xxx", "request_XXX");
 5         session.setAttribute("xxx", "session_XXX");
 6         application.setAttribute("xxx", "application_XXX");
 7         
 8      %>
 9      
10      ${xxx }<!-- 全域查找,从小到大 --><br>
11      ${pageScope.xxx }<!-- 指定域查找 --><br>
12      ${requestScope.xxx }<!-- 指定域查找 --><br>
13      ${sessionScope.xxx }<!-- 指定域查找 --><br>
14      ${applicationScope.xxx }<!-- 指定域查找 --><br>
15   </body>

请求之后的结果:

 

3.JavaBean导航

 Employee.java:--->一个JavaBean

 1 package com.xjs.domain;
 2 
 3 public class Employee {
 4 
 5     private String name;
 6     private double salary;
 7     private Address address;
 8     public String getName() {
 9         return name;
10     }
11     public void setName(String name) {
12         this.name = name;
13     }
14     public double getSalary() {
15         return salary;
16     }
17     public void setSalary(double salary) {
18         this.salary = salary;
19     }
20     public Address getAddress() {
21         return address;
22     }
23     public void setAddress(Address address) {
24         this.address = address;
25     }
26     @Override
27     public String toString() {
28         return "Employee [name=" + name + ", salary=" + salary + ", address="
29                 + address + "]";
30     }
31 }

Address.java:--->地址的JavaBean

 1 package com.xjs.domain;
 2 
 3 public class Address {
 4 
 5     private String city;
 6     private String street;//街道
 7     public String getCity() {
 8         return city;
 9     }
10     public void setCity(String city) {
11         this.city = city;
12     }
13     public String getStreet() {
14         return street;
15     }
16     public void setStreet(String street) {
17         this.street = street;
18     }
19     @Override
20     public String toString() {
21         return "Address [city=" + city + ", street=" + street + "]";
22     }
23 }

/el/a.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@page import="com.xjs.domain.*" %><!-- 导包 -->
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 
 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9 <html>
10   <head>
11     <base href="<%=basePath%>">
12     
13     <title>My JSP 'a.jsp' starting page</title>
14     
15     <meta http-equiv="pragma" content="no-cache">
16     <meta http-equiv="cache-control" content="no-cache">
17     <meta http-equiv="expires" content="0">    
18     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
19     <meta http-equiv="description" content="This is my page">
20     <!--
21     <link rel="stylesheet" type="text/css" href="styles.css">
22     -->
23 
24   </head>
25   
26   <body>
27     <%
28         Address address=new Address();
29         address.setCity("北京");
30         address.setStreet("西三旗");
31         
32         Employee emp=new Employee();
33         emp.setName("金泰妍");
34         emp.setSalary(9999.00);
35         emp.setAddress(address);
36         
37         request.setAttribute("emp", emp);
38      %>
39      <h3>使用el获取request域的emp</h3>
40      <!-- request.getAttribute("emp").getAddress().getStreet() -->
41      <!-- JavaBean导航 -->
42      ${requestScope.emp.address.street }
43   </body>
44 </html>

请求该页面结果:

 

4.EL可以输出的东西都在11个内置对象中!

  EL一个11个内置对象,无需创建即可使用。其中10个是Map类型的!pageContext不是Map,它就是pageContext类型,1个顶9个。

  *pageScope

  *requestScope

  *sessionScope

  *applicationScope

  *param

  *paramValues;

  *header;

  *headerValues;

  *initParam;

  *cookie;

  *pageContext;

 

  *我们已经学习了四个。

  *param:对应参数,它是一个Map,其中key属性名,value是参数值,适用于单值的参数。

1   <body>
2     <!-- map.key这是el的语法!
3     map['key']也可以操作map
4      -->
5     ${param.username }
6   </body>

在浏览器中请求:

  *paramValues:对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。

1   <body>
2     <!-- map.key这是el的语法!
3     map['key']也可以操作map
4      -->
5     ${param.username }<br>
6     <!-- 数组 -->
7     ${paramValues.hobby[0] }<br>
8     ${paramValues.hobby[1] }
9   </body>

请求:

  *header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头。

1   <body>
2     ${header['User-Agent'] }
3   </body>

请求结果:

  *headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头。

  *initParam:获取<context-param>内的参数!---平时不用它

 在web.xml中

1   <context-param>
2       <param-name>xxx</param-name>
3       <param-value>XXX</param-value>
4   </context-param>
5   <context-param>
6       <param-name>yyy</param-name>
7       <param-value>YYY</param-value>
8   </context-param>

${initParam.xxx}

1   <body>
2     ${initParam.xxx }
3   </body>

请求结果:

  *cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。使用例如:${cookie.username.value}

1   <body>
2     ${cookie.JSESSIONID.value }
3   </body>

请求结果:

  *pageContext:它是PageContext类型!${pageContext.request.scheme}--->相当于调用getRequest().getScheme();获取协议。

 

  <body>
      <!-- 项目名 -->
    ${pageContext.request.contextPath }
    
    <hr>
    
    <a href="${pageContext.request.contextPath }/cookie/a.jsp">点击这里</a>
    
    <form method="post" action="${pageContext.request.contextPath }/el/a.jsp">
        <input type="submit" value="xxx">
    </form>
  </body>

请求之后的结果:

在之后的表单或超链接中的项目名可以这样获取!!!

 


EL函数库(由JSTL提供)

  *导入标签库:<%@   tablib  prefix="fn"  uri="http://java.sun.com/jsp/jstl/functions " %>

 


自定义函数库

  *写一个java类,类中可以定义0~N个方法,但必须是static ,而且有返回值的!

 

posted @ 2019-05-15 21:26  微微亮  阅读(153)  评论(0编辑  收藏  举报