JavaWeb——EL表达式_糖葫芦好好吃的博客-程序员宅基地

技术标签: java  JavaWeb  

JavaWeb——EL表达式

一、作用

EL表达式主要是代替Jsp页面中的表达式脚本在Jsp页面中进行数据的输出。

二、语法格式

${合法的表达式}

注意:

1.EL表达式不可以定义变量,也不可以使用脚本中声明的变量,但是可以访问请求参数,作用域变量,JavaBeans以及EL隐含变量。

2.EL表达式在输出null值的时候,输出的是空串,而jsp表达式脚本输出null值的时候,输出的是null

三、访问作用域变量

访问作用域变量,只需在EL表达式中使用变量名:

${key}

容器会依次在页面作用域、请求作用域、会话作用域、应用作用域中查找(由小到大),如果找到了该属性,则返回属性值,否则返回空串。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    pageContext.setAttribute("username","pageContext");
    request.setAttribute("username","request");
    session.setAttribute("username","session");
    application.setAttribute("username","servletContext");
  %>

  ${username}
  </body>
</html>

输出pageContext。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <%
    pageContext.setAttribute("username","pageContext");
    request.setAttribute("username","request");
    session.setAttribute("username","session");
    application.setAttribute("username","servletContext");
    pageContext.forward("variables.jsp");
  %>

  ${username}
  </body>
</html>

将请求转发到另一个页面

输出:request,因为pageContext作用域只在当前的页面。

三、访问JavaBeans属性

public class Address implements Serializable {
    
    private String city;
    private String street;
    private String zipCode;
public class Employee implements Serializable {
    
    private String name;
    private String email;
    private String phone;
    private Address address;
@WebServlet("/EmployeeServlet")
public class EmployeeServlet extends HttpServlet {
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        Address address=new Address("上海市","科技路","201600");
        Employee employee=new Employee("admin","[email protected]","18379440275",address);
        req.setAttribute("employee",employee);
        RequestDispatcher dispatcher=req.getRequestDispatcher("beanDemo.jsp");
        dispatcher.forward(req,resp);
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<ul>
    <li>${employee.name}</li>
    <li>${employee.email}</li>
    <li>${employee.phone}</li>
    <li>
        <ul>
            <li>${employee.address.city}</li>
            <li>${employee.address.street}</li>
            <li>${employee.address.zipCode}</li>
        </ul>
    </li>
</ul>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tXh6QyHP-1612516223036)(D:\图片\HTML+CSS3\QQ截图20201107104633.png)]

EL表示式可以使用点号表示法很方便的访问JavaBeans的属性,如果找不到该属性,则返回空串。

四、访问集合元素

1.访问数组元素

${requestScope.person.arrays[0]}<br/>
${requestScope.person.arrays[1]}<br/>
${requestScope.person.arrays["2"]}<br/>

使用数组的索引可以访问数组的元素

2.访问List接口的对象

${requestScope.person.lists[0]}<br/>
${requestScope.person.lists[1]}<br/>
${requestScope.person.lists["2"]}<br/>

使用列表的索引可以访问列表的元素

3.访问map接口的对象

${requestScope.person.maps["key1"]}<br/>
${requestScope.person.maps["key2"]}<br/>
${requestScope.person.maps.key3}<br/>

使用map对象的指定的键用[]语法或者点语法访问属性值

public class Person {
    
    private String[] arrays;
    private List<String>  lists;
    private Map<String,Object> maps;

<%@ page import="entities.Person" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    List<String> list= Arrays.asList("a","b","c");
    String[] arrays={"1","2","3"};
    Map<String,Object> map=new HashMap<>();
    map.put("key1","value1");
    map.put("key2","value2");
    map.put("key3","value3");
    Person person=new Person(arrays,list,map);
    request.setAttribute("person",person);
%>
person的arrays属性:<br/>
${requestScope.person.arrays[0]}<br/>
${requestScope.person.arrays[1]}<br/>
${requestScope.person.arrays["2"]}<br/>
person的lists属性:<br/>
${requestScope.person.lists[0]}<br/>
${requestScope.person.lists[1]}<br/>
${requestScope.person.lists["2"]}<br/>
person的map属性:<br/>
${requestScope.person.maps["key1"]}<br/>
${requestScope.person.maps["key2"]}<br/>
${requestScope.person.maps.key3}<br/>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHRE9HBk-1612516223039)(D:\图片\HTML+CSS3\QQ截图20201107110957.png)]

注意:每个属性要被访问需要getXxx方法,在EL表达式中,找的不是属性而是属性的get方法,如果get方法名改变了,EL表达式也要变。

五、EL隐含变量

1.pageContext变量

通过pageContext变量可以获得request、session、out、servletContext属性(jsp九大内置对象),可以使用pageContext获得这些属性的属性。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${pageContext.request.method}<br/>->getMethod方法
${pageContext.request.queryString}<br/>->getQueryString方法
${pageContext.request.requestURL}<br/>->getRequestURL方法
${pageContext.session.id}<br/>->getId方法
${pageContext.servletContext.serverInfo}<br/>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UAr0B7Cf-1612516223040)(D:\图片\JavaWeb\QQ截图20201107141419.png)]

pageContext是通过点运算符获取对象的属性的,在EL表达式中不允许调用对象的方法。

${pageContext.request.getMethod()}<br/>错误

request.getscheme()它可以获取请求的协议
request.getServerName()获取请求的服务器ip或域名

request.getServerPort()获取请求的服务器端口号

request.getContextPath()获取当前工程路径

request.getMethod()获取请求的方式

request.getRemoteHost()获取客户端的ip地址

2.param和paramValues变量

param.name->相当于调用request.getParameter(name)方法的返回值

paramValues.name->相当于调用request.getParameterValues(name)返回一个数组,要想访问数组的元素,应该使用[]运算符。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="param.jsp">
    <input type="text" name="username"><br/>
    <input type="password" name="password"><br/>
    <input type="checkbox" name="hobby" value="睡觉">睡觉
    <input type="checkbox" name="hobby" value="吃饭">吃饭
    <input type="checkbox" name="hobby" value="打游戏">打游戏<br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${param.username}<br/>
${param.password}<br/>
${paramValues.hobby[0]}<br/>
${paramValues.hobby[1]}<br/>
${paramValues.hobby[2]}<br/>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmjqNFRF-1612516223044)(D:\图片\JavaWeb\QQ截图20201107143200.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQAKyRtt-1612516223047)(D:\图片\JavaWeb\QQ截图20201107143224.png)]

3.initParam变量

initParam->获取servlet上下文的参数

    <context-param>
        <param-name>email</param-name>
        <param-value>[email protected]</param-value>
    </context-param>

在web.xml文件中定义初始化参数

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${initParam.email}
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hg3QZy0-1612516223048)(D:\图片\JavaWeb\QQ截图20201107144150.png)]

4.header和headerValues变量

header.name->相当于调用request.getHeader(name)方法的返回值

headerValues.name->相当于调用request.getHeaders(name)返回一个数组,要想访问数组的元素,应该使用[]运算符。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${header["host"]}<br/>
${headerValues.host[0]}
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjgtNIv8-1612516223049)(D:\图片\JavaWeb\QQ截图20201107144646.png)]

5.pageScope、requestScope、sessionScope、applicationScope变量

pageScope Map<String.Object> 它可以获取 pageContext 域中的数据
requestScope Map<String.Object> 它可以获职Request 域中的数据
sessionScope Map<String,object> 它可以获叹Session坡中的数据
applicationScope Map<String.Object> 它可以获取 ServletContext 域中的数据

可以指定作用域获取储存的对象

6.Cookie变量

cookie->map<String,Cookie>类型

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${cookie.JSESSIONID.name}<br/>
${cookie.JSESSIONID.value}<br/>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6vgNojt-1612516223051)(D:\图片\JavaWeb\QQ截图20201107152710.png)]

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/NCU_tanghulu/article/details/113700326

智能推荐

JAVA处理日期时间 相加减大全_fancylovejava的博客-程序员宅基地

http://www.blogjava.net/kelly/archive/2011/02/21/344755.htmljava处理日期时间 相加减JAVA处理日期时间常用方法: 1.java.util.Calendar Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,

修改centos远程端口_weixin_34221332的博客-程序员宅基地

修改远程端口(a) vi /etc/ssh/sshd_config将#port 22 这行改成你想要的端口重启SSH service sshd restart (b) firewall 加端口2022service sshd restart 测试远程端口是否修改成功转载于:https://blog.51cto.com/13936120/2346172...

Cloudreve自建云盘实践,我说了没人能限制得了我的容量和速度_程序员柒柒的博客-程序员宅基地_cloudreve

为啥要用自建网盘,市面上的云盘不香了?每一个用户需求的背后都是因为有场景存在,而这些差异化的场景也都是因为不同的用户类型产生的。就像我作为技术号主想分享一些自己总结的资料,放到一些云盘以后有时候会被其他不知道从哪冒出来的小伙伴给举报,举报链接就取消了,取消了链接也就影响了我的资料分享。同时我可能还希望我的分享内容能被记录到下载次数、允许几次下载、下载时是否要做一些引流动作等等。所以类似这样的特殊场景下就需要自建网盘来维护个人需要的资料,与之类似的还有一些公司或者组织都会建相对私域的网盘功能服务功能,给予内部

常看常遇见之一——BS架构VS CS架构_???Sir的博客-程序员宅基地

常看常遇见之一——BS架构VS CS架构1.BS架构 即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,形成所谓3-tier结构,用浏览器打开的系统,靠浏览器才能访问的程序 ;2.CS架构 即Clien...

免杀WebShell在线生成_weixin_34233618的博客-程序员宅基地

简直太完美了,ASP和PHP都有http://www.zjjv.com/本文转自fatshi51CTO博客,原文链接:http://blog.51cto.com/duallay/1670615 ,如需转载请自行联系原作者 ...

如何使多云的数据治理更具可管理性和一致性_weixin_34192732的博客-程序员宅基地

  对于在多云环境中运营业务的组织来说,数据治理和挑战的复杂性是巨大的。数据治理既具有内在的复杂性,又具有挑战性,因为它不会增加收入。这使得在组织内创建和执行一个有效的政策很难获得认可。因此,组织在多云环境中的数据治理既面临挑战,也面临复杂性。解决这一问题对组织的长期发展至关重要,没有适当的政策可能导致灾难性的后果。  除了那些在多云环境中运营具有严格的数据治理法律和法规(医...

随便推点

使用undrop-for-innodb工具在无备份的情况下恢复mysql表_weixin_34217711的博客-程序员宅基地

背景    最近一个朋友说,程序误删了一张表,但是没有备份。我一心想,这不是凉凉了。因为按照正常的情况,如果误删了表,在有备份的情况下,可以通过备份+binlog的方式找回数据。如果没有备份的话,想找回数据基本是没什么希望了。本着死马当活马医的态度,在网上google了一阵,发现了竟然还有undrop-for-innodb这一个工具。    undrop-for-innodb工具按照描述,是可以实...

HDU 5950 Recursive sequence 递推转矩阵_dianxue5904的博客-程序员宅基地

Recursive sequenceTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2882Accepted Submission(s): 1284Problem DescriptionFarmer John ...

20145222黄亚奇《Java程序设计》实验三实验报告_weixin_34221332的博客-程序员宅基地

http://www.cnblogs.com/jokebright/转载于:https://www.cnblogs.com/huangyaqi/p/5433344.html

multiprocessing.Pool_「已注销」的博客-程序员宅基地

from multiprocessing import Pooldef f(x): print(x*x)if __name__ == '__main__': p = Pool(5) p.map(f, [1, 2, 3, 4, 5, 6, 7, 8])

EL表达式_dyonline2012的博客-程序员宅基地

1、EL表达式简介(1)EL 全名为Expression Language。EL主要作用:(2)获取数据:EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)(3)执行运算:利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻

点击获取li下标的几种方式_dinglun7160的博客-程序员宅基地

应用闭包时回溯了下几种关于获取li下标的方式1.点击获取li下标 ———— 闭包2.点击获取li下标 ———— es6 let3.点击获取li下标 ———— 给元素添加下标属性index4.点击获取li ———— 父级事件监听  思考了下,要获取下标,暂时只能想到添加下标的方法,因此未列出遇到的问题...

推荐文章

热门文章

相关标签