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.hqwc.cn/news/112467.html

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

相关文章

jvm中对象创建、内存布局以及访问定位

对象创建 Java语言层面&#xff0c;创建对象通常&#xff08;例外&#xff1a;复制、反序列化&#xff09;仅仅是一个new关键字即可&#xff0c;而在虚拟机中&#xff0c;对象&#xff08;限于普通Java对象&#xff0c;不包括数组和Class对象等&#xff09;的创建又是怎样一个过…

练习敲代码速度

2023年9月18日&#xff0c;周一晚上 今晚不想学习&#xff0c;但又不想玩游戏&#xff0c;于是找了一些练习敲代码的网站来玩玩&#xff0c;顺便练习一下敲代码的速度 目录 参考资料个人推荐第一个 第二个第三个 参考资料 电脑打字慢&#xff0c;有哪些比较好的练打字软件&a…

时间序列论文-聚类和异常检测(一)

这篇文章摘自&#xff0c;知乎&#xff1a;https://www.zhihu.com/question/29507442/answer/1212624591?utm_id0 写的很好&#xff0c;就记录一下。 两篇关于时间序列的论文 原文链接&#xff1a;两篇关于时间序列的论文 这次整理的就是清华大学裴丹教授所著的两篇与时间序…

深眸科技迭代深度学习算法,以AI机器视觉技术扩围工业应用场景

智能制造是制造业数智化转型升级的发展方向&#xff0c;在当前以高端装备制造为核心的工业4.0时代背景下&#xff0c;越来越多的制造企业意识到机器视觉对于提高效率、降低成本&#xff0c;从而提升企业效益的意义。 目前&#xff0c;机器视觉已成为制造业迈向智能制造过程中极…

Docker的基本操作

Docker的基本操作 操作常见指令 # 推送镜像到服务 docker push # 从服务拉去镜像 docker pull # 构建镜像 docker build # 保存镜像为一个压缩包 docker save # 加载镜像 docker load镜像加载、删除等 拉取nginx docker pull nginx查看镜像 docker images # 只查看id doc…

Jenkins List Git Branches插件 构建选择指定git分支

List Git Branches Parameter | Jenkins pluginAdds ability to choose from git repository revisions or tagshttps://plugins.jenkins.io/list-git-branches-parameter/ 1、安装组件 List Git Branches 2、验证功能 1&#xff09;新建任务 2&#xff09;新增构建参数 3&…

路由器端口转发

什么是路由器端口转发 路由器端口转发是一种网络配置技术&#xff0c;用于将公共网络&#xff08;如互联网&#xff09;上的请求转发到私有网络中的特定设备或服务。它允许外部设备通过路由器访问内部网络中的设备或服务&#xff0c;实现网络上的通信和互动。 路由器端口转发…

Python 基础入门

给我家憨憨写的python教程 ——雁丘 Python解释器Pycharm的安装部署 关于本专栏一 Python简介1.1 Python优点1.2 支持的编程方式1.3 版本兼容问题1.4 Python的开发环境1.4.1 常用的 Python 编辑器1.4.2 常用的 Python IDE1.4.3 Python IDLE1.4.4 第三方库安装 1.5 Python 的运…

【云服务器开放端口详细教程~来了】

你不知道我真的会哭 云服务器开放端口详细教程来了 前言 一、常见云服务器端口的认识 ● 云服务器端口一般是指 TCP/IP 协议中的端口&#xff0c;端口号的范围从 0 到 65535&#xff0c;比如用于浏览网页服务的 80 端口&#xff0c;用于 FTP 服务的 21 端口等等。 ● 当一…

基于GBDT+Tkinter+穷举法按排队时间预测最优路径的智能导航推荐系统——机器学习算法应用(含Python工程源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境Pycharm 环境Scikit-learnt 模块实现1. 数据预处理1&#xff09;加载数据集2&#xff09;时间划分与保存3&#xff09;处理天气预报数据4&#xff09;增加特征5&#xff09;合并特征值 相关其它博客工程源代码下载…

【Vue入门】语法 —— 插值、指令、过滤器、计算属性、监听器

目录 一、模版语法 1.1 插值 1.1.1 文本 1.1.2 html解析 1.1.3 属性 1.1.4 表达式 1.2 指令 1.2.1 核心指令 1.2.3 动态参数 二、过滤器 2.1 局部过滤器 2.2 全局过滤器 三、计算属性 四、监听器 五、排座案例 小结&#xff1a;计算属性和监听属性的区别 一、模…

无涯教程-JavaScript - RAND函数

描述 RAND函数返回大于或等于0且小于1的均匀分布的随机实数。每次计算工作表时,都会返回一个新的随机实数。 语法 RAND ()争论 RAND函数没有参数。 Notes 您可以在a和b之间生成一个随机实数,其中 RAND ()*(b-a)a 如果要使用RAND生成随机数,但又不想每次计算单元格时都更改…