EL表达式

应用传统形式获取request对象里的属性值

ElServlet.java

public class ElServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        this.doGet(request,response);    }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("utf-8");        response.setContentType("text/html;charset=utf-8");        //从申请中获取数据        String name = request.getParameter("name");        String pwd = request.getParameter("pwd");        System.out.println("name="+name+",pwd="+pwd);        //设置属性的值为字符串类型        request.setAttribute("city","beijing");        //Object类型        User user = new User(1,"lisi",new Address("hubei","wuhan","hongshan"));        request.setAttribute("user",user);        //List类型        ArrayList<User> list = new ArrayList<>();        list.add(user);        request.setAttribute("list",list);        //HashMap类型        HashMap<String, String> hm = new HashMap<>();        hm.put("china","beijing");        hm.put("hubei","wuhan");        request.setAttribute("map",hm);        HashMap<String, User> hm1 = new HashMap<>();        hm1.put("user",user);        request.setAttribute("suhm",hm1);        //通过申请转发形式跳到某jsp页面        request.getRequestDispatcher("el.jsp").forward(request,response);    }}

el.jsp

<%@ page import="com.syf.entity.User" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.HashMap" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body><%--应用传统形式获取作用域中的值--%>name:<%=request.getParameter("name")%>pwd:<%=request.getParameter("pwd")%><br>city:<%=request.getAttribute("city")%>town:<%=((User)request.getAttribute("user")).getAddress().getTown()%><br><%=((User)((ArrayList)request.getAttribute("list")).get(0)).getAddress().getTown()%><br><%=((HashMap)request.getAttribute("map")).get("china")%><br><%=((HashMap)request.getAttribute("suhm")).get("user")%></body></html>

从下面代码能够看到,应用传统形式取得request对象中的属性值有以下毛病:

  • 必须要导入包
  • 须要进行类型的强制转换
  • 层次结构比较复杂

EL表达式能够解决上述问题
1、概念

  • Expression Language 一种非常简单的表达式,语法简略易懂,便于应用。让jsp写起来更加不便,简化jsp中获取作用域或者申请数据的写法。
  • 语法结构:${expression}
  • 应用.和[]两种运算符获取数据

2、用法
应用EL表达式进行上述输入

<html><head>    <title>Title</title></head><body><%--应用EL表达式获取作用域中的值--%>name:${param.name}pwd:${param.pwd}<br>city:${city}<br>town:${user.address.town}<br>${list[0].address.town}<br>${map.china}<br>${suhm.user}</body></html>

3、EL表达式作用域的程序
JSP的四大作用域,范畴由小到大为:pageContext-->request-->session-->application
如果四个作用域中都有雷同的key,获取值的程序是怎么的?

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body><!--在四大作用域中设置属性值--><% pageContext.setAttribute("key","this is pageContext"); request.setAttribute("key","this is request"); session.setAttribute("key","this is session"); application.setAttribute("key","this is application");%><%--获取作用域中的值--%>key:${key}</body></html>

上述代码获取到的是pageContext,把pageContext这行正文掉,再执行程序,获取到的是request,同理往下顺次是session,application。
这阐明不同作用域中有雷同key,获取key的值的程序是由小作用域到大作用域。
如何获取指定的key的值?

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body><!--在四大作用域中设置属性值--><% pageContext.setAttribute("key","this is pageContext"); request.setAttribute("key","this is request"); session.setAttribute("key","this is session"); application.setAttribute("key","this is application");%><%--获取指定作用域中key的值--%>pageContext:${pageScope.key}<br>request:${requestScope.key}<br>session:${sessionScope.key}<br>application:${applicationScope.key}</body></html>


4、EL表达式进行运算

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body>${1+1}<br><%--2--%>${2-1}<br><%--1--%>${2*3}<br><%--6--%>${6/2}<br><%--3.0--%>${7%3}<br><%--1--%>${1>2?"好":"不好"}<br><%--不好--%>${1+"2"}<br><%--3--%><%--${1+"abc"}<br> 报错--%><%--${"abc"+"cdb"} 报错--%><%--逻辑运算--%>${true&&false}<br><%--false--%>${true||false}<br><%--true--%></body></html>

EL表达式能够进行算术运算与关系运算,关系运算返回true或false。须要留神的是,EL表达式中的+,示意加法,不是字符串连接符。
5、EL表达式其余用法

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body><%--获取申请头数据--%>${header}<br>${header["host"]}<br>${headerValues["accept-language"][0]}<br><hr><%--获取cookie数据--%>${cookie}<br>${cookie.JSESSIONID}<br>${cookie.JSESSIONID.name}<br>${cookie.JSESSIONID.value}<br></body></html>