深入了解EL表达式

您所在的位置:网站首页 el表达式empty 深入了解EL表达式

深入了解EL表达式

2024-01-29 08:39| 来源: 网络整理| 查看: 265

EL表达式 1、EL概述 1.1 引入

问题:

按照前面文章中提到的代码实现方式,如果用户登录失败,我们不用再单独书写一个LoginErrorServlet,直接新创键一个login.jsp页面即可。

但是我们先访问login.html,然后错误在跳转到login.jsp页面,那么我们是否可以直接访问login.jsp页面,而不用再使用login.html页面。这样更为简单。

在浏览器中直接访问login.jsp页面:

jsp改造登录案例EL引入.png

我们发现最开始访问jsp页面,页面显示null,原因是最开始访问request中的msg没有任何数据,所以是null。那么有的同学就会想在login.jsp页面中使用java代码对request中的msg进行判断。虽然可以实现,但是脚本表达式在JSP页面上书写起来比较麻烦。而在页面上取值在开发中使用的又比较多,所以Sun公司为了简化在页面上的取值操作。我们这里有更为简单的方案,就是我们下面要讲解的EL表达式。

【需求】使用EL表达式改造login.jsp页面的取值操作

提示:EL表达式从request域对象中取值:${request域对象中的key}

温馨提示:

原来JSP页面中的脚本表达式被EL表达式取代。

【代码示例】login.jsp

               登录页面 ​                            登录页面              ${msg}                        登录     ​

说明:

1)在jsp页面中使用EL表达式可以简化Java代码。

2)EL表达式从域对象取值,如果域对象中有值则获取,没有值则不获取。

1.2 EL简介 EL全称: Expression Language 中文的意思是EL表达式。 作用:代替jsp中脚本表达式的功能,简化对java代码的操作,从【域对象】中取值。 EL表达式简化方式取值   EL语法表达式的格式:${域对象中的key} 2、EL取值 2.1 JSP的四大域对象

JSP的四大域对象指的是:page域,request域,session域,application域。我们通常使用EL表达式从这4个域对象中取值。以下是这4个域对象的详细信息:

域对象在EL中的对象名称在servlet中的对象名说明page域pageScopepageContext,属于javax.servlet.jsp.PageContext类的对象page域指的是当前JSP页面,其中存储的数据只在当前页面有效,因为jsp本质是servlet,所以page域只在一个servlet中有效。request域requestScoperequest,属于javax.servlet.http.HttpServletRequest接口的对象request域:一次请求或请求链中request域session域sessionScopesession,属于javax.servlet.http.HttpSession接口的对象session域:一次会话过程中,session域application域applicationScopeapplication,属于javax.servlet.ServletContext接口的对象application域:服务启动后整个项目对应的ServletContext域 2.2 EL表达式从四大域中取值

EL表达式从指定的域中取值的方式如下:

域对象取值方式page域${pageScope.key}request域${requestScope.key}session域${sessionScope.key}application域${applicationScope.key}

【需求】

在一个JSP页面中,使用脚本片段分别向page域、request域,session域,application域和中存储数据; 使用EL表达式从这4个域中取值;

【参考代码】

   Title         page中取值:${pageScope.pageValue}   request中取值:${requestScope.requestValue}   session中取值${sessionScope.sessionValue}   application中取值${applicationScope.applicationValue}

jsp中的四大域对象.png

2.3 EL表达式搜索数据

EL表达式取值的时候也可以不指定域,如果取值的时候不指定域对象。就会按照从page域--->request域--->session域--->application域从小到大逐级根据key值查找。

   Title         page中取值:${pageScope.pageValue}   request中取值:${requestScope.requestValue}   session中取值${sessionScope.sessionValue}   application中取值${applicationScope.applicationValue}   相同的key:${value}

1534157015838.png

2.4 EL表达式从cookie中取值

之前我们在学习cookie的时候,做过记住用户名和密码的案例,但是前端页面我们并没有实现。因为我们还没有学习使用什么技术在前端如何将cookie中的数据取出,而今天我们学习了EL表达式,我们就可以实现前端记住用户名和密码的案例了。

new Cookie(name,value)

使用EL表达式获取cookie中的值格式:(掌握)

cookie.cookie的name名.value 例如: Cookie cookieName = new Cookie("username","锁哥"); cookie.username.value获取的值是锁哥。

创建一个登陆的jsp页面:

   Title                                            记住用户名和密码     ​    Title               用户名:       密码:            

在servlet生成cookie LoginServlet.java

@WebServlet("/loginServlet") public class LoginServlet extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);   }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        //获取用户名和密码        String username = request.getParameter("username");        String password = request.getParameter("password");        //创建cookie        Cookie cookieName = new Cookie("username",username);        Cookie cookiePsw = new Cookie("password",password);        response.addCookie(cookieName);        response.addCookie(cookiePsw);   } }

温馨提示:要去访问Java代码LoginServlet,才能将cookie存储到浏览器中

效果图:

先访问:http://localhost:8080/login.jsp也面,点击登录按钮,访问了LoginServlet,在LoginServlet中 生成cookie。

再访问login.jsp页面,使用EL表达式获取用户名和密码

http://localhost:8080/login.jsp

EL获取cookie中的用户名和密码.png

3、EL运算符

EL表达式获取到值之后可以直接通过运算符进行运算。EL表达式的运算符主要有以下几类:算术运算,关系运算,逻辑运算,三元运算,empty运算符。

【素材】页面数据准备demo08.jsp

3.1 算术运算

顾名思义,算术运算是进行算术运算的符号,和java中的一致。主要包括:加,减,乘,除,取余。具体使用如下表:

运算符说明使用示例结果+加${n1+n2}70-减${n1-n2}10*乘${n1*n2}1200/或div除${n1/n4}4%或mod取余${n1%n4}0

【代码示例】demo08.jsp代码片段

算数运算:   n1+n2:${n1 + n2}   n1-n3:${n1 - n3}   n3-n4:${n3-n4}   n2*n3:${n2 * n3}

效果图:

EL算术运算符.png

注意:在进行算术运算的时候,EL表达式会对字符串中的内容进行判断,如果都是数值,那么会转化为数值再进行算术运算,如果含有非数字类型,则会报异常。

3.2 关系运算

关系运算符是判断两个数据的大小关系的,关系运算符有:==,!=,=。具体使用方法如下:

运算符说明使用示例结果== 或 eq等于 equal${n1 == n2}false!= 或ne不等于 not equal${n1 != n2}true> 或 gt大于 greater than${n1 > n2}true>= 或ge大于等于 greater than or equal${n1 >= n2}true=n2?"正确":"错误!"} 3.5 empty运算

empty运算符表示判断数据是否为空,如果为空返回true。对以下数据运算返回true:

字符串:""; 空集合(size=0):List list = new ArrayList(); 空对象(null):Student stu = null;String s=null;Object obj=null;

【代码示例】 demo08.jsp

  empty:   ${empty str}   ${empty student}     ${not empty list}

页面效果:

image.png

demo08.jsp完整代码

   运算符     算数运算:   n1+n2:${n1 + n2}   n1-n3:${n1 - n3}   n3-n4:${n3-n4}   n2*n3:${n2 * n3}   关系运算符:   n1==n2:${n1==n2}   n3>=n4:${n3>=n4}   n1!=n2:${n1 ne n2}   逻辑运算符:   false && true:${false && true}   false || true:${false || true}   !false:${!false}     三元运算符:   ${n1>=n2?"正确":"错误!"}     empty:   ${empty str}   ${empty student}     ${not empty list}

效果图:

EL表达式运算符最后版本.png

【注】not empty可以用在EL表达式中,判断非空的情况。

EL表达式小结:

EL:Expression Language;

EL语法:${ }

作用:简化脚本表达式的取值,简化 ===> ${name}

jsp的四大域对象

page域:pageContext pageContext.setAttrubute() pageContext.getAttribute() JSP特有 作用范围:当前的JSP页面 requst域:request request.setAttribute() request.getAttribute() 作用范围:一次请求和响应之间 session域: session session.setAttribute() session.getAttribute() 作用范围:会话期间(多次请求和响应) servletContext域:application application.setAttribute() application.getAttribute() 作用范围:整个项目;

jsp从四大域中取值(指定域对象):

${pageScope.name} ${requestScope.name} ${sessionScope.name} ${applicationScope.name}

JSP搜索域对象中的值:page --- request --- session --- servletContext

${name}

运算

算术运算

关系运算

逻辑运算:&& || !

三元运算

empty运算:empty not empty

空字符串:"" 空对象:null 空集合:list.size = 0;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3