1. 什么是JSP
Java Server Page:java服务器端页面,和Servlet一样,用于动态web技术。
其最大的特点是:
- 写JSP页面就像在写HTML代码;
- JSP页面中可以嵌入java代码,为用户提供动态数据;
2. JSP原理
在目录下:C:\Users\yang\AppData\Local\JetBrains\IntelliJIdea2020.2\tomcat
保存着Idea的临时数据文件
\tomcat\Unnamed_java-web-subms\work\Catalina\localhost\java_web_subms_war\org\apache\jsp
中存在着java和class文件
点开java文件后,发现是将JSP代码转换为Servlet代码,因此JSP本质上就是Servlet
只有当访问对应的JSP文件时,才会生成相应的.java和.class代码。
JSP中内置了几个对象:
final javax.servlet.jsp.PageContext pageContext; // 页面上下文
javax.servlet.http.HttpSession session = null; // session
final javax.servlet.ServletContext application; // appliactionContext
final javax.servlet.ServletConfig config; // config
javax.servlet.jsp.JspWriter out = null; // out
final java.lang.Object page = this; // page:当前页面
HttpServletRequest request
HttpServletResponse response
3. JSP基本语法
3.1 JSP表达式
<%= %>
直接输出内容:
<%= new java.util.Date()%>
${}
El 表达式:
${new java.util.Date()}
- 获取数据
- 执行运算
- 获取web开发的常用对象
3.2 JSP代码片段
<% %>
写一段java代码:
<%
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
out.print(sum);
%>
3.3 JSP声明
<%! %>
可以定义方法和变量,编译到JSP生成的java类中
<%!
private void print(){
System.out.print("hello");
}
%>
从上图可知,声明中定义的变量和函数都在类中,其他的都在_jspService()方法中。
3.4 JSP指令
- JSP页面的一些配置
<%@page%>
-
导入其他公共的页面
<%@include%>
,注意,这是页面的导入,将其他页面的代码导入到当前代码中,可能会出现变量冲突。
3.5 错误页面
-
在web.xml中配置error-page,web.xml中默认的文件路径为web/,因此只用/error即可,不用…/到上一级寻找
<error-page> <error-code>404</error-code> <location>/error/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error/500.jsp</location> </error-page>
-
使用jsp的
<%@ page errorPage= %>
,若页面出现代码错误,将会导向500页面<%@ page errorPage="/error/500.jsp"%>
4. 九大内置对象
- PageContext:页面作用域,保存的数据只在一个页面生效
- pageContext.forward():转发请求
- request:保存的数据在一个请求中生效,可以转发请求,会携带这个数据
- 客户端向服务器发送请求,产生的数据,用户看完就没用了,比如,新闻
- session:保存的数据在一次session中有效,从打开浏览器到关闭
- 客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如,登录信息
- application:即servletContext,保存的数据在服务器中有效,从打开服务器到关闭服务器
- 客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能用,比如:聊天数据
- config:servletConfig
- out:输出内容到页码
- page:几乎不用
- exception:与java异常类似
5. JSP标签
jsp:forward("***.jsp")
:
转发页面,同pageContext.forward()
和request.getRequestDispatcher().forward(req, resp)
6. JSTL标签
6.1 核心标签
导入标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--cout的使用--%>
<c:out value="hello"></c:out>
<form action="${pageContext.request.contextPath}/jstl01.jsp">
<%--param获取表单中的参数--%>
用户名 <input type="text" name="username" value="${param.username}">
<button>提交</button>
</form>
<%--cif的使用--%>
<c:if test="${param.username == 'admin' }" var="isAdmin">
<c:out value="管理员欢迎你!"/>
</c:if>
${isAdmin}
<%--cchoose的使用--%>
<c:set var="score" value="75"/>
<c:choose>
<c:when test="${score < 60}">
<c:out value="不及格"/>
</c:when>
<c:otherwise>
<c:out value="及格"/>
</c:otherwise>
</c:choose>
<%--cforEach的使用--%>
<%
ArrayList<String> list = new ArrayList<>();
list.add("yang");
list.add("yy");
pageContext.setAttribute("list", list);
%>
<c:forEach var="name" items="${list}">
<c:out value="${name}"/>
</c:forEach>