基础知识一览3

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

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6