EL表达式基础
相关的代码演示
JSP页面:
<%@ page import="cn.servlet.bean.Usera" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%--
Created by IntelliJ IDEA.
User: linyuqi
Date: 2019-07-08
Time: 21:32
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h3>EL表达式的学习:</h3>
<hr>
<b>传统jsp方式:</b><br>
<%--使用传统方式获取并输出数据--%>
<%=request.getParameter("name")%>
<%=request.getAttribute("str")%>
<%=((Usera)request.getAttribute("user")).getAddress().getTown()%>
<%=((ArrayList)request.getAttribute("list")).get(2)%>
<%=((Usera)((ArrayList)request.getAttribute("list1")).get(0)).getAddress().getCity()%>
<%=((HashMap)request.getAttribute("map")).get("b")%>
<%=((Usera)(((HashMap)request.getAttribute("map2")).get("q"))).toString()%>
<br><b>EL表达式:</b><br>
${param.name}
${str}
${user.address.town}
${list[2]}
${list1[0].address.city}
${map.b}
${map2.q}
<%--
问题:
在servlet进行请求处理后,使用作用域对象作为数据流转的载体,将数据流转给指定的jsp
如何在jsp中获取在jsp中的数据呢
使用:
传统方式:在jsp页面使用Java脚本段语
缺点:导入包 需要强转 获取数据的代码过于麻烦
EL表达式:(只能获取作用中的数据)
作用:获取作用域对象中的数据:request session pageContext application
语法:${表达式}
表达式:
request: param.键名 返回值
paramvalues.键名 返回数组
通过setAttribute存储的数据:
${键名.属性名}
作用域查找顺序:
默认查找舒徐:
pageContext request session application 从小到大
指定查找:pageScope requestScope sessionScope applicationScope
EL表达式逻辑运算:
逻辑表达式:
算术表达式:
关系表达式:
空值判断:${empty 键名}
作用:判断键名的对象是否存有数据
注意:+表示加法运算,不表示字符连接,使用EL表达式进行字符串连接会报错。
EL获取请求头和cookie数据:
请求头数据:
${header} 返回所有的请求头数据
${header["键名"]} 返回指定的键名的请求头数据
${headerValues["键名"]} 返回指定的键名(同键不同值)的值的数组。
获取cookie数据:
${cookie} 返回存储了所有的cookie对象的map集合
${cookie.键名} 返回指定的cookie对象
${cookie.键名.name} 返回指定的cookie对象存储的数据的键名
${cookie.键名.value} 返回指定的cookie对象存储的数据的值
注意:取得数据不存在时,不会报错,不显示。
--%>
<h3>获获取请求头和cookie数据</h3>
<hr>
${header}<br><br>
${header["accept"]}<br><br>
${headerValues["accept"][0]}
<br><br><br>
${cookie}
${cookie.name}
${cookie.name.value}
<html>
<head>
<title>EL学习</title>
</head>
<body>
</body>
</html>
Sevlet页面:
package cn.servlet.servlet;
import cn.servlet.bean.Address;
import cn.servlet.bean.Usera;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class ELServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("enter ELServlet:");
//设置编码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//获取信息
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
System.out.println(name+":"+pwd);
//处理请求
//string
req.setAttribute("str","天气不错!");
//对象
Usera usera =new Usera(1,"Linyuqi","打游戏",new Address("陕西","西安","长安"));
req.setAttribute("user",usera);
//集合
//list
List<String> list = new ArrayList<String>();
list.add("qwer");list.add("asdf");list.add("zxcv");
req.setAttribute("list",list);
List<Usera> list1 = new ArrayList<Usera>();
Usera usera1 =new Usera(2,"林雨奇","听音乐",new Address("山西","太原","乐市"));
list1.add(usera1);
req.setAttribute("list1",list1);
//map
HashMap<String,String> hashMap = new HashMap<String,String>();
hashMap.put("a","qw");hashMap.put("b","gh");
req.setAttribute("map",hashMap);
HashMap<String,Usera> hashMap1=new HashMap<String,Usera>();
hashMap1.put("q",usera);hashMap1.put("w",usera1);
req.setAttribute("map2",hashMap1);
req.getRequestDispatcher("el.jsp").forward(req,resp);
return;
}
}
Usera对象类:
package cn.servlet.bean;
import java.util.Objects;
public class Usera {
private int uid;
private String name;
private String fav;
private Address Address;
public Usera(int uid, String name, String fav, cn.servlet.bean.Address address) {
this.uid = uid;
this.name = name;
this.fav = fav;
Address = address;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFav() {
return fav;
}
public void setFav(String fav) {
this.fav = fav;
}
public cn.servlet.bean.Address getAddress() {
return Address;
}
public void setAddress(cn.servlet.bean.Address address) {
Address = address;
}
@Override
public String toString() {
return "Usera{" +
"uid=" + uid +
", name='" + name + '\'' +
", fav='" + fav + '\'' +
", Address=" + Address +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Usera usera = (Usera) o;
return uid == usera.uid &&
name.equals(usera.name) &&
fav.equals(usera.fav) &&
Address.equals(usera.Address);
}
@Override
public int hashCode() {
return Objects.hash(uid, name, fav, Address);
}
}
Address类:
package cn.servlet.bean;
import java.util.Objects;
public class Address {
private String province;
private String city;
private String town;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getTown() {
return town;
}
public void setTown(String town) {
this.town = town;
}
@Override
public String toString() {
return "Address{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
", town='" + town + '\'' +
'}';
}
public Address(String province, String city, String town) {
this.province = province;
this.city = city;
this.town = town;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
return province.equals(address.province) &&
city.equals(address.city) &&
town.equals(address.town);
}
@Override
public int hashCode() {
return Objects.hash(province, city, town);
}
}
JSTL基础
相关代码演示
<%@ page import="java.util.ArrayList" %><%--
Created by IntelliJ IDEA.
User: linyuqi
Date: 2019-07-09
Time: 10:54
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL学习</title>
</head>
<%--
JSTL的学习:
作用:提高在jsp中的逻辑代码的编写效率,使用标签。
使用:
核心标签库(重点):
1、导入jar包
2、声明jstl标签库的引入:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3、内容:
基本标签:
3.1、<c:out value="数据" default="默认值"></c:out>
数据可以是常量值也可以是EL表达式
作用:将数据输出给客户端
3.2、<c:set var="存储的键名" value="存储的值" scope="存入的作用域对象"></c:set>
作用:存储数据到作用域对象中
3.3、<c:remove var="键名" scope="作用域对象"></c:remove>
作用:删除作用域中指定键的数据
注意:如果在不指定作用域对象的情况下,会删除所有符合键名的
逻辑标签:
3.4 <c:if test="EL表达式的逻辑运算">
前端代码
</c:if>
作用:进行逻辑判断,相当于Java代码的单分支判断
注意:逻辑判断标签需要依赖于EL表达式的逻辑运算,也就是表达式中涉及到的数据必须
从作用域中获取。
3.5、<c:choose>
<c:when test="EL表达式的逻辑运算">
执行内容
</c:when>
.....
<c:otherwise>
执行内容
</c:otherwise>
</c:choose>
作用:用来进行多分支条件的逻辑判断,类似于Java的多分支语句
注意:条件成立只会执行一次 都不成立则会执行otherwise
循环标签:
3.6常量循环:
<c:forEach begin="开始位置" end="结束位置" step="步长" varStatus="we">
we-----${we.index}----${we.count}----${we.first}----${we.last}<br>
</c:forEach>
作用:循环内容进行处理
varStatus:声明变量记录每次循环的数据(角标,次数,是否是第一次循环,是否是最后一次循环)
${we.index}----${we.count}----${we.first}----${we.last}
注意:数据存储在作用域中,需要用EL表达式获取
动态循环:
<c:forEach items="${list}" var="str">
${str}
</c:forEach>
items:声明要遍历的对象,结合EL表达式获取对象
var:声明变量记录每次循环的结果,存储在作用域中,需要使用EL表达式获取。
格式化标签库:
日期:
数字:
SQL标签库:
函数标签库:
XML标签库:
--%>
<h3>JSTL基本标签</h3><hr>
<%--输出数据--%>
<c:out value="Linyuqi" default="Linyuqi"></c:out>
<%--存储数据到作用域中--%>
<c:set var="hello" value="Hello Request" scope="request"></c:set>
<%--指定范围取数据--%>
<c:out value="${requestScope.hello}" ></c:out>
<%--移除数据--%>
<c:remove var="hello" scope="request"></c:remove>
<h3>JSTL逻辑标签</h3><hr>
<c:set var="h" value="4" scope="request"></c:set>
<c:if test="${requestScope.h>3}">
<c:out value="今天很凉快!" ></c:out>
</c:if>
<c:choose>
<c:when test="${requestScope.h<3}">
<i>继续加油!</i>
</c:when>
<c:when test="${requestScope.h==3}">
<b>你及格了!</b>
</c:when>
<c:when test="${requestScope.h>3}">
<b><b>棒棒哒</b></b>
</c:when>
</c:choose>
<h3>JSTL循环标签</h3><hr>
<h4>常量循环</h4>
<c:forEach begin="1" end="5" step="1" varStatus="we">
we-----${we.index}----${we.count}----${we.first}----${we.last}<br>
</c:forEach>
<h4>动态循环</h4>
<%--存储数据--%>
<%
ArrayList arrayList = new ArrayList();
arrayList.add("abc");arrayList.add("efg");arrayList.add("hjk");
request.setAttribute("list",arrayList);
%>
<c:forEach items="${list}" var="str">
${str}
</c:forEach>
<body>
</body>
</html>
总结
EL负责作用域数据的调用,JSTL郭帆jsp页面书写,简化代码,整洁页面。