当前位置: 首页 > news >正文

JSP总结

JSP总结


文章目录

      • JSP总结
        • 一.jsp工作原理和生命周期
        • 二.jsp内置对象
        • 三.incude指令和include行为
        • 四.jsp作用域
        • 五.cookie和session
一.jsp工作原理和生命周期

工作原理:

执行过程以hello.jsp为例:

  1. 把 hello.jsp转译为hello_jsp.java
  2. hello_jsp.java 位于
    d:\tomcat\work\Catalina\localhost_\org\apache\jsp
  3. hello_jsp.java是一个servlet
  4. 把hello_jsp.java编译为hello_jsp.class
  5. 执行hello_jsp,生成html
  6. 通过http协议把html 响应返回给浏览器

生命周期:

二.jsp内置对象

JSP有9个内置对象:

  • request:封装客户端的请求,其中包含来自GET或POST请求的参数;
  • response:封装服务器对客户端的响应;
  • pageContext:通过该对象可以获取其他对象;
  • session:封装用户会话的对象;
  • application:封装服务器运行环境的对象;
  • out:输出服务器响应的输出流对象;
  • config:Web应用的配置对象;
  • page:JSP页面本身(相当于Java程序中的this);
  • exception:封装页面抛出异常的对象。

参考博客:JSP九大内置对象,七大动作,三大指令

三.incude指令和include行为

include指令:JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。 语法格式如下:

<%@ include file="文件相对 url 地址" %>

include动作:<jsp:include>动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:

<jsp:include page="相对 URL 地址" flush="true" />

还是不懂?举个例子

通过前面知道,JSP最后会被转译成Servlet,假如在一个hello.jsp中引入另外一个foot.jsp页面
如果是指令include

<%@include file="footer.jsp" %>

footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中,最后只会生成一个hello_jsp.java文件

footer.jsp的内容会被插入到 hello.jsp 转译 成的hello_jsp.java中,最后只会生成一个hello_jsp.java文件

如果是动作include

<jsp:include page="footer.jsp" />

footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中,还会有一个footer_jsp.java独立存在。

hello_jsp.java 会在服务端访问footer_jsp.java,然后把返回的结果,嵌入到响应中。

footer.jsp的内容不会被插入到 hello.jsp 转译 成的hello_jsp.java中,还会有一个footer_jsp.java独立存在。 hello_jsp.java 会在服务端访问footer_jsp.java,然后把返回的结果,嵌入到响应中。

四.jsp作用域

JSP有4个作用域,分别是

pageContext当前页面
通过pageContext.setAttribute(key,value)的数据,只能在当前页面访问,在其他页面就不能访问了。

requestContext一次请求
常用写法是

request.setAttribute("name","fjh");request.getAttribute("name")

sessionContext当前会话
sessionContext 指的是会话,从一个用户
所以页面间传递数据,也是可以通过session传递的。
与requestContext类似的,也可以用如下方式来做

pageContext.setAttribute("name","gareen",pageContext.SESSION_SCOPE);pageContext.getAttribute("name",pageContext.SESSION_SCOPE)

applicationContext全局,所有用户共享
applicationContext 指的是全局,代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域
在JSP中使用application对象, application对象是也可以通过 request.getServletContext()来获取。
application映射的就是web应用本身。
ServletContext接口的实例
所以 application == request.getServletContext() 会返回true
与requestContext类似的,也可以用如下方式来做

pageContext.setAttribute("name","fjh",pageContext.APPLICATION_SCOPE);pageContext.getAttribute("name",pageContext.APPLICATION_SCOPE)
五.cookie和session

cookie的运用场景:

有的网站,登陆的时候,会有记住密码选项,一周内或者一个月内保持登陆状态。
如果你选了,那么一周之内,都不需要再输入账号密码。
这个功能,就是靠cookie来实现的

什么是cookie?

Cookie是一种浏览器和服务器交互数据的方式。

Cookie是由服务器端创建,但是不会保存在服务器

创建好之后,发送给浏览器。浏览器保存在用户本地

下一次访问网站的时候,就会把该Cookie发送给服务器。

创建cookie:
Cookie c = new Cookie(“name”, “fjh”);
创建一个cookie,名字是"name" 值是"fjh"

c.setMaxAge(24 * 60 * 60);
表示这个cookie可以保留一天,如果是0,表示浏览器一关闭就销毁

c.setPath("/");
Path表示访问服务器的所有应用都会提交这个cookie到服务端,如果其值是 /a, 那么就表示仅仅访问 /a 路径的时候才会提交 cookie

response.addCookie©;
通过response把这个cookie保存在浏览器端

获取cookie:
Cookie[] cookies = request.getCookies();

什么是session?

Session对应的中文翻译是会话。
会话指的是从用户打开浏览器访问一个网站开始,无论在这个网站中访问了多少页面,点击了多少链接,都属于同一个会话。 直到该用户关闭浏览器为止,都属于同一个会话

考虑这个场景:
fjh到健身房去练胸肌,首先领了钥匙,然后进了更衣间,把衣服,裤子,手机,钱包都放在盒子里面。

plw也到健身房,去练翘臀首先领了钥匙,然后 进了更衣间,把衣服,裤子,手机,《Java 21天从入门到精通》也放在了一个盒子里,但是这个盒子是和fjh的是不同的。

健身房,就相当于服务器,盒子,就是会话Session。

切换到我们常见的购物网站的场景
plw登陆天猫之后,在购物车里看到的物品是蜡烛和皮鞭
fjh登陆天猫之后,在购物车里看到的物品是手铐和《Java 21天从入门到精通》

是不是很清楚了

cookie和session又有什么关系获取区别呢?

ookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。

Cookie 一般用来保存用户信息比如①我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);③登录一次网站后访问网站其他页面不需要重新登录。Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。

Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。

Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。

回到健身房的储物柜这一段:

fjh和plw都有自己的盒子,那么他们怎么知道哪个盒子是自己的呢?
通过钥匙就能找到自己的盒子了。

盒子对应服务器上的Session。
钥匙对应浏览器上的Cookie

摘引:how2j

http://www.jsqmd.com/news/1282279/

相关文章:

  • gdb 开始调试开始上手
  • 龍魂本地融媒体工坊”落地指令(草案)基于梁文锋只追求AGI 的误区修正
  • 深井泵低液位自动停泵方案设计 - 水位监测系统观察员
  • 企业AI定制开发踩过的坑——交付周期凭什么能压到几周
  • Unity WebGL高性能WebSocket通信:混合事件驱动模型解析与实战
  • 深蓝G318和iCAR V27怎么选?20万级增程硬派SUV选购参考 - 资讯在线
  • docker安装shipyard
  • 157、画质竞赛与DXOMARK:评分体系拆解与针对性调优技巧
  • 5分钟找回QQ空间全部历史说说的终极指南:GetQzonehistory使用教程
  • Ryujinx模拟器终极指南:3步在PC上畅玩Switch游戏
  • 郑州今日黄金回收报价 足金金条 K 金免费鉴定 无火耗折旧费 - 奢侈品回收评测
  • 送你一篇最实用的接口测试科普文章
  • 弹幕盒子:免费在线弹幕处理终极指南
  • 【普通人AI入门指南】:3天掌握5个零代码AI工具,错过这波红利再等5年?
  • VUE脚手架搭建+Element 组件库table
  • Sunshine自托管游戏串流服务器:构建家庭云游戏的终极解决方案
  • 终极游戏音频提取指南:acbDecrypter从入门到精通
  • Dan Koe内容创作方法论:如何打造引发深度共鸣的优质内容
  • 34K Star 的 GraphRAG:微软开源的“知识图谱 + RAG“组合拳,让企业 AI 真正读懂你的私域文档
  • 无刺鼻气味除霉喷剂有哪些?2026热门母婴款实测,居家潮湿环境放心用 - 资讯在线
  • 2026江苏现货:二辛酯经销商/二丁脂批发商/CPE氯化聚乙烯/硬脂酸供应商盘点推荐 - 栗子测评
  • 将博客搬至CSDN
  • 10分钟制作专业视频:揭秘AI视频生成工具如何让视频创作零门槛
  • MCP vs Agent:最清晰区分
  • innerHTML和innerTest的区别
  • Playwright自定义Fixtures:解决测试数据管理与环境隔离的工程实践
  • 支持批量发放的电子权益服务商哪家专业?企业节日营销场景指南 - Qqinqin
  • 2026年图片加水印新方法:不用PS也能处理 - 软件工具教程方法
  • 炉石传说佣兵战记自动化脚本:5分钟掌握智能游戏助手完整指南
  • 物联网设备低功耗优化:NBM7100A电源管理方案解析