什么是JSP?
JSP(Java Server Pages):Java的服务器页面
JSP的主要作用是代替Servlet程序回传html页面的数据
因为Servlet程序回传html页面数据是一件非常繁琐的事情,开发成本和维护成本都极高
jsp如何访问
jsp页面和html页面一样,都是存放在web目录下,和访问html页面一样
jsp的本质
jsp的本质是一个Servlet程序
当我们第一次访问jsp页面的时候,tomcat服务器会帮我们把jsp页面翻译成为一个Java源文件,并且对它进行编译生成 .class 字节码文件。打开Java源文件发现里面的内容为:
跟踪源代码发现,HttpJspBase类直接地继承了HttpServlet类 。也就是说,jsp翻译出来的Java类间接地继承了HttpServlet类。也就是说,jsp翻译出来的就是一个Servlet程序
观察jsp翻译出来的Servlet程序源代码,可以发现,其底层实现,也是通过输出流,把html页面数据回传给客户端
jsp头部的page指令
jap的page指令可以修改jsp页面中一些重要的属性,或者行为
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
常用属性
language 表示jsp翻译后是什么语言文件,暂时只支持Java
contentType 表示jsp返回的数据类型是什么,也是源码中 response.setContentType()参数值
pageEncoding 表示当前jsp页面本身的字符集
import 跟Java源代码中的一样,用于导包、导类
errorPage 设置当jsp页面运行出错时,自动跳转去的错误页面路径
session 设置当前访问jsp页面,是否会创建HttpSession对象,默认是true
extends 设置jsp翻译出来的Java类默认继承谁
下面两个属性是给out输出流使用
autoFlush 设置当out输出流缓冲区满了之后,是否自动刷新缓冲区,默认值是true
buffer 设置out缓冲区的大小,默认是8kb
jsp中的常用脚本
声明脚本
格式:<%! 声明Java代码 %>
作用:可以给jsp翻译出来的Java类定义属性和方法,甚至是静态代码块、内部类等
<%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %><%-- Created by IntelliJ IDEA. User: 哪吒 Date: 2021/4/7 Time: 8:14 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--声明类属性 --%> <%! private String name; private static Map<String, Object> map; %> <%--声明静态代码块 --%> <%! static { map = new HashMap<>(); map.put("key", "value"); } %> </body> </html>
表达式脚本
格式:<%=表达式%>
作用:在jsp页面上输出数据
特点:
- 所有的表达式脚本都会被翻译到 _jspService() 方法中
- 表达式脚本都会被翻译成为 out.print() 输出到页面上
- 由于表达式脚本翻译的内容都在 _jspService() 方法中,所以 _jspService() 方法中的对象都可以直接使用
- 表达式脚本中的表达式不能以分号结束
<!--输出整型--> <%=12%> <!--输出浮点型--> <%=12.25%> <!--输出字符串--> <%="myString"%> <!--输出对象--> <%=map%>
脚本代码
格式:
<%
java代码
%>
作用:在jsp代码中,编写我们自己需要的功能(if语句、for循环、翻译后Java文件中 _jspService方法内的代码都可以写
特点:
- 代码脚本翻译之后都在 _jspService方法中
- 代码脚本由于翻译到 _jspService方法中,所有在 _jspService()方法中的现有对象都可以直接使用
- 可以由多个代码脚本块组合完成一个完整的Java语句
- 代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据
jsp九大内置对象
jsp四个域对象
out和response输出的区别
由于jsp翻译之后,底层源代码都是使用out来进行输出,所有一般情况下,我们在jsp页面中统一使用out来进行输出,避免打乱页面输出内容的顺序
jsp常用标签
静态包含
动态包含
请求转发
请求转发的使用