day07_Jsp
1. Jsp简介
- Jsp全称Java Server Pages,运行在java服务器中的页面【不能直接在浏览器中运行】
- Jsp表象:是一个可以嵌入Java代码的HTML。
- Jsp其本质:就是一个Servlet。Servlet能做的事情JSP都能做。
2. Jsp工作原理
xxx_jsp.java ->> class xxx_jsp : org.apache.jasper.runtime.HttpJspBase : HttpServlet
- 第一次请求jsp
- 服务器先将jsp翻译为xxx_jsp.java文件
再将xxx_jsp.java文件编译为xxx_jsp.class文件
如不是第一次
- 代码未改变:不会翻译&编译
- 代码改变:会翻译&编译
3. Jsp基本语法
指令
- 格式:<%@ 指令名 属性=属性值 属性2=属性值2 ….%>
模板元素
- html|css|js…
脚本片段
- 格式:<%%>
- 作用:在_jspService()方法中,书写java代码
表达式
- 格式:<%=%>
- 作用:将数据显示到页面中
声明
- 格式:<%! %>
- 作用:在类中,书写java代码
注释
java注释
- 单行注释://
- 多行注释:/**/
html注释
jsp注释
- <%— —%>
4. Jsp中常用指令
4.1 page指令
- 语法格式:<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
属性
- contentType:与response.setContentType()作用一致
- language:设置jsp支持语言,有且只有java
- import:导包
- errorPage:设置当前页面出错时的跳转页面
- isErrorPage:设置当前页面是否包含exception内置对象。默认:false
4.2 静态包含include指令
语法格式:<%@ include file=””%>
file属性:设置被包含文件的路径
特点:被包含文件不会被翻译&编译【先包含,再翻译】
适用场景:页面中是静态资源较多时,【java代码较少时】使用静态包含。
5. Jsp中常用动作标签
动作标签语法格式:
5.1 动作标签之动态包含
- 语法格式
<jsp:include page="index.jsp"></jsp:include>
特点:被包含文件同时会被翻译&编译【先翻译,再包含】
适用场景:页面中动态资源较多时【java代码较多时】使用动态包含。
5.2 动作标签之转发
- 语法格式
<jsp:forward page="index.jsp"></jsp:forward>
6. Jsp九大内置对象【隐式对象|隐含对象】
内置对象:无需我们程序员自己手动创建,就可以直接在Jsp中使用的对象,称之为内置对象,也叫隐式对象或隐含对象。
pageContext
- 页面域对象
- 类型:javax.servlet.jsp.PageContext
作用:
- 可以直接获取其他8个内置对象
- 域对象
- 在Servlet中获取方式:无【导包后才能使用javax.servlet.jsp.PageContext;】
request
- 请求域对象
- 类型:javax.servlet.http.HttpServletRequest
作用:与Servlet中讲解一致
- 获取请求参数:request.getParameter()
- 获取请求头
- 获取URL
- 转发:request.getRequestDispatcher().forward()
- 域对象:request.getAttribute() | request.setAttibute() ….
session
- 会话域对象
- 类型:javax.servlet.http.HttpSession
- 在Servlet中获取方式:request.getSession()
application
- 上下文域
- 类型:javax.servlet.ServletContext
作用:
- 获取上下文路径
- 获取真实路径
- 获取上下文初始化参数
- 域对象
- 在Servlet中的获取方式:getServletContext()
page
- 类型:java.lang.Object
- 作用: java.lang.Object page = this;
response
- 类型:javax.servlet.http.HttpServletResponse
作用:
- 获取响应流,响应数据
- 设置响应头
- 重定向
out
- 类型:javax.servlet.jsp.JspWriter
作用:与Servlet中PrintWriter作用类似,将数据显示到页面
- java.io.PrintWriter与javax.servlet.jsp.JspWriter都继承java.io.Wirter
config
- 类型:javax.servlet.ServletConfig
作用:
- 获取Servlet名称
- 获取初始化参数
- 获取ServletContext对象
exception
- 类型: java.lang.Throwable
- 作用:处理异常
- 总结:Jsp一共9个内置对象,但默认只有8个内置对象【其中exception内置对象,需要设置page指令中的【isErrorPage=true】时,才能提供】
7. Jsp四大域对象
7.1 域对象概述
生活中域【区域-快递】:将物品从一个区域快递到另一区域【共享】
- 同区快递
- 同城快递
- 全国快递
- 全球快递
- 程序中域:将数据从一个区域“快递”到另一区域【共享】
7.2 四大域对象详情
pageContext【页面域】
- 有效范围:在当前页面有效【离开当前页面失效】
request【请求域】
有效范围:在当前请求有效【不在当前请求失效】
- 当前请求:指本次请求【请求路径发生变化就不在当前请求】
- 转发请求时:是在当前请求
session【会话域】
- 有效范围:在当前会话有效【离开当前会话失效】
当前会话:浏览器与服务器之间会话,与浏览器有关,与服务器无关。
- 浏览器不关闭&不更换,即为当前会话
- 关闭浏览器或更换浏览器,当前会话结束
application【上下文域|web域】
- 有效范围:当前web应用有效
- web应用卸载失效【关闭服务器|服务器进程结束】
7.3 域对象共同API
域对象底层维护一个Map
- 设置属性到域中:void setAttribute(String key , Object value);
- 从域中获取指定的属性:Object getAttribute(String key);
- 移除域中指定属性:void removeAttribute(String key);