深入了解EL表达式 |
您所在的位置:网站首页 › el表达式empty › 深入了解EL表达式 |
EL表达式
1、EL概述
1.1 引入
问题: 按照前面文章中提到的代码实现方式,如果用户登录失败,我们不用再单独书写一个LoginErrorServlet,直接新创键一个login.jsp页面即可。 但是我们先访问login.html,然后错误在跳转到login.jsp页面,那么我们是否可以直接访问login.jsp页面,而不用再使用login.html页面。这样更为简单。 在浏览器中直接访问login.jsp页面: 我们发现最开始访问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}EL表达式取值的时候也可以不指定域,如果取值的时候不指定域对象。就会按照从page域--->request域--->session域--->application域从小到大逐级根据key值查找。 Title page中取值:${pageScope.pageValue} request中取值:${requestScope.requestValue} session中取值${sessionScope.sessionValue} application中取值${applicationScope.applicationValue} 相同的key:${value}之前我们在学习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表达式获取到值之后可以直接通过运算符进行运算。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表达式会对字符串中的内容进行判断,如果都是数值,那么会转化为数值再进行算术运算,如果含有非数字类型,则会报异常。 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}页面效果: 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}效果图: 【注】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 |