JSP概述
JSP(Java Server Pages)是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。JSP是一种Java Servlet,主要用于实现Java Web应用程序的用户界面部分。
JSP原理
JSP最终也会被转换成一个Java类,JSP本质上就是一个Servlet。
在JSP页面中,JAVA代码会被原封不动地输出,HTML代码会被转换为out.write("<html>\r\n");
JSP所需依赖
Tomcat版本:10.0.14
Tomcat 10
想要使用JSP,需要搭配当前同样最新的jakarta.Servlet
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> </dependency>
<dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.0.0</version> </dependency>
<dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency>
|
JSP基础语法
JSP作为Java技术的一种应用,在支持Java所有语法的基础上,还拥有一些扩充语法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <%-- JSP表达式: - 作用:将程序的输出,输出到客户端 - 形式: <%= 变量 或者 表达式 %> --%> <%= new java.util.Date() %>
<%-- 分隔符 --%> <hr>
<%-- java脚本片段 --%> <% int sum = 0; for (int i = 0; i < 100; i++) { sum += i; } out.println("<h1>Sum=" + sum + "</h1>"); %>
<%-- JSP声明 --%> <%! static { System.out.println("Loading Servlet!"); }
private int globalVar = 0;
public void hunter() { System.out.println("进入了方法hunter!"); } %>
|
- JSP声明会被编译到JSP生成的Java类中,其他的就会被生成到
_jspService
方法中。
- JSP的注释不会在客户端显示,HTML的注释会显示。
JSP内置对象及作用域
9大内置对象
PageContext
pageContext.setAttribute()
保存的数据只在一个页面中有效。
Request
request.setAttribute()
保存的数据只在一次请求中有效,请求转发会携带这个数据。
Session
session.setAttribute()
保存的数据在一次会话中有效,从打开浏览器到关闭浏览器。
Application (ServletContext)
application.setAttribute()
保存的数据只在服务器中有效,从打开服务器到关闭服务器。
Response
config (ServletConfig)
out
page
exception
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <%-- 在一个JSP中,使用内置对象 --%> <% pageContext.setAttribute("name1", "特叔服务1"); request.setAttribute("name2", "特叔服务2"); session.setAttribute("name3", "特叔服务3"); application.setAttribute("name4", "特叔服务4"); pageContext.forward("/pageDemo01.jsp"); %>
<%-- 在另一个JSP中,尝试读取上述JSP设置的参数 --%> <% 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表达式 --%> <h1>${name1}</h1> <h1>${name2}</h1> <h1>${name3}</h1> <h1>${name4}</h1>
|
EL表达式、JSP标签、JSTL标签
EL(Expression Language)表达式${ }
获取数据
执行运算
获取web开发的常用对象
例如获取表单中的数据:
${param.参数名}
1
| <input type="text" name="username" value="${param.username}">
|
JSP标签
1 2 3 4 5 6 7 8 9 10 11 12
| <%-- 在页面被请求时引入别的文件,如head.jsp、foot.jsp --%> <%-- jsp:include --%>
<%-- 如下JSP标签的效果: 请求转发至 http: --%>
<jsp:forward page="/jsptag2.jsp"> <jsp:param name="name" value="hunter"></jsp:param> <jsp:param name="age" value="88"></jsp:param> </jsp:forward>
|
JSTL(JSP Standard Tag Library)标签
JSTL标签库的使用是为了弥补HTML标签的不足,它自定义了许多标签,标签的功能和Java代码一样。
核心库
1 2
| <%-- 引入JSTL核心标签库,才能引用JSTL core标签 --%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
标签 |
描述 |
<c:out> |
用于在JSP中显示数据,就像<%= ... > |
<c:set> |
用于保存数据 |
<c:remove> |
用于删除数据 |
<c:if> |
和if一样 |
<c:choose> |
switch case —— switch |
<c:when> |
switch case —— case |
<c:otherwise> |
switch case —— default |
<c:forEach> |
迭代标签 |
<c:url> |
使用可选的查询参数来创造一个URL |
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| <%-- ------------------ <c:if> 和 <c:out> 示例 -------------------- --%> <form action="coreif.jsp" method="get"> <%-- EL表达式获取表单中的数据 ${param.username} --%> <label> <input type="text" name="username" value="${param.username}"> </label> <input type="submit" value="登录"> </form>
<%-- 判断如果提交的用户名是管理员,则登录成功 --%> <c:if test="${param.username=='admin'}" var="isAdmin"> <c:out value="管理员,您好"/> </c:if>
<c:out value="${isAdmin}"/>
<%-- ------------ <c:set>、<c:choose>、<c:when> 示例 ---------------- --%> <c:set var="score" value="85" /> <c:choose> <c:when test="${score >= 90}"> 你的成绩为优秀 </c:when> <c:when test="${score >= 80}"> 你的成绩为良好 </c:when> <c:when test="${score >= 70}"> 你的成绩为一般 </c:when> <c:when test="${score >= 60}"> 你的成绩为及格 </c:when> <c:when test="${score < 60}"> 你的成绩为不及格 </c:when> </c:choose>
<%-- ------------------------ <c:forEach> 示例 -------------------------- --%> <% List<String> people = new ArrayList<>(); people.add("赵1"); people.add("赵2"); people.add("赵3"); people.add("赵4"); people.add("赵5"); request.setAttribute("list", people); %>
<%-- var:每一次遍历出来的变量 items:要遍历的对象 --%> <c:forEach var="person" items="${list}"> <c:out value="${person}"/> <br> </c:forEach>
<%-- var:每一次遍历出来的变量 items:要遍历的对象 begin:开始的下标 end:结束的下标 step:步长 --%> <hr>
<c:forEach var="person" items="${list}" begin="1" end="3" step="2"> <c:out value="${person}"/> <br> </c:forEach>
|