Javaweb学习-03-JSP
1. 什么是JSP
- JSP(java服务器页面),全称Java Server Pages,是由Sun公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
- 写JSP就像在 写HTML,但是HTML只给用户提供静态数据,而JSP页面中可以嵌套Java代码,为用户提供动态数据。
2. JSP原理
- C:\Users\TOP\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_Javaweb-03-session\work\Catalina\localhost\session\org\apache\jsp
发现JSP程序转变成了Java程序。 - Jsp的本质是servlet, 通过response的printWriter返回,response的getOutputStream只能调用一次,返回流就不能返回页面刷新。
- HttpJspBase继承HttpServlet
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
- JSP起源在这里插入图片描述
在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变。 如果使用Servlet程序来输出只有局部内容需要动态改变的网页,其中所有的静态内容也需要程序员用Java程序代码产生,整个Servlet程序的代码将非常臃肿,编写和维护都将非常困难。对大量静态内容的美工设计和相关HTML语句的编写,并不是程序员所要做的工作,程序员对此也不一定在行。网页美工设计和制作人员不懂Java编程,更是无法来完成这样的工作。 为了弥补Servlet的缺陷,SUN公司在Servlet的基础上推出了JSP(Java Server Pages)技术作为解决方案。
- JSP文件就像普通的HTML文件一样,它们可以放置在WEB应用程序中的除了WEB-INF及其子目录外的其他任何目录中,JSP页面的访问路径与普通HTML页面的访问路径形式也完全一样。
- 在JSP页面中编写的Java代码需要嵌套在<%和%>中,嵌套在<%和%>之间的Java代码被称之为脚本片段(Scriptlets),没有嵌套在<%和%>之间的内容被称之为JSP的模版元素。
3. JSP基础语法
- JSP表达式:将程序的输出到客户端
<%= %>
<%= new java.util.Date()%>
- JSP脚本片段
<%
int sum = 0;
for (int i = 0; i < 1000; i++) {
sum += i;
}
out.println("<h1> sum = " + sum + "</h1>");
%>
<%--嵌入HTML元素--%>
<%
for (int i = 0; i < 3; i++) {
%>
<h5>123</h5>
<%
}
%>
//对应java程序
for (int i = 0; i < 3; i++) {
out.write("\n");
out.write("<h5>123</h5>\n");
}
- JSP声明
会被编译到JSP生成的java的类中,其他会被生成到_jspService()方法中。
<%!
static {
System.out.println("jsp声明");
}
private int var = 0;
public void setVar(int var){
this.var = var;
}
%>
//对应java源码
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
static {
System.out.println("jsp声明");
}
private int var = 0;
public void setVar(int var){
this.var = var;
}
4. JSP指令
JSP中的三种指令标签:
- <%@ page … %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
- <%@ include … %> 包含其他文件
- <%@ taglib … %> 引入标签库的定义
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%@ include file="common/header.jsp"%>
<h1>123456</h1>
<%@ include file="common/footer.jsp"%>
</body>
</html>
5. EL表达式、JSTL标签
- 依赖导入
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
-
EL表达式 ${}
Expression Language表达式语言,是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据) -
JSTL标签
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>