登录 or

JSP之EL表达式

传统方式获取request中的值(object对象)
定义两个实体类:entity-Address.java  User.java
在ElServlet.java中
   //request创建user对象信息
        User user = new User("1","张三",new Address("上海市","上海市","黄浦区"));
        request.setAttribute("user",user);

在el.JSP中增加
city:<%=((User)request.getAttribute("user")).getAddress().getCity()%>
name:<%=request.getParameter("name")%>
pwd:<%=request.getParameter("pwd")%>
aa:<%=request.getAttribute("aa")%>
city:<%=((User)request.getAttribute("user")).getAddress().getCity()%>
town:<%=((User)((ArrayList)request.getAttribute("list")).get(1)).getAddress().getTown()%>
map:<%=((HashMap)request.getAttribute("map")).get("china")%>
map2:<%=((User)((HashMap)request.getAttribute("map2")).get("a1")).getAddress().getProvince()%>
<br/>
访问:http://localhost:8080/el/el

使用传统方式获取request对象中的值有以下几个缺点
1.必须导入包
2.进行类型的强制转换
3.层次结构比较复杂

解决办法:使用EL表达式
EL(Expression language)让jsp书写起来更加方便
语法结构
${expression}
提供.和[]两种运算符来获取数据,
用.来引用属性,用[]来获取指定索引位置的对象

<%--EL表达式--%>
name:${param.name}
pwd:${param.pwd}
aa:${aa}
city:${user.address.city}
town:${list[1].address.town}
map:${map.china}
map2:${map2.a1.address.province}

作用域:
pageContext------>request----->session------>application:相当于ServletContext对象,一个web项目只有一个对象,存储着所有用户的共享数据,从服务器开始到服务器结束

获取作用域的顺序:(导入jsp的jar包)
从小的作用域开始查询,如果找到则返回对应的值,不接着向大范围寻找数据
当4种作用域中存在相同的key的属性时,可以通过pageScope,requestScope,sessionScope,applicationScope

EL表达式可以进行算术和关系运算
直接在表达式中写入算法操作即可,如果是关系运算,返回true或者false
注意:在el表达式中的+表示加法操作而不是字符串连接符
如:${1+"2"} //页面会显示3
而${2+"abc"}//页面会报错

<%--获取请求头--%>
header:${header}<br>
${header["host"]}<br>
${headerValues["accept-language"][0]}<br>
<%--获取cookie--%>
cookie:${cookie}<br>
${cookie.JSESSIONID}<br>
${cookie.JSESSIONID.name}<br>
${cookie.JSESSIONID.value}<br>
<%--逻辑运算--%>
${true&&false}<br>
${true&&true}<br>
${true||false}<br>
${true||true}<br>



总结EL表达式作用
1.使用EL表达式获取请求数据
1.1获取用户请求数据
1.2获取请求头数据
1.3获取cookie数据

2.使用EL表达式获取作用域数据
2.1获取作用域数据
2.2作用域查找顺序
2.3获取指定作用域中的数据

3.使用EL表达式进行运算
3.1算术运算
3.2关系运算
3.3逻辑运算

0 个评论

要回复文章请先登录注册