一、表达式语言(EL)
EL(Expressing Language)
目的:从作用域中获取指定属性名的共享数据
语法:${属性名} ,属性名没有引号
EL从作用域中查询指定属性名的共享数据,是有查找顺序的,按照 page,request,session,application 顺序查找
EL中的内置对象(隐式对象):
(来源:zdwzzu2006 的 CSDN博客)
四大作用域的内置对象:
浏览器显示为:
示例:在 JSP 中显示 Person 类中的属性
public class Person {
private String username = "Lucy";
private int age = 20;
private String[] hobby = { "Java", "Basketball", "Game" };
private List<String> list = Arrays.asList("list1", "list2", "list3");
private Map<String, Object> map = new HashMap<String, Object>() {
{
this.put("school", "NEUQ");
this.put("English Name", "Cherry");
this.put("year", "2019");
}
};
@Override
public String toString() {
return "Person [username=" + username + ", age=" + age + ", hobby="
+ Arrays.toString(hobby) + ", list=" + list + ", map=" + map
+ "]";
}
}
@WebServlet("/el")
public class ELServlet extends HttpServlet{
private static final long serialVersionUID = 1849588764052384563L;
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Person p = new Person();
System.out.println(p);
//把person对象存放在request作用域中,共享给JSP
req.setAttribute("person", p);
req.getRequestDispatcher("/el/el.jsp").forward(req, resp);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>EL页面</h3>
${person}
<br/>username:${person.username}
</body>
</html>
此时会报错:
意思是找不到属性名为 username 的属性,因为此时在Servlet中,username是字段而不是属性,我们加上 @Setter 构建出setter方法,又继续报错:
因为要在JSP中获取值,应该在 Person 类中暴露 getter 方法
<body>
<h3>EL页面</h3>
<br/>username:${person.username}-->${person["username"]}-->${person.getUsername()}
<br/>age:${person.age}
<br/>hobbys:${person.hobby[0]}
<br/>list:${person.list[2]}
<br/>map:${person.map}
<br/>map:${person.map.school}
<br/>map:${person.map["English Name"]}
</body>
结果为:
总结:
其他
二、JSTL
JSTL(Java Standard Tag Library):Java标准标签库
使用:
- 加入 jar 包:jstl.jar (下载)和 standard.jar (下载)
- 通过JSP的 taglib 指令,引入标签库: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
常用的 JSTL 标签
- 条件判断语句
- <c:if/> 标签 (单条件判断)
- 单标签和双标签的区别:
3.<c:choose/> 标签 (多条件判断)
2.循环迭代标签 <c:foreach/>
3.时间