一、jsp简介
(一)概述
JSP(全称 Java Server Pages,Java 的服务器页面)是由 Sun 公司专门为了解决动态生成 HTML 文档的技术。
(二)作用
jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。
如果我们要往客户端输出一个页面,我们可以使用 Servlet 程序来实现,但是十分不方便和繁琐。 并且有些复杂的页面上千上万行,那就更加的困难,开发成本和维护成本都极高。 所以 sun 公司推出一种叫做 jsp 的动态页面技术帮助我们实现对页面的输出繁锁工作。
(三)如何创建jsp页面
选中 Web目录,右键创建一个 jsp 文件
输入 jsp 页面的文件名
在 body 标签中添加你想要显示的文本内容
然后启动Tomcat,在浏览器中输入 jsp 页面的访问地址
jsp 页面的访问地址和 html 页面的访问路径一样 http://ip地址:端口号/工程名/文件名
注意:jsp 页面的访问千万不能像 HTML 页面一样,直接手拖到浏览器中或是直接用地址名访问。只能通过启动 Tomcat 服务器再用浏览器访问 jsp 页面
(四)jsp的本质
jsp 页面本质上是一个 Servlet 程序。
当我们第一次访问 jsp 页面的时候,Tomcat 服务器会帮我们把 jsp 页面翻译成为一个 java 源文件。并且把它进行编译成为.class 字节码程序。我们可以通过启动Tomcat时IDEA的输出,找到Using CATALINA_BASE这一项,复制后面的地址到我的电脑的地址栏,再逐步点进work/Catalina/localhost/项目名org/apache/jsp
,就可以找到我们的jsp页面翻译后的java源文件。我们打开 java 源文件不难发现其里面的内容是:
我们跟踪原代码发现,这个jsp翻译出来的类继承了HttpJspBase 类,查看HttpJspBase的源码发现,它直接地继承了 HttpServlet 类。也就是说:jsp 翻译出来的 java 类,它间接了继承了 HttpServlet 类。也就是说,jsp页面翻译出来的是一个 Servlet 程序。
总结:jsp 就是 Servlet 程序。
当我们访问 一个 xxx.jsp
文件后,翻译成 java 文件的全名是 xxx_jsp.java
文件
大家也可以去观察翻译出来的 Servlet 程序的源代码,不难发现,其底层实现,也是通过输出流,把 html 页面数据回传给客户端:
二、jsp语法
(一)头部的page指令
jsp 的 page 指令可以修改 jsp 页面中一些重要的属性,或者行为。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
page指令中有如下属性:
- language 属性 表示 jsp 翻译后是什么语言文件。暂时只支持 java。
- contentType 属性 设置响应头 contentType 的内容。也是源码中 response.setContentType()参数值
- pageEncoding 属性 表示当前 jsp 页面文件本身的编码。
- import 属性 跟 java 源代码中一样,给当前 jsp 页面导入需要使用的类包。
- autoFlush 属性 设置当 out 输出流缓冲区满了之后,是否自动刷新缓冲区。默认值是 true。
- buffer 属性 设置 out 缓冲区的大小。默认是 8kb
- errorPage 属性 设置当前 jsp 发生错误后,需要跳转到哪个页面去显示错误信息,这个页面的路径一般都是以
/
斜杠打头,它表示请求地址为http://ip:port/工程路径/
,映射到代码的 Web 目录 - isErrorPage 属性 设置当前 jsp 页面是否是错误页面。是的话,就可以使用 exception 异常对象,从而获取异常信息
- session 属性 设置当前 jsp 页面是否获取 session 对象,默认为 true
- extends 属性 给服务器厂商预留的 jsp 默认翻译的 servlet 继承于什么类
(二)常用脚本
1.声明脚本(极少使用)
格式:
<%!
java 代码
%>
作用:可以给 jsp 翻译出来的 java 类定义全局变量、方法、静态代码块和内部类等。 (几乎可以写在类的内部写的代码,都可以通过声明脚本来实现)
2.表达式脚本(常用)
格式: <%=表达式 %>
作用:表达式脚本用于向页面输出内容。
- 表达式脚本翻译到 Servlet 程序的 _jspService() 方法中 以 out.print() 打印输出
- 由于表达式脚本翻译的内容都在_jspService() 方法中,所以_jspService()方法中的对象,在表达时脚本中都可以直接使用
- out 是 jsp 的一个内置对象,用于生成 html 的源代码
- 注意:表达式不要以分号结尾,否则会报错
- 表达式脚本可以输出任意类型。 比如:
- 输出整型
- 输出浮点型
- 输出字符串
- 输出对象
案例:
<%=12 %> <br>
<%=12.12 %> <br>
<%="我是字符串" %> <br>
<%=map%> <br>
<%=request.getParameter("username")%>
和翻译出来的java源代码对照:
3.代码脚本(使用最多)
格式:
<%
java 代码
%>
作用:代码脚本里可以书写任意的 java 语句。
- 代码脚本的内容都会被翻译到 _jspService()方法中,所以 _jspService() 方法中可以写的 java 代码,都可以书写到代码脚本中
- 可以由多个代码脚本块组合完成一个完整的 java 语句。
- 代码脚本还可以和表达式脚本一起组合使用,在 jsp 页面上输出数据
案例:
和翻译出来的java源代码对照:
练习1:在浏览器中输出九九乘法口诀表
练习2:jsp 输出一个表格,里面有 10 个学生信息
Student类:
public class Student {
//用Integer而不是int,当没有数据时,此属性默认值为null而不是0,毕竟0也是个确定的数值
private Integer id;
private String name;
private Integer age;
private String phone;
public Student