Jsp入门
引入
Jsp:用Java语言和(Html语言)开发动态资源的技术,Jsp就是Servlet.
Jsp的特点
-
Jsp只能交由tomcat服务器调用
Jsp运行时会产生临时文件,这些文件会存放在tomcat服务器work目录下
-
Jsp页面可以写html代码,也可以写Java代码.
html页面不能写java代码,而Jsp页面可以写Java代码
Jsp的执行过程
- 通过浏览器访问到xxx.jsp页面,tomcat扫描到访问的文件是.jsp文件后,在%tomcat%work文件夹下把xxx.jsp文件翻译为后缀为.java的java源文件.
- tomcat服务器把java源文件编译为xxxclass字节码文件.
- tomcat服务器通过xxx.class文件,构造xxx对象
- tomcat服务器调用xxx类中的方法,返回内容显示到浏览器
第一次访问jsp流程: 1.2.3.4
第n次访问jsp: 4
注意:
- jsp文件被修改或Jsp临时文件被删除了后,要重新走第一步和第二步
Jsp的声明周期
- 翻译: Jsp → java文件
- 编译: java文件 → class文件
- 生成类,调用构造方法(第1次访问)
- init方法(第1次访问) : _jspInit();
- service方法 : _jspService();
- destroy方法 : _jspDestroy();
Jsp语法
Jsp模板
Jsp页面中的Html代码就是Jsp的模板
Jsp表达式
语法: <%=变量 或 表达式%>
作用: 向浏览器输出变量的值或计算结果
Jsp脚本
语法: <% java 代码 %>
作用:
-
执行java代码
image.png -
可以穿插html代码使用
image.png
Jsp声明
语法: <% 变量或方法 %>
作用: 声明jsp的变量或方法
Jsp注释
语法: <%-- jsp注释 --%>
Jsp三大指令(常用)
include 指令
作用: 用于当前页面包含其他页面
语法: <%@include file="common/header.jsp"%>
原理: 将被包含页面的内容合并翻译为一个java的源文件,再编译源文件,这种包含叫做"静态包含"或"源码包含"
注意: 如果使用静态包含,被包含页面中不需要出现全局的html标签(<head>、<body>)
page 指令
作用:告诉Tomcat服务器如何翻译Jsp文件
语法:
<%@ page
language = "java" // 告诉服务器使用什么语言翻译Jsp文件(只能翻译java)
import = "java.util.*,java.text.*" // 告诉服务器java文件使用了什么包(多个包用","(逗号)分割)
pageEncoding = "utf-8" // 告诉服务器使用什么编码翻译Jsp文件
contentType = "text/html; charset="utf-8" // 服务器发送给浏览器的数据类型和内容编码
errorPage = "error.jsp" // 指定当前Jsp页面的错误处理页面
isErrorPage = "false" // 指定当前页面为错误处理页面
buffer = "8kb" // jsp页面的缓存区大小
session = "true" // 是否开启session功能, true可以使用session内置,反之不能用
isELIgnored = "false" // 是否忽略EL表达式
%>
taglib 指令
Jsp的内置对象(重点)
什么是内置对象
在Jsp开发中,会频繁使用到一些对象,例如HttpSession、ServletContext、HttpServletRequest等....如果开发者每次使用时都去手动创建或获取这些对象就会显得非常麻烦,所以Sun公司在设计Jsp时,在Jsp页面加载完毕之后就会自动帮助开发者创建好这些对象,开发者只需要直接使用这些对象调用方法即可,这些创建好的对象就叫做"内置对象"
Jsp中共有9大内置对象,分别是:
内置对象名 | 类型 |
---|---|
request | HttpServletRequest |
response | httpServletResponse |
config | ServletConfig |
application | ServletContext |
session | HttpSession |
exception | Throwable |
page | Object(this) |
out | JspWriter |
pageContext | PageContext |
Out对象
out对象类型,JspWriter类,相当于带缓存的PrintWriter(缓冲区的默认大小 : 8KB)
- PrintWriter.write(内容); 直接向浏览器写出内容.
- JspWriter.writer(内容); 向jsp缓冲区写出内容
当满足一下条件之一,缓冲区内容写出:
- 缓冲区满
- 刷新缓冲区 out.flush();
- 关闭缓冲区
- jsp页面执行完毕
pageContext对象
pageContext对象的类型是PageContext,叫jsp的上下文对象,作用是:
- 可以获取其他八个内置对象
- 是一个域对象,用于保存数据和获取数据,用于共享数据
-
保存数据
// 默认情况下,保存到page域 pageContext.setAttribute("name"); // 可以向四个域对象保存数据 pageContext.setAttribute("name",域范围常量)
-
获取数据
// 默认情况下,从page域获取 pageContext.getAttribute("name") // 可以从四个域中获取数据 pageContext.getAttribute("name",域范围常量)
-
域范围常量:
PageContext.PAGE_SCOPE PageContext.REQUEST_SCOPE PageContext..SESSION_SCOPE PageContext.APPLICATION_SCOPE
-
自动在四个域中搜索数据
pageContext.findAttribute("name"); 顺序: page域 -> request域 -> session域- > context域(application域)
Jsp中的四个域对象
四个域对象:
pageContext page域
request request域
session session域
application context域
-
域对象作用:
保存数据 和 获取数据 ,用于数据共享。
-
域对象方法:
setAttribute("name",Object) 保存数据 getAttribute("name") 获取数据 removeAttribute("name") 清除数据
-
域对象作用范围:
page域: 只能在当前jsp页面中使用(当前页面) request域: 只能在同一个请求中使用(转发) session域: 只能在同一个会话(session对象)中使用(私有的) context域: 只能在同一个web应用中使用。(全局的)