session和Filter

news2024/12/24 21:56:51

session

介绍

jsp利用servlet提供的HttpSession接口识别一个用户,存储这个用户的所有访问信息。默认情况下,jsp允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化。禁止会话跟踪需要关掉它,通过将page指令中session属性值设为false来实现。

<%@ page session="false" %>

下表列出了session对象的一些重要方法:

方法功能实现
Object getAttribute(String name)返回session对象中于指定名称绑定的对象,如果不存在则返回null
Enumeration getAttributeNames()返回session对象中所有的对象名称
Long getCreationTime()返回session对象被创建的时间,以毫秒为单位,从1970年1月1号凌晨开始算起
String getId()返回session对象的ID
Long getLastAccessedTime()返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起
int getMaxInactiveInterval()返回最大时间间隔,以秒为单位。servel容器将会在这段时间内保持会话打开
void invalidate()将session无效化,解绑任何与该session绑定的对象
boolean isNew()返回是否为一个新的客户端,或者客户端是否拒绝加入session
void removeAttribute(String name)移除session中指定名称的对象
void setAttribute(String name, Object value)使用指定的名称和值来产生一个对象并绑定到session中
void setMaxInactiveInterval(int interval)用来指定时间,以秒为单位,servelt容器将会在这段时间内保持会话有效

配置web.xml文件

 <session-config>
     #定时
    <session-timeout>15</session-timeout>
 </session-config>

Servlet

介绍

Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自web浏览器获其他HTTP客户端的请求和Http服务器上的数据库或应用程序之间的中间层。

优势

  • 性能明显更好
  • servlet在web服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求
  • Servlet是独立于平台的,因为他们是Java编写的
  • 服务器上的Java安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet是可信的
  • Java类库的全部功能对Servlet来说都是可用的。它可以通过sockets和RMI机制与applets、数据库或其他软件进行交互。

任务

servlet主要执行一下主要任务:

  • 读取客户端(浏览器)发送的显式的数据。包括网页上的Html表单,或者也可以是来自applet或自定义的http客户端程序的表单
  • 读取客户端(浏览器)发送的隐式的http请求数据。包括cookies、媒体类型和浏览器能理解的压缩格式等等
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行RMI或CORBA调用,调用Web服务,或者直接计算得出对应的响应
  • 发送显示的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(Html或Xml、二进制文件(gif)、Excel等
  • 发送隐式的http响应到客户端(浏览器)。包括告诉浏览器或其他客户端被返回的文档类型,设置cookies和缓存参数,以及其他类似的任务。

部分读取HTTP头的方法

方法名称功能描述
Cookie[] getCookies()返回一个数组,包含客户端发送该请求的所有的Cookie对象
Enumeration getAttributeNames()返回一个枚举,包含提供给该请求可用的属性名称
Enumeration getParameterNames()返回一个String对象的枚举,包含在该请求种包含参数的名称
HttpSession getSession()返回与该请求关联的当前session会话,或者如果请求没有session会话,则创建一个
Object getAttribute(String name)以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回null
String getMethod()返回请求的http方法的名称,如:get、post、put
String getRequestURI()从协议名称直到http请求的第一行的查询字符串中,返回该请求的url的一部分
String getRequestedSessionId()返回有客户端指定的session会话ID
String getParameter(String name)以字符串形式返回请求参数的值,或者如果参数不存在则返回null

Filter

基本工作原理

  1. Filter程序是一个实现了特殊接口的Java类,与servelt类似。也是由Servlet容器进行调用和执行的。
  2. 当在web.xml注册了一个Filter来对某个Servlet程序进行拦截处理时,它可以决定是否将请求继续传递给Servlet程序,以及对请求和响应消息是否进行修改。
  3. 当Servlet容器开始调用某个Servlet程序时,如果发现已经注册了一个Filter程序来对该Servlet进行拦截,那么容器不再直接调用Servlet的service方法,而是调用Filter的doFilter方法,再由doFilter方法决定是否去激活service方法
  4. 但在Filter.doFilter方法中不能直接调用Servlet的service方法,而是调用FilterChain.doFilter方法来激活目标Servlet的service方法,FilterChain对象是通过Filter.doFilter方法的参数传递进来的。
  5. 只要在Filter.doFilter方法中调用FilterChain.doFilter方法的语句前后增加某些程序代码,这样就可以在Servlet进行响应前后实现某些特殊功能。
  6. 如果在Filter.doFilter方法中没有调用FilterChain.doFilter方法,则目标Servlet的service方法不会被执行,这样通过Filter就可以阻止非法的访问请求。

doFilter方法

当一个Filter对象能够拦截访问请求时,Servlet容器将调用Filter对象的doFilter方法

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException.ServletException

其中,参数request和response为web容器或Filter链中上一个Filter传递过来的请求和响应对象;参数chain为代表当前Filter链的对象。

Filter的注册与映射

1、注册Filter

一个<filter>元素用于注册一个Filter。其中,<filter-name>元素是必需的,<filter-class>元素也是必需的,<init-param>元素是可选的,可以有多个<init-param>元素。

<filter>
    <filter-name>FirstFilter</filter-name>
    <filter-class>FirstFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>GB2312</param-value>
    </init-param>
</filter>

2、映射Filter

<filter-mapping>元素用于设置一个Filter所负责拦截的资源。一个Filter拦截的资源可以通过两种方式来指定:资源的访问路径和Servlet名称。

第一种:指定资源的访问路径
<filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<url-pattern>元素中的访问路径的设置方式遵循Servlet的url映射规范

  • /*:表示拦截所有的访问请求
  • /filter/*:表示拦截filter目录下的所有访问请求,如:http://localhost:8888/testFilter_001/filter/xxxxxx .
  • /test.html:表示拦截根目录下以test.html为资源名的访问请求,访问链接只会是:http://localhost:8888/test.html。
第二种:指定Servlet的名称
<filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <servlet-name>default></servlet-name>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>
  1. <servlet-name>元素与<url-pattern>元素是二选一的关系,其值是某一个Servlet在web.xml文件中的注册名称
  2. <dispatcher>元素的设置值有4种:REQUEST、INCLUDE、FORWARD、ERROR,分别对应servlet容器调用的4种方式:
    • 通过正常的访问请求调用
    • 通过RequestDispatcher.include方法调用
    • 通过RequestDispatcher.forward方法调用
    • 作为错误响应资源调用

如果没有设置<dispatcher>子元素,则等效于REQUEST的情况。也可以设置多个<dispatcher>子元素,用于指定Filter对资源的多种调用方式都进行拦截。

img

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多模态:BLIP-2论文讲解

多模态&#xff1a;BLIP-2论文讲解 IntroductionMethod第一阶段第二阶段 实验 Introduction 多模态学习在近两年我们已经见证了他的快速发展&#xff0c;由于它是视觉-语言的交叉领域&#xff0c;我们自然地期待可以借助目前风头正盛的LLM来辅助完成多模态任务。 在这篇论文中…

【SAP Abap】X-DOC:SNRO - ABAP流水号应用

【SAP Abap】X-DOC&#xff1a;SNRO - ABAP流水号应用 1、定义表&#xff08;字段域&#xff09;2、定义流水号3、使用流水号4、测试程序 1、定义表&#xff08;字段域&#xff09; 2、定义流水号 Tcode: SNRO/SNUM&#xff0c; 根据以上创建的字段域 YDSNRO&#xff0c;创建对…

grep练习题

题目: 文件格式&#xff1a; 第1列&#xff1a;城市位置编号。 第2列&#xff1a;月份。 第3列&#xff1a;存储代码及出库年份。 第4列&#xff1a;产品代号。 第5列&#xff1a;产品统一标价。 第6列&#xff1a;标识号。 第7列&#xff1a;合格数量。 file.txt文件内容&a…

RabbitMQ入门案例及简单工程搭建

环境的搭建 这里是用Maven工程搭建的基础环境项目&#xff0c;这里的dome_rabbitmq就是父工程。 子工程 publisher&#xff1a;消息发布者&#xff0c;将消息发送到队列queueconsumer&#xff1a;订阅队列&#xff0c;处理队列中的消息 父工程的pom文件依赖 <?xml ver…

SpringCloud-11_Alibaba Sentinel

SpringCloud系列 SpringCloud-10_Alibaba Nacos SpringCloud-9、SleuthZipkinSpringCloud-8、Gateway网关服务SpringCloud-7_OpenFeign服务调用SpringCloud-6_Ribbon负载均衡SpringCloud-5_模块集群化 求帮助 富文本编辑器用着真伤心TT。。不知道编辑器发生了什么。。--- 用…

Android Studio Notification(状态栏通知) 不显示通知 解决

引言&#xff1a;在学习的过程中&#xff0c;我发现&#xff0c;无论怎么修改&#xff0c;甚至是直接复制了大佬的代码&#xff0c;我的程序都不呢个正确的弹出一个状态栏通知&#xff0c;在经过一晚上的纠缠后&#xff0c;终于找到了原因 通知不显示可能由多种原因引起&#…

C++自动推导与函数模板

自动推导、函数模板、类模板 目录 1. 自动推导出数据类型 2. 函数模板 基本概念注意事项函数模板的具体化函数模板分文件编写函数模板高级函数后置返回类型 1. 自动推导出数据类型 auto关键字 linux 系统下使用的话&#xff0c;要在编译时 —stdc11 注意&#xff1a; a…

关于B+树的介绍、用途和c++代码实现

数据结构和算法的重要性不言而喻&#xff0c;一些优秀的开源项目的核心和灵魂就是数据结构、算法。在实际的编程中我们经常可以在各种框架、算法中看见B树、B树的身影。特别是在数据库的数据库引擎中&#xff0c;它们更是占据着重要的地位。 下面我将通过简单的二叉树&#xff…

2023/5/12总结

这俩天主要花时间在项目上&#xff1a; 实现了创建群聊和添加群聊&#xff1a; 点击创建群聊&#xff1a; &#xff0c;点击确定之后&#xff0c;会分配到一个群聊&#xff0c;默认头像会是下面这个圆形的头像&#xff1a; 添加群聊&#xff1a; 如果你要加入的群聊在自己的列…

06-HTML-列表标签

1、 <ul> 标签定义无序列表。 2、<ol> 标签定义有序列表。 属性值描述compactcompact HTML5 中不支持。HTML 4.01 中不赞成使用。 规定列表呈现的效果比正常情况更小巧。 reversedreversed规定列表顺序为降序。(9,8,7...)startnumber规定有序列表的起始值。type 1A…

为什么使用ConcurrentHashMap

currentHashMap的介绍 ConcurrentHashMap是线程安全并且高效的一种容器,我们就需要研究一下ConcurrentHashMap为什么既能够保证线程安全,又可以保证高效的操作。 为什么使用ConcurrentHashMap,我们就需要和HashMap以及HashTable进行比较&#xff1f; HashMap是线程不安全的&…

唐朔飞计组 第六章运算方法简单复习

在计算机中参与运算的数有两类&#xff1a;有符号数和无符号数 int 和unsigned unsigned可以看成是正数或者绝对值。 有符号数分为原码反码和补码 原码和反码的表示范围是相同的 但是补码由于将-0的位置换成2^n所以补码表示范围比原码和反码要多一位&#xff0c; 判断溢出比较…

诚邀社区开发者参与DeepBook测试和集成

DeepBook是Sui的基础流动性层&#xff0c;Sui基金会诚挚邀请社区开发者参与其测试和集成。 DeepBook为Sui的原生中央订单簿&#xff08;Central Limit Order Book&#xff0c;CLOB&#xff09;和基础流动性层&#xff0c;将会在未来数周准备完成&#xff0c;我们邀请大家参与测…

Unity大面积草地渲染——4、对大面积草地进行区域剔除和显示等级设置

目录 1、Shader控制一棵草的渲染 2、草地的动态交互 3、使用GPUInstancing渲染大面积的草 4、对大面积草地进行区域剔除和显示等级设置 Unity使用GPU Instancing制作大面积草地效果 大家好&#xff0c;我是阿赵。 这里开始讲大面积草地渲染的第四个部分&#xff0c;对大面积草地…

零知识证明:安全定义

之前在本科的课程仅仅略微介绍了下零知识证明&#xff0c;之后自学了一些相关内容&#xff0c;但不成体系。本学期跟着邓老师较为系统地学习了 ZKP&#xff0c;发现自己之前有很多的误解&#xff0c;临近期末整理下重要内容。 参考文献&#xff1a; Goldreich O. Foundations…

C语言实现个人通讯录(功能优化)

实战项目---通讯录&#xff08;功能优化&#xff09; 1.基本思路介绍&#xff1a;1.1基本思路&#xff1a; 2.通讯录的具体实现&#xff1a;2.1 通讯录的建立&#xff1a;2.2通讯录功能&#xff1a; 3.具体功能函数的实现&#xff1a;3.1 增添联系人&#xff1a;3.2 删除联系人…

从零开始学习JVM--初识Java虚拟机

1 虚拟机与Java虚拟机 1.1 基本介绍 所谓虚拟机&#xff08;Virtual Machine&#xff09;。就是一台虚拟的计算机。它是一款软件&#xff0c;用来执行一系列虚拟计算机指令。大体上&#xff0c;虚拟机可以分为系统虚拟机和程序虚拟机。 系统虚拟机&#xff1a;完全对物理计算…

树莓派(主)与STM32(从)使用SPI通信(持续更新中)

1.实验目的 使用树莓派作为主机向 STM32 从机发送数据&#xff0c;STM32 收到数据后通过串口的方式将数据打印到电脑上&#xff0c;同时返回给树莓派数据。树莓派接收到数据后打印在控制台上。 2.SPI 简介 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接…

进程控制下(程序替换部分)

目录&#xff1a; 1. 进程程序替换的原理 2.将磁盘的数据和代码加载进物理内存 3.程序替换函数的基本使用 ----------------------------------------------------------------------------------------------------------------------------- 1. 进程程序替换的原理 蓝色框内…

图解LeetCode——48. 旋转图像

一、题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 二、示例 2.1> 示例 1&#xff1a; 【输入】matrix [[1,2,3],[…