尚硅谷-JavaWeb Day6 jsp
1. jsp(java server pages)Java 的服务器页面
主要作用:替 Servlet 程序回传 html 页面的数据;
2. jsp 的访问和 html 页面一样,都是存放在 web 目录下,访问也跟访问 html 页面一样;
3. jsp 本质上是一个 Servlet 程序;
第一次访问 jsp 页面时,Tomcat 服务器会把 jsp 页面翻译成 java 源文件,并对它进行编译成 .class 字节码程序;
源代码可以看出,HttpJspBase 类直接继承了 HttpServlet 类,即 jsp 翻译出的 java 类间接继承了 HttpServlet 类;
=> 翻译出的是一个 Servlet 程序;
4. jsp 的 page 指令(可以修改 jsp 页面中一些重要属性或者行为)
<%@ page contextType="text/html;charset=UTF-8" language="java" %>
- language:jsp翻译后是什么语言,暂时只支持java
- contentType:jsp 返回的数据类型,也是源码里 response.setcontentType() 参数值
- pageEncoding:表示 jsp 页面文件本身的字符集
- import:用于导包导类
- autoFlush(out输出流用):设置当 out 输出流缓冲区满了后,是否自动刷新缓冲区,默认 true
- buffer(out输出流用):设置out缓冲区大小,默认8kb
- errorPage:设置当 jsp 页面运行时出错,自动跳转去的错误页面路径,一般以"/"打头跳转到web目录下
- isErrorPage:映射当前 jsp 页面是否是错误信息页面,默认 false,true可以获取异常信息
- session:设置访问当前 jsp 页面,是否会创建 HttpSession 对象,默认 true
- extends:设置 jsp 翻译出来的 java 类默认继承谁
5. jsp 常用脚本
声明脚本(格式:<%! 声明java代码 %>)
可以给 jsp 翻译出来的 java 类定义属性、方法、静态代码块和内部类等
表达式脚本(格式:<%=表达式%>)(常用)
在 jsp 页面上输出数据(整型、浮点型、字符串、对象)
表达式脚本都ibei翻译到 _javaService() 方法中
特点:
-
-
- 所有表达式脚本都会被翻译到 _javaService() 方法中
- 表达式脚本都会被翻译成为 out.print() 输出到页面上
- 由于表达式脚本翻译的内容都在_javaService()方法中,所以_javaService()中的对象可以直接使用
- 表达式脚本中的表达式不能以;结束
-
代码脚本(格式:<% java语句 %>)
可以在 jsp 页面中,编写我们需要的功能(写的是 java语句)
特点:
-
-
- 代码脚本翻译之后都在_javaService()方法中
- 由于代码脚本翻译的内容都在_javaService()方法中,所以_javaService()中的对象可以直接使用
- 可以由多个代码脚本块组合完成一个完整的 java 语句
- 可以和表达式脚本一起组合使用,在 jsp 页面输出数据
-
6. jsp 中三种注释
html 注释:<!-- xxxx -->,会被翻译到 java 源代码中,在_javaService()方法中,以out.writer输出到客户端;
java注释:会被翻译到 java 源代码中(// 单行java注释、/*xxxx*/ 多行java注释)
jsp注释:<%-- xxxx --%>,可以注释掉 jsp 页面中所有的代码
7. jsp 中的九大内置对象
内置对象:指 Tomcat 翻译 jsp 页面成为 Servlet 源代码后,内部提供的九大对象;
- request:请求对象
- response:响应对象
- pageContext:jsp的上下文对象
- session:会话对象
- application:ServletContext对象
- config:ServletConfig对象
- out:jsp输出流对象
- page:指向当前 jsp 的对象
- exception:异常对象
8. 四个域对象(可以像 Map 一样存取数据的对象,四个域对象功能一样,对数据的存取范围不同)
四个域使用的时候,优先顺序即为下列的排序,从小到大的范围;
- pageContext(PageContextImpl 类):当前 jsp 页面范围内有效
- request(request 类):一次请求内有效
- session(session 类):一个会话范围内有效(打开浏览器访问服务器,知道关闭浏览器)
- application(ServletContext 类):整个web工程范围内有效(只要web工程不停,数据都在)
9. out 输出和 response 输出的区别(为了避免打乱页面输出顺序,统一使用 out 输出)
out.write() 输出字符串没有问题;out.print() 输出任意数据都没有问题(会先转化成字符串,再调用write)
当 jsp 页面中所有代码执行完成后会做以下两个操作:
- 执行 out.flush() 操作,把 out 缓冲区中的数据追加写入到 response 缓冲区末尾;
- 会执行 response 的刷新操作,把数据全部写给客户端;
10. jsp 常用标签
静态包含:(主要)
一个单独的jsp页面,只维护一处,其他都统一被修改(如网页底部的友情链接、加入我们等等)
样例:<%@ include file="/xxx/xx.jsp"%> //file属性指定包含的 jsp 页面路径,"/"映射到web目录下;
特点:(1)不翻译被包含的jsp页面(2)本质是把被包含的jsp页面拷贝到包含位置执行输出;
动态包含:
样例:<jsp:include page="/xxx/xx.jsp"></jsp:include> //page属性指定包含的 jsp 页面路径;
特点:(1)把被包含的jsp页面也翻译成 java 代码
(2)底层代码使用如下去调用被包含的jsp页面执行输出:JspRuntimeLibrary.include(xxx);
(3)动态包含,还可以传递参数
请求转发:<jsp:forward page="/xxx/xx.jsp"></jsp:forward > //page属性指定包含的 jsp 页面路径;
一定要从客户端发请求给Servlet程序,不能直接发给jsp。
11. Listener 监听器(JavaEE规范,就是接口;监听某种事物的变化,通过回调函数反馈给客户(程序)去做一些操作)
12. ServletContextListener 监听器
可以监听 ServletContext 对象的创建和销毁;(ServletContext 对象再 web工程启动时创建,web工程停止时销毁)
监听到创建和销毁之后会分别调用 ServletContextListener 监听器的方法反馈
两个方法:
contextInitialized(ServletContextEvent sce):在其对象创建之后马上调用,做初始化
contextDestoryed(ServletContextEvent sce):对象销毁之后调用
13. 如何使用 ServletContextListener 监听器监听 ServletContext 对象
① 编写一个类去实现 ServletContextListener
② 实现两个回调方法
③ 到 web.xml 中配置监听器:<listenner><listenner-class>类全路径</listenner-class></listenner>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现