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 代码 |
JSP | JSP = 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 页面,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); // 小黄是声明的一个成员变量,出现在类中,不在方法中