Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 418|回复: 0

[jsp学习]EL表达式取servlet中的对象总结

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-2 12:22:01 | 显示全部楼层 |阅读模式
    1. EL的语法:
    2. 比如: request.setAttibute("person",Person);
    3. 在JSP页面中如何访问person呢?
    4. <html>
    5. <body>
    6.   the person is: ${person}
    7. </body>
    8. </html>
    9. 如何访问一个对象的属性呢?
    复制代码

        比方说一个对象 Person 的 name属性

    ${person.name}或者${person["name"]}

    两者是等价的。
    记住"."能做到的,"[]"也能做到。反过来可就不一定了[/code]
        E表达式:

    一、下面是第一个最简单的表达式例子:
    建立Servlet 文件,名称为:Hello.java 内容如下:
    request.setAttribute("hello","hello");
    request.getRequestDispatcher("index.ftp").forward(request,response);
    建立index.ftp 文件,内容如下:
    ${hello}


    二、作用域的访问对象
    pageScope requestScope sessionScope applicationScope
    获取的机制如何?
    上面ftp的代码改写成:
    ${requestScope.hello}等价于${hello}
    如果明确访问对象,直接到访问对象中找,否则就从最小的作用域开始找直到applicationScope,
    最终把结果返回


    三、举例说明
    先建立实体类
    Student.java    School.java
    1、实例1
    Hello.java
    Student stu=new Student();
    stu.setName("张三");
    request.setAttribute("student",stu);
    Index.jsp
    ${requestScope.student["name"]}或${requestScope.student.name}


    2、实例2
    Hello.java
    School school=new School();
    Student stu=new Student();
    stu.setName("张三");
    school.setStudent(stu);
    request.setAttribute("school",school);
    Index.jsp
    ${requestScope.school.student["name"]}或${requestScope.school.student.name}


    3、实例3
    Hello.java
    ArrayList list=new ArrayList();
    Student stu=new Student();
    stu.setName("张三");
    Student stu2=new Student();
    stu2.setName("张三2");
    list.add(stu);
    list.add(stu2);
    request.setAttribute("list",list);
    Index.jsp
    ${requestScope.list["1"].name}



    访问不同的对象实例:

    1.访问一个普通的java bean, 假设 一个对象 Person 有name属性,

    Person person=new Person();
    先request.setAttibute("person",person);
    显示name :${person.name}


    2.访问数组,利用下标直接访问

    String s[]={"1","2"};
    request.setAttribute("s",s);
    显示s[1]

    ${s[1]}或者${s["1"]}


    3.访问 List,直接用下标进行访问

    ArrayList list=new ArrayList();
    list.add("1");
    list add("1");
    request.setAttribute("list",list);



    显示list[1]:

    ${list[1]}或者${list["1"]}

    注意:这里你可能会举得奇怪,为什么数组和list下标可以用数字或者引号加数字
    其实在解析的时候,[]里面的索引都是被强制转成int的,索引随便你加不加引号吧



    4.访问一个Map,用.或者[]访问
    Map map=new Map();
    map.put("one","no.1");
    map.put("two","no.2");
    request.setAttribute("map",map);


    显示map("one"):
    ${map.one}  或者${map["one"]}

    注意:这里千万不能用 ${map[one]} 因为下标里面的东西如果不加引号,它就相当于
    一个属性,容器编译的时候就会去寻找one属性,相当于${one},找不到,当然就错了
    中括号里面是可以嵌套表达式的,但是,中括号里面的表达式是去掉${}的

    例如:

    ${test1[test2[2]] 正确 而 ${test1[${test2[2]}]编译报错



    EL隐含对象

    你可能又会问什么事隐含对象?隐式对象就是事先准备好的,你可以直接访问,不必知道是怎么来的。
    就跟JSP中的隐含对象 request,response一样, 你直接用就行,没人会说你的,放心吧

    EL共有11个隐含对象


    pageContext

    对应于 javax,servlet.jsp.PageContext对象,利用 pageContext,可以访问
    ServletContext,Request,Response,Session,例如:
    ${pageContext.servletContext}
    ${pageContext.request}
    ${pageContext.response}
    ${pageContext.session}



    pageScope

    类型是Map,将页面范围内的属性名和它的值进行映射。主要是用于获取页面范围的属性值

    例如上面的person
    ${pageScope.person}


    requestScope

    类型是Map,用于直接获得请求访问内的属性值

    例如
    ${requestScope,user}



    sessionScope

    跟上面的requestScope类似,只是范围不同,它是会话范围内的属性

    例如
    ${sessionScope.user}



    applicationScope

    跟上面的requestScope类似,只是范围不同,它是应用程序范围内的属性

    例如
    ${applicationScope.user}


    param

    类型是Map,就是请求中参数属性
    例如 http://www.janeky.com/request.jsp?name=jiange

    获得name
    ${param.name}

    一个请求有多个参数值

    paramValues

    类型Map
    例如 http://www.janeky.com/request.jsp?name=jiange&name=jiange2
    ${paramValues.name[0]}
    ${paramValues.name[1]}



    headerValuess

    用于获得请求报头的值,等同于调用ServletRequest.getHeader()


    cookie

    这个很好用。以前你在jsp中都是先 requst.getCookies();
    for()cookies.getName().equal("name");

    现在一句话就搞定了
    ${cookie.name.value}



    initParam
    用于访问上下文的初始化参数。在web.xml中<context-param>
    等价于 application.getInitParameter("");



    命名变量的查找
    你有时偷懒,直接${name}
    这时候程序就忙了,它按照page,request,session,application范围帮你找
    很多时候命名冲突就麻烦了。你最好限定范围


    ${requestScope.name}

    EL还可以进行简单的运算操作呢

    算术运算

    +
    -
    *
    /(或者div) ${3/2}或者${3div2} //主要这里的两个操作数都会被强制转型double,结果是1.5
    %(或者mod)



    逻辑运算
    &&(或者and)  ||(或者or)!(或者not)



    关系操作符

    == eq
    != ne
    < lt
    > gt
    <= le
    >= ge

    还觉得EL不够强大,那自己去定义函数吧。个人觉得这样没必要。还是把方法告之一下


    1.编写有一个公共静态方法的Java类
    2.编写一个标记库描述文件(Tag Library Descriptor,TLD)
    3.在JSP中放一个taglib指令
    4使用EL调用函数[/code]
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-1 15:30 , Processed in 0.452016 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表