导入 jar 包
搜索 jstl-api、standard
pom.xml 导入 jar 包
<!-- Servlet 依赖 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JSP 依赖 -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- JSTL 表达式的依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard 标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
JSP 表达式:
<%= 变量或表达式%>
将程序的输出,输出到客户端
<%-- JSP表达式
作用:用来将程序的输出,输出到客户端
<%= 变量或表达式%>
--%>
<%= new java.util.Date()%>
JSP 脚本片段:
<%-- JSP脚本片段 --%>
<%
int sum = 0;
for(int i = 0;i <= 10;i++){
sum+=i;
}
out.println("<h1>"+sum+"</h1>");
%>
在代码嵌入HTML元素:
<%-- 在代码嵌入HTML元素 --%>
<%
for(int i = 0;i < 5;i++){
%>
<p>Hello,world!</p>
<%
}
%>
JSP 声明:
<%-- JSP声明 --%>
<%!
static{
System.out.println("test");
}
private int i = 0;
public void test(){
System.out.println("test");
}
%>
写入声明后会被编译到 JSP 生成的 Java 类中
其他的则写入 _jspService 方法中
JSP 注释不会在客户端显示(可以抓包获取),HTML 注释会显示在客户端
JSP 注释:<%-- 注释 --%>
HTML 注释:<!-- 注释 -->
JSP 指令:
因为被除数不能为 0,我们可以自定义一个 500 页面
<%
int x = 0;
int y = 1;
System.out.println(y/x);
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h1>500</h1>
<img src="img/1.png">
</body>
</html>
errorPage 获取路径
<%@ page errorPage="error/error.jsp" %>
还可以在 web.xml 写入依赖
<error-page>
<error-code>500</error-code>
<location>/error/error.jsp</location>
</error-page>
同理,还有
<%@ page isErrorPage="true" %>
<%@ page pageEncoding="UTF-8" %>
<%@ include file=" 路径 " %>,它有 JSP 标签写法,<jsp:include page="/路径"/>
前者在方法里
后者在类里
内置对象:
1. PageContext
2. Request
3. Response
4. Session
5. Application(ServletContext)
6. config(ServletConfig)
7. out
8. page
9. exception
EL 表达式,${ }
<%-- 内置对象 --%>
<%
pageContext.setAttribute("name1","张三1");
request.setAttribute("name2","张三2");
session.setAttribute("name3","张三3");
application.setAttribute("name4","张三4");
%>
<%
//从pageContext中取出,通过寻找的方式获取
String name1 = (String)pageContext.findAttribute("name1");
String name2 = (String)pageContext.findAttribute("name2");
String name3 = (String)pageContext.findAttribute("name3");
String name4 = (String)pageContext.findAttribute("name4");
%>
<%-- 使用EL表达式输出 ${} --%>
<h3>${name1}</h3>
<h3>${name2}</h3>
<h3>${name3}</h3>
<h3>${name4}</h3>
pageContext.setAttribute(),保存的数据只在一个页面中有效
request.setAttribute(),保存的数据只在一次请求中有效,请求转发会携带这个数据
session.setAttribute(),保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute(),保存的数据只在服务器中有效,从打开服务器到关闭服务器
pageContext.forward(" 路径 "),访问页面
还可以用 JSP 标签来实现
<jsp:forward page="/路径">
<jsp:param name="age" value="1"></jsp:param>
</jsp:forward>
JSTL 标签库自定义了很多标签,可以弥补 HTML 标签的不足
JSTL 菜鸟教程
引入 JSTL 核心标签:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if>:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<form action="jstl.jsp" method="get">
<%--
EL表达式获取表单中的数据
${param.参数名}
--%>
<input type="text" name="username" value="${param.username}">
<input type="submit" value="登录">
</form>
<%-- 判断提交的用户名是管理员,则登录成功 --%>
<c:if test="${param.username=='admin'}" var="isAdmin">
<c:out value="管理员欢迎您!"/>
</c:if>
<%-- 自闭合标签 --%>
<c:out value="${isAdmin}"/>
</body>
</html>
效果如下:
<c:choose>、<c:when>:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<%-- 定义一个变量 --%>
<c:set var="score" value="100"/>
<c:choose>
<c:when test="${score>=60}">及格</c:when>
<c:when test="${score<60}">不及格</c:when>
</c:choose>
</body>
</html>
<c:forEach>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %>
<html>
<body>
<%
ArrayList<String> people = new ArrayList<>();
people.add(0,"aa");
people.add(1,"bb");
people.add(2,"cc");
people.add(3,"dd");
request.setAttribute("list",people);
%>
<%--
var 每一次遍历出来的变量
items 要遍历的对象
--%>
<c:forEach var="people" items="${list}">
<c:out value="${people}"/> <br>
</c:forEach>
<hr>
<c:forEach var="people" items="${list}" begin="1" end="3" step="2">
<c:out value="${people}"/> <br>
</c:forEach>
</body>
</html>
效果如下: