Java Web EL表达式

基本概念

  • EL 表达式的全称是:Expression Language,是表达式语言
  • 作用:代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出
  • EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多
    <body> 
    	<% 
    		request.setAttribute("key","值"); 
    	%>
    	表达式脚本输出 key 的值是: 
    	<%=request.getAttribute("key1")==null?"":request.getAttribute("key1")%> <br/> 
    	
    	EL 表达式输出 key 的值是:
    	${key1} 
    body>
    
  • 格式:${表达式}
  • EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null 字符串。

搜索域数据的顺序

  • EL 表达式主要是输出域对象中的数据
  • 当四个域中都有相同的 key 的数据的时候,EL 表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。

表达式输出

  • 普通属性,数组属性,List 集 合属性,map 集合属性
    public class Person {
        private String name;
        private Integer id;
        private String[] phones;
        private List<String> emails = new ArrayList<>();
        private Map<String, String> family = new HashMap<>();
        // ...
    }
    
    <%--调用bean的对象,输出该方法--%>
    <%
        Person person = new Person();
        person.setId(0);
        person.setName("John");
        person.setPhones(new String[]{"24354235245", "41354654846"});
        ArrayList<String> emails = new ArrayList<>();
        emails.add("513531");
        emails.add("5456563");
        person.setEmails(emails);
        Map<String, String> family = new HashMap<>();
        family.put("father", "jack");
        family.put("mother", "amy");
        family.put("brother", "jackson");
        family.put("grandma", "mary");
        person.setFamily(family);
        pageContext.setAttribute("person", person);
    %>
    
    <%--获取单个属性--%>
    ${person.id}<br>
    ${person.name}<br>
    <%--获取数组--%>
    ${person.phones}<br>
    ${person.phones[0]}<br>
    ${person.phones[1]}<br>
    <%--获取List--%>
    ${person.emails}<br>
    ${person.emails[0]}<br>
    ${person.emails[1]}<br>
    <%--获取Map--%>
    ${person.family}<br>
    ${person.family.mother}<br>
    ${person.family["father"]}<br>
    

运算

  • 基本运算Java Web EL表达式_第1张图片
    Java Web EL表达式_第2张图片

    <%--逻辑运算--%>
    == ${1 == 2} ${1 eq 2} <br>
    != ${1 != 2} ${1 ne 2} <br>
    > ${1 > 2} ${1 gt 2} <br>
    >= ${1 >= 2} ${1 ge 2} <br>
    < ${1 < 2} ${1 lt 2} <br>
    <= ${1 <= 2} ${1 le 2} <br>
    
    <%--算术运算--%>
    + ${1 + 2} <br>
    - ${1 - 2} <br>
    * ${1 * 2} <br>
    / ${1 / 2} <br>
    % ${1 % 2} <br>
    
  • empty 运算:可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false

    <%--empty运算--%>
    <%
        request.setAttribute("emptyNull", null);
        request.setAttribute("emptyStr", "");
        request.setAttribute("emptyArr", new int[]{});
        request.setAttribute("emptyList", new ArrayList<Integer>());
        request.setAttribute("emptyMap", new HashMap<String, String>());
    %>
    null ${empty requestScope.emptyNull} <br>
    "" ${empty emptyStr} <br>
    new int[]{} ${empty emptyArr} <br>
    new ArrayList>Integer<() ${empty emptyList} <br>
    new HashMap>String, String<() ${empty emptyMap} <br>
    
  • 三元运算

    ${1 > 2 ? "greater":"smaller"}
    

11 个隐含对象

变量 类型 作用
pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象
pageScope Map 它可以获取 pageContext 域中的数据
requestScope Map 它可以获取 Request 域中的数据
sessionScope Map 它可以获取 Session 域中的数据
applicationScope Map 它可以获取 ServletContext 域中的数据
param Map 它可以获取请求参数的值
paramValues Map 它也可以获取请求参数的值,获取多个值的时候使用。
header Map 它可以获取请求头的信息
headerValues Map 它可以获取请求头的信息,它可以获取多个值的情况
cookie Map 它可以获取当前请求的 Cookie 信息
initParam Map 它可以获取在 web.xml 中配置的上下文参数
  • EL 获取四个特定域中的属性
    pageScopepageContext 域)
    requestScopeRequest 域)
    sessionScopeSession 域)
    applicationScopeServletContext 域)
    <body> 
    	<% 
    		pageContext.setAttribute("key1", "pageContext1"); 
    		pageContext.setAttribute("key2", "pageContext2"); 
    		request.setAttribute("key2", "request"); 
    		session.setAttribute("key2", "session"); 
    		application.setAttribute("key2", "application"); 
    	%>
    	${ applicationScope.key2 } 
    body>
    
  • pageContext 对象的使用
    通过pageContext对象可以获取request对象,像在Servlet一样,获取Servlet相关的信息
    服务器 ip:${ pageContext.request.serverName }<br>
    
    为了方便,可以在java代码中,将request放进pageContext的域中,这样就可以像上面的四个特定域一样,直接取request
    <% 
    	pageContext.setAttribute("req", request); 
    	协议: ${ req.scheme }<br>
    %>
    
    <%--pageContext对象的使用--%>
    <%=request.getScheme()%>
    ${pageContext.request.scheme}<br>
    
    <%--简便方法,将request放进key-value里面--%>
    <%--获取协议--%>
    <%pageContext.setAttribute("req", request);%>
    ${req.scheme}<br>
    
    <%--获取服务器IP--%>
    <%=request.getServerName()%>
    ${req.serverName}<br>
    
    <%--获取服务器端口--%>
    <%=request.getServerPort()%>
    ${req.serverPort}<br>
    
    <%--获取客户端IP--%>
    <%=request.getRemoteHost()%>
    ${req.remoteHost}<br>
    
    <%--获取客户端端口号--%>
    <%=request.getRemotePort()%>
    ${req.remotePort}<br>
    
    <%--获取工程路径--%>
    <%=request.getContextPath()%>
    ${req.contextPath}<br>
    
    <%--获取请求方法--%>
    <%=request.getMethod()%>
    ${req.method}<br>
    
    <%--获取会话id编号--%>
    <%=session.getId()%>
    ${pageContext.session.id}<br>
    
  • paramparamValues:获取请求参数的值
    html<%--获取请求参数的值--%>
    <%--单个参数--%>
    ${param.username}<br>
    <%--多个参数(多选列表之类的)--%>
    ${paramValues.hobby}<br>
    ${paramValues.hobby[0]}<br>
    ${paramValues.hobby[1]}<br>
    
  • headerheaderValues 获取请求头的信息
    <%--获取请求头参数--%>
    ${header['User-Agent']}<br>
    ${header['Accept']}<br>
    ${headerValues['User-Agent'][0]}<br>
    
  • cookie:获取cookie参数
    ${cookie.JSESSIONID.name}
    ${cookie.JSESSIONID.value}
    
  • initParam:获取web.xml的参数
    <context-param> 
    	<param-name>usernameparam-name> 
    	<param-value>rootparam-value> 
    context-param>
    
    ${initParam.username}
    

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