Jsp—01—Java server page 全解
一、Jsp的原理
tomacat 还是只认识servlet,
我们自己写的jsp通过 JspServlet引擎转换成了一个servlet.java文件;
我们在.jsp文件中,写的都是<html><font>之类的,
然后在JspServlet引擎的作用下, 都转换成了resp.getWriter().write("<html>")
resp.getWriter().write("<font>")
这就非常方便我们了, 我们可以少写很多代码!
Jsp引擎源码:
.jsp文件被Jsp引擎转译后的.Java文件的存储位置:
二、Jsp的指令
.jsp文件中各个注释
jsp的局部代码块声明方式:<%java代码%>
jsp的全局代码块声明方式:<%!java代码%>
jsp的脚本段声明方式:<%=Java代码%>
Jsp的静态引入和动态引入:
(1)静态引入:<%@include file="要引入的资源相对路径"%>
注意: 被引入的即是品文件和原有jsp文件被转译成一个Java文件使用; 所以, 静态引入不能声明同名变量;
(2)动态引入:<jsp:include page="****.jsp"></jsp:include>
注意:被引入的文件会被单独转译,原有jsp文件会调用被引入的jsp文件; 所以, 可以声明同名变量;
Jsp的forward标签:
for word标签是把一个新的页面给你;
静态引入和动态引入是把你先有页面的资源和引入的页面资源组合起来一起给你.
一个是只给你新的.
一个是把旧的新的组合起来都给你;
三、Jsp的内置对象学习
1.内置对象:
jsp在转译成其对应的Java文件(也就是Servlet)时, 会默认在_jspService方法中声明创建几个对象.
2.特点:
我们可以在jsp页面中, 使用<% Java局部代码块 %>, 在局部代码块中直接使用内置对象;
3.对象:
- pageContext对象: 页面上下文对象, 此对象封存了另外8个对象; (注意: 一个jsp页面一个pageContext对象. pageContext对象每次请求都会重新创建;)
- request 对象: 代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。
- response对象: 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。
- session 对象: 是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map 类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
- application 对象: 也就是Servlet Context对象; 可将信息保存在服务器中,直到服务器关闭,否则application √对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
- out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out √ 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
- page对象: 代表当前被 JspServlet引擎 执行的jsp转译后的Java文件对象;
- config对象: Servlet Config对象; 使用此对象完成资源的初始化;
- exception: jsp页面的异常对象, 封存了异常信息;
四、Jsp和Servlet的联系
jsp负责页面展示。
servlet负责逻辑处理。
五、Jsp和Servlet的相对路径和绝对路径
相对路径, 就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
如何使用相对路径在my.jsp跳转到main.jsp ------resp.sendRedirect("../main/main.jsp")。
绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。
在重定向中的路径中第一个/表示 服务器根目录。
在请求转发中第一个/表示 项目根目录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!