基础知识一览3

news2024/11/14 13:41:26

这里写目录标题

  • 1.Servlet
    • 1.1 入门
    • 1.2 什么是Servlet
    • 1.3 Servlet的作用
    • 1.4 Servlet生命周期
    • 1.5 Servler的体系结构
    • 1.6 Servler的两种配置方式
  • 2.Filter
    • 2.1 Filter拦截路径配置
    • 2.2 过滤器链
    • 2.2 入门
    • 2.3 过滤器链
    • 2.4 过滤器生命周期
  • 3.Listener
    • 3.1 监听器分类
      • 3.1.1 一类监听器
  • 4.ServletContext
    • 4.1 ServletContext的生命周期
    • 4.2 ServletContext的作用
  • 5.Cookie
    • 5.1 Cookie的分类
    • 5.2 Cookie唯一标识
  • 6.Session

1.Servlet

Servlet是JavaWeb三大组件之一,且最重要.

  • Servlet
  • Filter
  • Listener

Servlet是javaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

1.1 入门

1.导入Servlet依赖坐标

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
  <scope>provided</scope>
</dependency>

2.自定义类实现Servlet接口,并重写接口中的所有方法

public class ServletDemo implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init执行");
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service执行");
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {
        System.out.println("destroy执行了");
    }
}

3.在类上使用@WebServlet 注解,配置该 Servlet的访问路径

@WebServlet("/demo")
public class ServletDemo implements Servlet {
}

1.2 什么是Servlet

servlet是用来给浏览器响应动态资源

1.3 Servlet的作用

用来处理客户端发送过来的请求,并对该请求进行响应

  • 获取请求数据
  • 处理请求
  • 完成响应

1.4 Servlet生命周期

  • 当用户通过浏览器首次访问某个Servlet时,tomcat会调用servlet的构造函数创建
    一个Servlet对象,之后调用servlet下的init方法(仅执行一次)
  • 调用servlet下的service方法,在service方法中判断本次是GET/POST方法,调用servlet下的doget/dopost方法
  • 以后从客户端浏览器每次向服务端对当前servlet发起请求,仅仅只执行其下的
    service__>doget/dopost
  • 停止服务器(正常/中断)/重新加载项目 servlet销毁
    正常停止服务器/重新加载项目会执行destory方法

1.5 Servler的体系结构

在这里插入图片描述
我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet

@WebServlet("/demo2")
public class HttpServletDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get方法执行");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post方法执行");
    }
}

1.6 Servler的两种配置方式

Servlet 从3.0版本后开始支持使用注解配置,3.0版本前只支持 XML 配置文件的配置方式

  • 注解方式:

在这里插入图片描述

  • xml方式:
    在 web.xml中配置该Servlet

2.Filter

作用:在HttpServletRequest到达 目标资源(Servlet/jsp,png,css.js) 之前,拦截客户的HttpServletRequest .根据需要检查HttpServletRequest,也可以修HttpServletRequest 头和数据.
在这里插入图片描述

2.1 Filter拦截路径配置

Filter 可以根据需求,配置不同的拦截资源路径
- List item

  • 拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截。
  • 目录拦截:/user/*:访问/user下的所有资源,都会被拦截
  • 后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截
  • 拦截所有:/*:访问所有资源,都会被拦截

2.2 过滤器链

  • 一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链

  • 注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序

2.2 入门

@WebFilter("/*")
public class MyFirstFilter implements Filter {

    static {
        // 加载:JVM将硬盘上的MyFirstFilter.class字节码中的内容通过流的方式读取到内存
        System.out.println("字节码正在被加载到内存.....");
    }

    public MyFirstFilter() {
        System.out.println("构造函数被执行了");
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("正在初始化");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter begin");
        //放行,继续访问本次的目标资源,本次请求的是index.jsp,index.jsp目标资源
        //chain.doFilter(request, response);
        System.out.println("doFilter end");
    }

    @Override
    public void destroy() {
        System.out.println("destroy被执行了");
    }
}

2.3 过滤器链

注解配置Filter,而这种配置方式的优先级是按照过滤器类名(字符串)的自然排序。

比如有如下两个名称的过滤器 : BFilterDemo 和 AFilterDemo 。那一定是 AFilterDemo 过滤器先执行。

这个也是注解配置过滤器链的缺点

2.4 过滤器生命周期

  • 服务器启动就创建
  • 当过滤器文件发生改变/服务器正常关闭,会执行destroy方法,销毁过滤器
    如果中断服务器,destroy方法没有执行,过滤器会被销毁

Filter的生命周期和WEB应用的生命周期一致(ServletContext)

Web核心技术之Filter过滤器
复习_过滤器


3.Listener

监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件

Listener分类:JavaWeb中提供了8个监听器
在这里插入图片描述

3.1 监听器分类

一类监听器:监听域对象的创建和销毁

  • 监听ServletContext的创建和销毁
  • 监听session的创建和销毁
  • 监听request的创建和销毁

二类监听器:监听域对象的属性变更

  • 监听ServletContext域对象的属性变更
  • 监听Session域对象的属性变更
  • 监听request域对象的属性变更

所谓的域对象的属性变更,就是向域对象中进行以下操作时

  • *.setAttribute(name,obj);
  • *.removeAttribute(name);
  • *.getAttributeNames();
  • *.getAttribute(name);

三类监听器:监听JAVABEAN对象在Sessioin中的状态变更(绑定,解绑,钝化,活化)

  • 1.当我们将一个JAVABEAN对象绑定在Session中时,称为JAVABEAN对象被绑定了
    session.setAttribute(“k1“,new User());
  • 2.当我们将一个JAVABENA对象从Session中移除时,称为JAVABEAN对象被解绑了.
    session.removeAttribute(“k1“);
  • 3.服务器正常关闭的时候,session被序列化到硬盘上了.当session中的对象也被序列化到硬 盘上,这个过程称之为钝化
  • 4.当服务器再次启动的时候,将硬盘上的session读取到内存,而且session中的对象也被读
    取到内存,这个过程称之为JAVABEAN对象的活化

3.1.1 一类监听器

1.监听ServletContext的创建和销毁

@WebListener
public class ServletContextListenerDemo implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext被创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext被销毁了");
    }
}

应用场景:

  • contextInitialized:取配置文件是非常耗时的事情,我们可以将读取配置文件等类似程序放置在监听ServletContext的区域来执行
  • contextDestroyed:可以将WEB中我们声明过的资源在这里统一进行回收

2.监听Session的创建和销毁

@WebListener
public class SessionListenerDemo implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("session被创建了");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("session被销毁了");
    }
}

session的生命周期

  • 何时创建
    访问服务端的动态资源首次遇到request.getSession();
  • 何时销毁
    • session.invalidate();
    • session超时
    • 非正常关闭服务器

应用场景:

  • 通过监听session的创建和销毁我们可以粗略的估计某段时间内,访问web的人数
  • 如果有需要,我们可以通过监听session的销毁:我们可以将session中的数据保存下来

3.监听Request的创建和销毁


4.ServletContext

Tomcat启动的时候,需要识别webapps下的各个WEB应用,识别各个WEB应用的同
时为每个WEB应用创建对应的对象ServletContext,一个WEB应用对应一个
ServletContext.

每个ServletContext中都有一个很大的MAP,并且tomcat在启动之初就向
这个MAP中放入了大量的键值对的数据.当然我们也可以通过程序向这个大的MAP中
放入键值对的数据.

注意:一个web应用对应唯一的一个ServletContext对象

4.1 ServletContext的生命周期

同整个web应用的生命周期一致
在这里插入图片描述

4.2 ServletContext的作用

  • 1.如何获取ServletContext对象
    ServletContext servletContext=getServletContext();

  • 2.多个Servlet之间共享数据
    由于一个WEB应用只有一个ServletContext对象,当我们在访问服务端的Servlet时,都可以在Servlet中获取到当前应用唯一的ServletContext对象,所以可以利用ServletContext对象来实现共享数据.

  • 3.获取到WEB项目下指定资源

  • 4.获取到整个WEB全局的配置信息

  • 5.获取到文件的mime类型

5.Cookie

客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问

Cookie是保存在客户端的,Session是保存在服务端的

5.1 Cookie的分类

  • 会话级别:不设置有效期,默认的,关闭了浏览器Cookie就销毁了.
  • 持久级别:设置有效期,关闭浏览器也不会销毁的Cookie.

5.2 Cookie唯一标识

domain(域名) + path(路径) + name
如果路径和名称一样,两次addCookie(),后者将覆盖前者。

Cookie


6.Session

服务端会话跟踪技术:将数据保存到服务端

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

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

相关文章

ESP32设备驱动-GA1A12S202光线传感器驱动

GA1A12S202光线传感器驱动 1、GA1A2S202介绍 GA1A1S202 对数刻度模拟光传感器使用起来非常简单,只需添加电源,然后监控模拟输出。大多数光传感器对光强度具有线性响应,这意味着它们对低光水平非常不敏感,然后在高光水平下达到最大值。另一方面,该传感器具有对数响应,这…

第九届蓝桥杯省赛 C++ B组 - 乘积最大

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;乘积最大 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥杯的小伙伴整理常考算法题解&#xff0c;祝大家…

Thread的join()方法的作用

文章目录官方文档对join()的解释&#xff1a;结合实例解释官方文档对join()的解释&#xff1a; Thread.join() method javadocs&#xff08;点击跳转&#xff09; join() Waits for this thread to die. 线程类的 join()方法将等待子线程完成&#xff0c;然后继续当前线程。j…

【Python】常见的时间操作(时间区间、时间相加减、指定年月天数等。。。

前言 记录在Python中使用的时间操作&#xff0c;方便以后查找。 在使用Python中&#xff0c;常会遇到关于时间的操作。 虽说每次都能借助搜索引擎找到解决的方法&#xff0c;但好记性不如烂笔头&#xff0c;遂有此文。 暂时记录了笔者所使用过的Python关于时间的操作&#xff0…

人世正道沧桑,她亦奋力向前 --读《李清照传》有感

有一次陪小孩晨读&#xff0c;朗诵诗歌&#xff0c;读到了李清照的《夏日绝句》&#xff1a;“生当作人杰&#xff0c;死亦为鬼雄。至今思项羽&#xff0c;不肯过江东”。这首诗是1129年&#xff0c;李清照在芜湖的乌江县触景生情&#xff0c;有感而作的。这首诗写得大气磅礴&a…

JQuery总结(一)

JQUERY概述&#xff1a; JQUERY和DOM相互转换&#xff1a; 基础选择器&#xff1a; 筛选选择器&#xff1a; show hide toggle方法 jQuery hover方法 jQuery stop()方法 例子&#xff1a;显示、隐藏、切换 button{/* 随着字体大小变化,button跟着变化大小 */font-size: 20px;ba…

【Git】国内代码托管中心码云(Gitee)

9、国内代码托管中心码云(Gitee) 9.1、简介 众所周知&#xff0c;GitHub 服务器在国外&#xff0c;使用 GitHub 作为项目托管网站&#xff0c;如果网速不好的话&#xff0c;严重影响使用体验&#xff0c;甚至会出现登录不上的情况。针对这个情况&#xff0c;大家也可以使用国…

边界框回归 Bounding-Box Regression

文章目录边界框回归&#xff08;Bounding-Box Regression&#xff09;一、边界框回归简介二、边界框回归细节三、相关问题思考1. 为什么使用相对坐标差?2. 为什么宽高比要取对数?3. 为什么IoU较大时边界框回归可视为线性变换&#xff1f;边界框回归&#xff08;Bounding-Box …

协调中心性能大对比:zookeeper是如何解决负载均衡问题的

作为分布式系统的一个长久话题&#xff0c;协调中心的性能是一个很有意思的突破口。 作为java的分布式协调中心&#xff0c;常见的有zookeeper&#xff0c;redis &#xff0c;memcache等全局性功能的组件&#xff0c;也有MySQL&#xff0c;mongoDB之类的数据库形持久存储。 两…

PyCharm无法打开,提示Internal error错误。

安装LeetCode插件后&#xff0c;重新打开PyCharm后&#xff0c;出现该错误。 删除安装目录下的 plugins 文件夹后&#xff0c;重新打开后&#xff0c;又出现该错误。 重新把回收站的文件夹恢复后&#xff0c;再次打开还是之前那个错误。 尝试了 cmd ,powershell&#xff0c;管…

Python Flask构建微信小程序订餐系统 (五)

🔥 微信小程序登录态 🔥 所谓登录态,就是程序在运行时,能够识别当前用户,能够证明自己的唯一性且合法。 WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器);Restful服务通过客户端传过来唯一ID,来识别调用用户。 维护登录态的原因 有自身…

行为型模式-模板方法模式

1.概述 在面向对象程序设计过程中&#xff0c;程序员常常会遇到这种情况&#xff1a;设计一个系统时知道了算法所需的关键步骤&#xff0c;而且确定了这些步骤的执行顺序&#xff0c;但某些步骤的具体实现还未知&#xff0c;或者说某些步骤的实现与具体的环境相关。 例如&…

机器学习(五):机器学习算法分类

文章目录 机器学习算法分类 一、监督学习 1、回归问题 2、分类问题 二、无监督学习 三、半监督学习 四、强化学习 机器学习算法分类 根据数据集组成不同&#xff0c;可以把机器学习算法分为&#xff1a; 监督学习无监督学习半监督学习强化学习一、监督学习 定义&…

Python初学者看过来啊,老油条来复习

嗨嗨嗨&#xff0c;我又又又又来了 目录 一、Python常用的基本语句 1、format字符串格式化 2、连接字符串 3、if...else条件语句 4、for...in、while循环语句 5、import导入 2.详细介绍 对于初学者来说&#xff0c;想要学好Python语言&#xff0c;必须从最基本的知识开…

为了方便项目打包,我用Node写了个git-tag工具

目录 前言 实现过程 起步 npm全局命令 功能实现 功能验证 代码发布 写在最后 前言 在使用git执行打包操作时&#xff0c;我们常常会根据场景在tag中增加一些标识。 以基准版本为1.0.0为例&#xff1a;软件开发初期可以定义1.0.0-alpha.0&#xff0c;开发阶段是1.0.0-b…

【面试克星】【公式少代码少话多】Vins-Mono预积分相关知识点总结与概述

前言 Vins-Mono预积分相关的公式和代码可以在各个博客中找到。本文将充当一个帮助大家快速理解预积分、中值积分相关概述的角色&#xff0c;带大家理解代码&#xff0c;应对面试。 下面会分成三步&#xff0c;来帮助大家充分理解这个过程。步骤是按照顺序来写的。 中值积分和…

学习MapStruct

概述 MapStruct是一个Java注释处理器&#xff0c;用于生成类型安全的bean映射类。 您要做的就是定义一个映射器接口&#xff0c;该接口声明任何必需的映射方法。在编译期间&#xff0c;MapStruct将生成此接口的实现。此实现使用简单的Java方法调用在源对象和目标对象之间进行映…

<<零入门容器云网络实战>>技术专栏之文章目录

建议: 1、资源 零入门容器云网络实战 链接: https://pan.baidu.com/s/1nPLRkAwjItAHmtEU2T1F4g 提取码: rrpd 2、技术沟通渠道 342498897 3、字体颜色说明 绿色字体&#xff0c; 表示已经发表&#xff0c;可以观看 灰色字体&#xff0c; 表示未发表 4、专栏介绍 1 <<…

【小知识点】如何在 git 中取消 __pycache__ 文件

文章目录如何在 git 中取消 **pycache** 文件CryptographyDeprecationWarning 异常如何在 git 中取消 pycache 文件 如果使用 PyCharm 运行代码&#xff0c;会在 Python 脚本所在目录生成 __pycache__ &#xff0c;每次提交到 git 都会包含该目录&#xff0c;本篇博客我们要将其…

插入排序算法的实现和优化~

插入排序的基本思想&#xff1a; 在一个已排好序的记录子集的基础上&#xff0c;每一步将下一个待排序的记录有序插入到已排好序的记录子集中&#xff0c;直到将所有待排记录全部插入为止 直接插入排序&#xff1a; 直接插入排序是一种最基本的插入排序方法&#xff0c;元素…