一. Jsp 基础
- Jsp定义 :Java Server Pages 特殊的页面,既可以定义html标签,也可以定义Java代码,用于简化书写,实现页面的动态效果
- 原理:Jsp本质上就是一个Servlet
- Jsp脚本:Jsp定义Java代码的方式
- <% Java代码 %>:定义的Java代码,在service()方法中
- <%! 代码 %>:定义的Java代码,在转换的Java类成员位置上,比较少用,容易产生线程安全问题
- <%= 代码 %>:定义的Java代码,会输出到页面上
- Jsp的内置对象:不需要创建就可以直接使用(service()中可以使用的对象)
- Request :request.getContextPath() 获取虚拟目录
- Response
- Out :out.print () 输出流(类似response.getWriter().write.
二. JSP指令
- 作用:配置JSP页面,导入资源文件
- 格式 <%@ 指令名称 属性名1=属性值1 … %>
- 分类
- page : 配置Jsp页面
- taglib :导入资源(JSTL标签库)
- include :页面包含,导入页面的资源文件
- page指令
- contentType :相当于response.setContentType() , 设置响应体的MIME类型和字符集
- errorPage: 页面发生异常后跳转到指定的页面
三. JSP内置对象
- pageContext : 当前页面共享数据,获取其他内置对象
- request :一次请求间共享数据(转发)
- session :一次会话间共享数据
- application (ServletContext):所有用户共享数据
- response :响应对象
- page :当前页面对象 (this)
- out :输出对象,数据输出到页面上
- config :Servlet的配置对象
- exception :异常对象
四. MVC开发模式
- Model : 模型 ,完成具体的业务操作,如查询数据库(JavaBean)
- View : 视图 (JSP),展示数据
- Controller :控制器,获取用户输入,调用模型,将数据交给视图展示(Servlet)

五. EL 表达式
- 作用 :替换和简化jsp页面中Java代码的编写(Expression language)
- 语法:${ 表达式 }
- 忽略表达式的方法:
- isELIgnored="true"
- ${ 表达式 }
- EL从域对象中获取值 ${ 域名称. 键名 }
- pageScope ---> pageContext
- requestScope ----->request
- sessionScope ------> session
- applicationScope ----> application(ServletContext)
- 从域对象中获取值 ${ 键名 }
- JSP页面中的隐式对象,pageContext,动态获取虚拟目录
- ${pageContext.request.contextPath}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式获取list集合中的元素</title>
</head>
<body>
<%
User usr=new User("安宰贤",43,new Date());
List list=new ArrayList();
list.add("新西游记");
list.add("李寿根");
list.add("殷志源");
list.add(usr);
request.setAttribute("list", list);
Map map=new HashMap();
map.put("name", "李四");
map.put("gender", "男");
request.setAttribute("map", map);
%>
${list[0]}<br>
${list[1]}<br>
${list[2]}<br>
${list[3].name}<br>
${map.gender}
${map.name}
${pageContext.request.contextPath}
</body>
</html>
六. JSTL 标签
- JSTL: Java标准标签库
- 作用:替换和简化jsp页面中Java代码的编写
- 使用步骤
- 添加jar包,引入标签库(taglib指令) <%@ taglib %>
- 常用的JSTL标签
- if
- choose :相当于java 的switch标签
- foreach
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL的if标签</title>
</head>
<body>
<%--首先在域中添加一些数据--%>
<%
List list = new ArrayList();
list.add("新西游记");
request.setAttribute("list", list);
request.setAttribute("num", 3);
%>
<%--test必须属性,接收布尔类型,如果为true,显示标签体的内容,不为真,不显示--%>
<c:if test="${not empty list}">
${list[0]} <%-- 新西游记--%>
</c:if>
<c:if test="${num%2!=0}">
${num}是奇数 <%-- 3是奇数--%>
</c:if>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSTL的choose标签</title>
</head>
<body>
<%--用choose标签完成星期的选择--%>
<%
request.setAttribute("num", 5);
%>
<c:choose>
<c:when test="${num==1}">周一好好学习</c:when>
<c:when test="${num==2}">周二好好学习</c:when>
<c:when test="${num==3}">周三好好学习</c:when>
<c:when test="${num==4}">周四好好学习</c:when>
<c:when test="${num==5}">周五看新西游记</c:when>
<c:when test="${num==6}">周六好好学习</c:when>
<c:when test="${num==7}">周日去爬香山</c:when>
<c:otherwise>GO DIE 吧</c:otherwise>
</c:choose>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL的foreach遍历</title>
</head>
<body>
<%--begin 开始值,step 步长 ,var 临时变量--%>
<c:forEach begin="1" end="10" var="i" step="2">
${i}<br>
</c:forEach>
<%
List list = new ArrayList();
Collections.addAll(list, "新西游记", "李寿根", "殷志源", "安宰贤", "宋旻浩");
request.setAttribute("list", list);
%>
<%--
varStatus :循环状态对象
items: 容器对象
--%>
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}<br>
</c:forEach>
</body>
</html>
<%@ 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>
<body>
<%--遍历存有user对象的list集合 ,并展示在表格中--%>
<%
List<User> list=new ArrayList<>();
User u1=new User("殷志源",43,new Date());
User u2=new User("宋旻浩",27,new Date());
User u3=new User("安宰贤",30,new Date());
Collections.addAll(list, u1,u2,u3);
request.setAttribute("list", list);
%>
<table border="1" width="500" align="center">
<tr>
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>生日</td>
</tr>
<c:forEach items="${list}" var="user" varStatus="s">
<c:if test="${s.count%2==0}">
<tr bgcolor="#5f9ea0">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birstr}</td>
</tr>
</c:if>
<c:if test="${s.count%2==1}">
<tr bgcolor="#ff7f50">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birstr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>