Servlet之EL

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 list = new ArrayList<>();
        list.add(user);
        request.setAttribute("list",list);
        //HashMap类型
        HashMap hm = new HashMap<>();
        hm.put("china","beijing");
        hm.put("hubei","wuhan");
        request.setAttribute("map",hm);
        HashMap 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" %>


    Title


<%--使用传统方式获取作用域中的值--%>
name:<%=request.getParameter("name")%>
pwd:<%=request.getParameter("pwd")%>

city:<%=request.getAttribute("city")%> town:<%=((User)request.getAttribute("user")).getAddress().getTown()%>
<%=((User)((ArrayList)request.getAttribute("list")).get(0)).getAddress().getTown()%>
<%=((HashMap)request.getAttribute("map")).get("china")%>
<%=((HashMap)request.getAttribute("suhm")).get("user")%>

从上面代码可以看到,使用传统方式获得request对象中的属性值有以下缺点:

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

EL表达式可以解决上述问题
1、概念

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

2、用法
使用EL表达式进行上述输出



    Title


<%--使用EL表达式获取作用域中的值--%>
name:${param.name}
pwd:${param.pwd}
city:${city}
town:${user.address.town}
${list[0].address.town}
${map.china}
${suhm.user}

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



<%
 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}

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



<%
 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}
request:${requestScope.key}
session:${sessionScope.key}
application:${applicationScope.key}

image
4、EL表达式进行运算

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


${1+1}
<%--2--%> ${2-1}
<%--1--%> ${2*3}
<%--6--%> ${6/2}
<%--3.0--%> ${7%3}
<%--1--%> ${1>2?"好":"不好"}
<%--不好--%> ${1+"2"}
<%--3--%> <%--${1+"abc"}
报错--%> <%--${"abc"+"cdb"} 报错--%> <%--逻辑运算--%> ${true&&false}
<%--false--%> ${true||false}
<%--true--%>

EL表达式可以进行算术运算与关系运算,关系运算返回true或false。需要注意的是,EL表达式中的+,表示加法,不是字符串连接符。
5、EL表达式其他用法

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


<%--获取请求头数据--%>
${header}
${header["host"]}
${headerValues["accept-language"][0]}

<%--获取cookie数据--%> ${cookie}
${cookie.JSESSIONID}
${cookie.JSESSIONID.name}
${cookie.JSESSIONID.value}

image

你可能感兴趣的:(java,servlet)