JSP
什么是JSP
SP全称是Java Server Pages,是一种用来代替Servlet的技术,其本质是一个Servlet。JSP允许同时编写Java代码和Html代码,使用JSP即可以显示界面,又可以动态获取Java中数据。
JSP可以写html+el表达式+JSP脚本
JSP原理
JSP在运行会先编译成.java文件,再编译成class文件,最后再运行。jsp中的静态代码会被编译成out.write()的方式输出出来
JSP可以写什么
-
JSP指令
-
page指令:设置JSP页面编码、导包
1. 导包 <%@ page import="java.util.List" %> 2. 设置页面编码 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
-
include指令:导入其他类,静态包含
//在当前页面引入head.jsp <%@ include file="head.jsp"%>
-
taglib指令:导入第三方的依赖库
//导入a依赖库,命名为c <%@ taglib prefix="c" uri="a" %>
-
-
JSP脚本
- <% java代码%>
- <%= Java代码 %> 输出结果到网页
- <%! 声明变量/方法 %>
-
JSP注释
- html注释
<!-- -->
:只能注释html代码片段 - jsp注释
<%-- --%>
:可以注释所有
- html注释
-
JSP动作
- 转发
<jsp:forward>
:访问网页a会跳转到网页b
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> a.jsp <%--访问此页面就会跳转到b.jsp--%> <jsp:forward page="b.jsp"></jsp:forward> </body> </html>
- 动态包含
<jsp:include>
:将其它网页内容加载到当前网页,类似站点地图(动态包含和静态包含的区别)
- 转发
-
HTML
el表达式
全称是expression language,表达式语言
el表达式的作用
如果JSP来写,Java和HTML代码糅杂在一起,十分紊乱,因此选择使用el表达式来简化Jsp中的Java代码,让界面代码与Java代码分离
el表达式的语法
${表达式}
el表达式可以取的值
- Java代码中声明的变量/常量
- 4大作用域中的数据
- page:作用在JSP页面中
- request:作用在请求
- session:作用在会话
- application:使用在整个应用
Jsp9大内置对象(9大隐式对象)
- request:请求
- response:响应
- session:会话对象,Servlet中通过req.getSession()就是该对象
- application:全局上下文对象,Servlet中通过request.getServletContext()
- out:等同于pageContext.getOut()
- config:配置对象,ServletConfig
- page:代表当前Jsp本身,等同于Servlet中的this。
- pageContext:page上下文对象(page作用域对象)
- exception:异常对象,存放了JSP中发生的异常信息
JSTL
因为el表达式只能获取值,无法做判断 ,因此Apache组织又出了一个更加完善的,名叫JSTL
全名 Java Server Pages Tag Library JSP标准标签库。
JSTL的作用
作用是简化Jsp中的Java代码,让界面代码与Java代码分离,弥补el表达式的不足。可以看作是el表达式的补充版,进阶版
JSTL的使用
1.导包
下载地址
2.在JSP指令中声明要引用的标签库
3.使用JSTL提供的标签
- if
- forEach
- items:表示要循环的集合
- var:表示每次循环出来的对象的变量名
具体案例:
在页面上输出所有用户
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入JSTL的核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<th>id</th>
<th>用户名</th>
<th>密码</th>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.pwd}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
list为传进作用域中的数据,user则是list中的每个变量的名称