Java研学-JSP

一 JSP概述

1 介绍

JSP——Java Server Page运行在服务器端的 Java 页面(本质上是一个简化的Servlet设计), HTML 运行在浏览器端,而 JSP是运行在服务器上,最终还是解析成静态的HTML,运行在浏览器。浏览器上看到的HTML页面,其实是 JSP 在服务器上运行的结果。JSP的主要目的是将逻辑从Serlvet中分离出来。

2 优势

技术特点
HTML静态页面
优点:方便页面美化操作,写JS脚本和CSS代码都比较方便。
缺点:不能写动态的内容
Servlet运行在服务器上小 Java 程序
优点:制作动态内容
缺点:不方便写 HTML 以及 CSS 和 JS 代码
JSPJSP = HTML + Servlet
特点:既有 HTML 的优点:方便美化和编写 JS 代码。
又有 Servlet 优点:可以在页面写 Java 代码,可以制作动态内容

3 入门事例

<%--导入包--%>
<%@ page import="java.util.Date" %>
<%--page:指定页面内容的类型,编码。(Java)--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>浏览器输出服务器当前的时间</title>
</head>
<body>
<span style="color:rosybrown;">
  <%=new Date()%>
</span>
</body>
</html>

4 运行过程

  JspServlet 首先会将 jsp 文件代码翻译成 Servlet 的 Java 代码,然后再编译成字节码文件执行,底层就是一个 Servlet
JSP 运行过程
① 浏览器请求 JSP 页面,Tomcat 中的 JspServlet 会先 JSP 文件翻译成 Servlet 文件:xxx_jsp.java
② 将 xxx_jsp.java 文件编译产生字节码文件:xxx_jsp.class
③ 加载字节码文件 xxx_jsp.class 并创建 xxx_jsp 对象
④ 调用 xxx_jsp 的 service 方法处理请求并响应数据
⑤ JSP翻译的 Servlet一般在 tomcat\work\catalina中

二 JSP 和 Servlet

  实质上,JSP的底层就是 Servlet。浏览器第一次访问 JSP 时,Tomcat 将 JSP 翻译为Servlet,并且编译成字节码文件,只生成1次。若期间修改了JSP内容,就会重新翻译。

public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
public abstract class HttpJspBase extends HttpServlet

JSP 基本语法

① 脚本片段

JSP 脚本片段说明
语法<% 一行或多行 Java 代码; %>
作用JSP 页面执行一段 Java 代码,须符合 Java 语法规则,每行代码以分号结束。
可以在脚本片段中使用 Java 的单行或多行注释语法
代码会被翻译到 service 方法中

② JSP 脚本表达式

JSP脚本表达式说明
语法<%= 变量名或表达式%> 翻译成 Servlet 变成 out.print() 打印输出,后面没有分号
作用直接输出变量的值或对表达式进行计算

③ jsp演示

<%--导入包--%>
<%@ page import="java.util.Date" %>
<%--page:指定页面内容的类型,编码。(Java)--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>MyPuppy</title>
</head>
<body>
<span style="color:rosybrown;">
  <%
    String puppy = "大黄";
  %>
  <%=puppy%> <br>
  <%=12%5%>
</span>
</body>
</html>

④ 对应的Servlet

String puppy = "大黄";
out.write('\r');
out.write('\n');
out.print(puppy );
out.write(" <br>\r\n");
out.print(12%5);

⑤ JSP声明

JSP声明说明
语法<%! 全局变量或方法 %>
作用用于在JSP页面上声明全局变量或方法

  JSP 声明中声明变量是在类中的成员变量。而在 JSP 脚本片段中声明的变量是局部变量,声明在_jspService()方法中。

<%--导入包--%>
<%@ page import="java.util.Date" %>
<%--page:指定页面内容的类型,编码。(Java)--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>JSP声明</title>
</head>
<body>
<span style="color:rosybrown;">
<%--JSP脚本片段--%>
<% String puppy = "大黄"; %>
<%--JSP声明--%>
<%! String puppy="小黄"; %>
<%=puppy%><br><%--大黄--%>
<%=this.puppy%><%--小黄--%>
</span>
</body>
</html>

⑥ 对应的Servlet

String puppy= "大黄";
out.print(puppy); // 大黄定义在方法中
out.write("<br>\r\n");
out.print(this.puppy); // 小黄是声明的一个成员变量,出现在类中,不在方法中