基础知识一览3
创始人
2024-05-16 07:00:19
0

这里写目录标题

  • 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依赖坐标

javax.servletjavax.servlet-api3.1.0provided

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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get方法执行");}@Overrideprotected 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("构造函数被执行了");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("正在初始化");}@Overridepublic 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");}@Overridepublic 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 {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("ServletContext被创建了");}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("ServletContext被销毁了");}
}

应用场景:

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

2.监听Session的创建和销毁

@WebListener
public class SessionListenerDemo implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent httpSessionEvent) {System.out.println("session被创建了");}@Overridepublic 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

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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...