02、Servlet核心技术(下)

目录

1 Servlet+JDBC应用(重点)

2 重定向和转发(重点) 

2.1 重定向的概述

 2.2 转发的概述

 3 Servlet线程安全(重点)  

4 状态管理(重点 )

5 Cookie技术(重点) 

5.1 基本概念 

5.2 相关的方法 

5.3 Cookie的生命周期

5.4 Cookie的路径问题

 5.5 Cookie的特点

6 Session技术(重点) 

6.1 基本概念

6.2 相关的方法 

6.3 Session的生命周期

6.4 Session的特点


1 Servlet+JDBC应用(重点)

  • 在Servlet中可以使用JDBC技术访问数据库,常见功能如下:
  1. 查询DB数据,然后生成显示页面,例如:列表显示功能。
  2. 接收请求参数,然后对DB操作,例如:注册、登录、修改密码等功能。
  • 为了方便重用和便于维护等目的,经常会采用DAO(Data Access Object)模式对数据库操作进行独立封装。
  • DAO工厂(工厂模式)
    工厂类:封装了对象的创建细节,为调用者提供符合要求的对象。
     

2 重定向和转发(重点) 

2.1 重定向的概述

(1)重定向的概念

  • 首先客户浏览器发送http请求,当web服务器接受后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址,服务器根据此请求寻找资源并发送给客户。

(2)重定向的实现

  • 实现重定向需要借助javax.servlet.http.HttpServletResponse接口中的以下方法: 
方法声明功能介绍
void sendRedirect(String location)使用指定的重定向位置URL向客户端发送临时重定向响应

 (3)重定向的原理

(4)重定向的特点

  • 重定向之后,浏览器地址栏的URL会发生改变。
  • 重定向过程中会将前面Request对象销毁,然后创建一个新的Request对象。
  • 重定向的URL可以是其它项目工程。

 2.2 转发的概述

(1)转发的概念

  • 一个Web组件(Servlet/JSP)将未完成的处理通过容器转交给另外一个Web组件继续处理,转发的各个组件会共享Request和Response对象。

(2)转发的实现

  • 绑定数据到Request对象
    方法声明功能介绍
    Object getAttribute(String name)将指定属性值作为对象返回,若给定名称属性不存在,则返回空值
    void setAttribute(String name,Object o)在此请求中存储属性值
  • 获取转发器对象
    方法声明功能介绍
    RequestDispatcher getRequestDispatcher(String path)返回一个RequestDispatcher对象,该对象充当位于给定路径上的资源的包装器
  • 转发操作 
    方法声明功能介绍
    void forward(ServletRequest request, ServletResponse response)将请求从一个servlet转发到服务器上的另一个资源(Servlet、JSP文件或HTML文件)

 (3)转发的特点

  • 转发之后浏览器地址栏的URL不会发生改变。
  • 转发过程中共享Request对象。
  • 转发的URL不可以是其它项目工程。

(4) 重定向和转发的比较 

 3 Servlet线程安全(重点)  

  • 服务器在收到请求之后,会启动一个线程来进行相应的请求处理。
  • 默认情况下,服务器为每个Servlet只创建一个对象实例。当多个请求访问同一个Servlet时,会有多个线程访问同一个Servlet对象,此时就可能发生线程安全问题。
  • 多线程并发逻辑,需要使用synchronized对代码加锁处理,但尽量避免使用。
     

4 状态管理(重点 )

  • Web程序基于HTTP协议通信,而HTTP协议是”无状态”的协议,一旦服务器响应完客户的请求之后,就断开连接,而同一个客户的下一次请求又会重新建立网络连接。
  • 服务器程序有时是需要判断是否为同一个客户发出的请求,比如客户的多次选购商品。因此,有必要跟踪同一个客户发出的一系列请求。
  • 把浏览器与服务器之间多次交互作为一个整体,将多次交互所涉及的数据保存下来,即状态管理。
  • 多次交互的数据状态可以在客户端保存,也可以在服务器端保存。状态管理主要分为以下两类:
  1. 客户端管理:将状态保存在客户端。基于Cookie技术实现。
  2. 服务器管理:将状态保存在服务器端。基于Session技术实现。

5 Cookie技术(重点) 

5.1 基本概念 

  • Cookie本意为”饼干“的含义,在这里表示客户端以“名-值”形式进行保存的一种技术。
  • 浏览器向服务器发送请求时,服务器将数据以Set-Cookie消息头的方式响应给浏览器,然后浏览器会将这些数据以文本文件的方式保存起来。
  • 当浏览器再次访问服务器时,会将这些数据以Cookie消息头的方式发送给服务器

5.2 相关的方法 

  • 使用javax.servlet.http.Cookie类的构造方法实现Cookie的创建。
    方法声明功能介绍
    Cookie(String name, String value)根据参数指定数值构造对象
  • 使用javax.servlet.http.HttpServletResponse接口的成员方法实现Cookie的添加。
    方法声明功能介绍
    void addCookie(Cookie cookie)添加参数指定的对象到响应
  • 使用javax.servlet.http.HttpServletRequest接口的成员方法实现Cookie对象的获取。
    方法声明功能介绍
    Cookie[] getCookies()返回此请求中包含的所有Cookie对象
  • 使用javax.servlet.http.Cookie类的构造方法实现Cookie对象中属性的获取和修改。 
    方法声明功能介绍
    String getName()返回此Cookie对象中的名字
    String getValue()返回此Cookie对象的数值
    void setValue(String newValue)设置Cookie的数值

    5.3 Cookie的生命周期

  • 默认情况下,浏览器会将Cookie信息保存在内存中,只要浏览器关闭,Cookie信息就会消失。

如果希望关闭浏览器后Cookie信息仍有效,可以通过Cookie类的成员方法实现。

方法声明功能介绍
int getMaxAge()返回cookie的最长使用期限(以秒为单位)
void setMaxAge(int expiry)设置cookie的最长保留时间(秒)

5.4 Cookie的路径问题

  •  浏览器在访问服务器时,会比较Cookie的路径与请求路径是否匹配,只有匹配的Cookie才会发送给服务器。
  • Cookie的默认路径等于添加这个Cookie信息时的组件路径,例如:/项目名/目录/add.do请求添加了一个Cookie信息,则该Cookie的路径是 /项目名/目录。
  • 访问的请求地址必须符合Cookie的路径或者其子路径时,浏览器才会发送Cookie信息。
    方法声明功能介绍
    void setPath(String uri)设置cookie的路径信息

     5.5 Cookie的特点

  • Cookie技术不适合存储所有数据,程序员只用于存储少量、非敏感信息,原因如下:
    1.  将状态数据保存在浏览器端,不安全。
    2. 保存数据量有限制,大约4KB左右。
    3. 只能保存字符串信息。
    4. 可以通过浏览器设置为禁止使用。 

6 Session技术(重点) 

6.1 基本概念

  • Session本意为"会话"的含义,是用来维护一个客户端和服务器关联的一种技术。
  • 浏览器访问服务器时,服务器会为每一个浏览器都在服务器端的内存中分配一个空间,用于创建一个Session对象,该对象有一个id属性且该值唯一,我们称为SessionId,并且服务器会将这个SessionId以Cookie方式发送给浏览器存储。
  • 浏览器再次访问服务器时会将SessionId发送给服务器,服务器可以依据SessionId查找相对应的Session对象

6.2 相关的方法 

  • 使用javax.servlet.http.HttpServletRequest接口的成员方法实现Session的获取。 
    方法声明功能介绍
    HttpSession getSession()返回此请求关联的当前Session,若此请求没有则创建一个
  • 使用javax.servlet.http.HttpSession接口的成员方法实现判断和获取。 
    方法声明功能介绍
    boolean isNew()判断是否为新创建的Session
    String getId()获取Session的编号
  • 使用javax.servlet.http.HttpSession接口的成员方法实现属性的管理。
    方法声明功能介绍
    Object getAttribute(String name)返回在此会话中用指定名称绑定的对象,如果没有对象在该名称下绑定,则返回空值
    void setAttribute(String name, Object value)使用指定的名称将对象绑定到此会话
    void removeAttribute(String name)从此会话中删除与指定名称绑定的对象

    6.3 Session的生命周期

  • 为了节省服务器内存空间资源,服务器会将空闲时间过长的Session对象自动清除掉,服务器默认的超时限制一般是30分钟。

  • 使用javax.servlet.http.HttpSession接口的成员方法实现失效实现的获取和设置。

    方法声明功能介绍
    int getMaxInactiveInterval()获取失效时间
    void setMaxInactiveInterval(int interval)设置失效时间

    可以配置web.xml文件修改失效时间。

    <session-config> <session-timeout>30</session-timeout> 
    </session-config>
    

    6.4 Session的特点

  • 数据比较安全。
  • 能够保存的数据类型丰富,而Cookie只能保存字符串。
  • 能够保存更多的数据,而Cookie大约保存4KB。
  • 数据保存在服务器端会占用服务器的内存空间,如果存储信息过多、用户量过大,会严重影响服务器的性能。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/136821.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统(5-7分)

内容概述 进程管理 进程的状态 前驱图 同步和互斥 PV操作&#xff08;难点&#xff09; PV操作由P操作原语和V操作原语组成&#xff08;原语是不可中断的过程&#xff09;&#xff0c;对信号量进行操作&#xff0c;具体定义如下&#xff1a; P&#xff08;S&#xff09;&#…

Selenium自动化测试 —— 通过cookie绕过验证码的操作

验证码的处理 对于web应用&#xff0c;很多地方比如登录、发帖都需要输入验证码&#xff0c;类型也多种多样&#xff1b;登录/核心操作过程中&#xff0c;系统会产生随机的验证码图片&#xff0c;进行验证才能进行后续操作 解决验证码的方法如下&#xff1a; 1、开发做个万能…

六、展示信息添加 animation 动态效果

简介 给每个信息组件内容添加动画效果,通过 animation 来怎么增强用户浏览时的交互体验。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件:App.vue、main.ts、first.vue 、second.vue、third.vue 、fourth.vue 、fifth.vue 一、安装 animae 插件 先安装 animate…

Springboot整合规则引擎

Springboot整合Drools 规则引擎 1.添加maven 依赖坐标&#xff0c;并创建springboot项目 <!-- drools规则引擎 --> <dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.6.0.Final<…

JavaScript系列从入门到精通系列第一篇:JavaScript语言简介和它代码初体验

一&#xff1a;简介 1&#xff1a;起源 JavaScript诞生于1995年&#xff0c;它的出现主要是用于处理网页中的前端验证&#xff0c; 所谓的前端验证&#xff0c;就是指检查用户输入的内容是否符合一定的规则。 2&#xff1a;简史 JavaScript是由网景公司发明&#xff0c;起初命…

【SpringMVC】拦截器JSR303的使用

【SpringMVC】拦截器&JSR303的使用 1.1 什么是JSR3031.2 为什么使用JSR3031.3 常用注解1.4 Validated与Valid区别1.5 JSR快速入门1.5.2 配置校验规则# 1.5.3 入门案例二、拦截器2.1 什么是拦截器2.2 拦截器与过滤器2.3 应用场景2.4 拦截器快速入门2.5.拦截器链2.6登录案列权…

ZTMap是如何在相关政策引导下让建筑更加智慧化的?

近几年随着智慧楼宇概念的深入&#xff0c;尤其是在“十四五规划”“新基建”“数字经济”等相关战略和政策的引导下&#xff0c;智慧楼宇也迎来了快速发展期&#xff0c;对推动智慧城市系统的建设越来越重要。那么究竟什么是智慧楼宇呢&#xff1f;智慧楼宇其实就是整合楼宇内…

神经元量子点处理器赋能,三星QN85Z电视带来高品质视听盛宴

我们注意到近期三星发布新款Neo QLED电视QN85Z&#xff0c;有感于三星在芯片、面板技术等方面的深厚积累&#xff0c;我们对三星新发布的这款电视相当感兴趣。QN85Z新品搭载了三星“集成之芯”——神经元量子点处理器&#xff0c;搭配高端量子点Mini LED带来更为优化的画质和音…

IPV4和IPV6,公网IP和私有IP有什么区别?

文章目录 1、什么是IP地址&#xff1f;1.1、背景1.2、交换机1.3、局域网1.4、广域网1.5、ISP 互联网服务提供商 2、IPV42.1、什么是IPV4&#xff1f;2.2、IPV4的组成2.3、NAT 网络地址转换2.4、端口映射 3、公网IP和私有IP4、IPV6 1、什么是IP地址&#xff1f; 1.1、背景 一台…

机器人如何有效采摘苹果?

摘要&#xff1a;本文利用动捕数据构建拟人运动模型&#xff0c;对比观察两种苹果采摘模式&#xff0c;并对系统性能进行全面评估&#xff0c;为提高机器人采摘效率提供创新方法。 近期&#xff0c;一项关于苹果采摘机器人的有趣研究—— "Design and evaluation of a rob…

Git学习笔记8

Gitlab&#xff1a; Gitlab是利用Ruby on Rails 一个开源的版本管理系统&#xff0c;实现一个自托管的git项目仓库&#xff0c;可通过web界面进行访问公开或私有的项目。 Gitlab安装&#xff1a; 安装之前&#xff0c;将虚拟机的内存改成了4个G。内存如果太小&#xff0c;会有…

巧用“加减乘除”,停车场“碳”出节能发展新路

“绿色化、低碳化是高质量发展的关键”。中国电信以先驱姿态&#xff0c;积极贯彻“碳达峰碳中和”国家战略&#xff0c;以科技为画笔&#xff0c;绿色生态为底色&#xff0c;绘就节能低碳发展新蓝图。 在湖北省某办公楼宇&#xff0c;物业管理员因停车场照明现状发了愁。在过去…

Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

Unity 开发人员的城堡游戏引擎概述 一、简介2. Unity相当于什么GameObject&#xff1f;3. 如何设计一个由多种资产、生物等组成的关卡&#xff1f;4. 在哪里放置特定角色的代码&#xff08;例如生物、物品&#xff09;&#xff1f;Unity 中“向 GameObject 添加 MonoBehaviour”…

1_图神经网络GNN基础知识学习

文章目录 安装PyTorch Geometric安装工具包 在KarateClub数据集上使用图卷积网络 (GCN) 进行节点分类两个画图函数Graph Neural Networks数据集&#xff1a;Zacharys karate club network.PyTorch Geometric数据集介绍 edge_index使用networkx可视化展示 Graph Neural Networks…

element-table出现错位解决方法

先看示例图&#xff0c;这个在开发中还是很常遇到的&#xff0c;在table切换不同数据时或者切换页面时&#xff0c;容易出现&#xff1a; 解决方法很简单&#xff0c;官方有提供方法&#xff1a; 我们可以在重新渲染数据后&#xff1a; this.$nextTick(() > {this.$refs.…

嵌入式笔试面试刷题(day15)

文章目录 前言一、Linux中的主设备号和次设备号1.查看方法2.主设备号和次设备号的作用 二、软件IIC和硬件IIC的区别三、变量的声明和定义区别四、static在C和C中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题&#xff0c;希望大家坚持跟…

【超实用】2023年,学生上班族如何简单快速,低成本的搭建一个博客网站

文章目录 前言实操环节香港虚拟机购买博客搭建ssl证书配置备份设置 总结 前言 因为工作和生活的需要&#xff0c;我一直有博客的搭建需求。我将总结下来&#xff0c;为读者提供参考。  起初&#xff0c;我采用的是香港云虚拟主机&#xff0c;这种虚拟机极其便宜&#xff08;一…

什么样的应用程序适合使用Flutter开发桌面?

桌面应用开发的现状 在过去&#xff0c;桌面应用程序的开发通常需要使用特定于操作系统的工具和语言&#xff0c;如C、C#、Java等。这导致了高昂的开发成本和维护困难。尽管有一些跨平台桌面开发工具&#xff0c;如Electron和Qt&#xff0c;但它们在性能、用户体验和开发效率方…

Linux Static Key原理与应用

文章目录 背景1. static-key的使用方法1.1. static-key定义1.2 初始化1.3 条件判断1.4 修改判断条件 2、示例代码参考链接 背景 内核中有很多判断条件在正常情况下的结果都是固定的&#xff0c;除非极其罕见的场景才会改变&#xff0c;通常单个的这种判断的代价很低可以忽略&a…

Python3 语法简明教程

目录 0 前言1 输出语句、注释1.1 输出语句1.2 单行、多行注释 2 变量与对象、输入语句2.1 变量与对象2.2 数字类型和运算符2.3 输入语句 3 条件控制、循环语句3.1 条件控制3.2 循环语句3.2.1 while...else3.2.2 for...else 4 字典5 元组、列表5.1 元组5.2 列表 6 集合、推导式6…