学完JavaWeb阶段有一段时间了,在进入框架学习之前,把JavaWeb三大组件做个总结记录,为框架学习铺点基础.

一、什么是JavaWeb三大组件?

Servlet,Listener,Filter.它们在JavaWeb开发中分别提供不同的功能.

二、三大组件介绍

1、Servlet

1.1 servlet介绍

广义上说,servlet是运行在web服务器或应用服务器的程序,用来处理客户端请求的动态资源.Servlet = Service + Applet,表示小服务程序。狭义上来说,狭义的Servlet是指Java语言实现的一个接口,该接口有一个实现类为GenericServlet,该实现类有一个子类为HttpServlet,而我们实际开发中用的比较多的,就是我们通过根据具体的业务需求而继承HttpServlet来创建的servlet.

1.2 创建servlet

通常来说,创建servlet有三种方式:实现Servlet接口,继承GenericServlet类,继承HttpServlet类.通常最后一种用的比较多,在开发中,可以自己手动地创建servlet,但是要记得配置web.xml(web2.5下).但是通常还是借助eclipse等编辑器快速创建servlet即可.

1.3 servlet的配置

简单说就是web2.5的项目中,在web.xml配置文件中的设置修改.在eclipse中,该配置文件的位置是在WebContent/WEB-INF中

<servlet><description></description><display-name>servlet名称</display-name><servlet-name>servlet名称</servlet-name><servlet-class>servlet的全限定名,即包含了包名了的</servlet-class></servlet><servlet-mapping><servlet-name>servlet名称</servlet-name><url-pattern>匹配路径,例如/addServlet</url-pattern></servlet-mapping>

如果是通过eclipse快速创建的servlet,则web.xml会自动生成以上信息,自己只需要手动地按需求改一下匹配路径就好了,当然不改也没关系.关于这个匹配路径,有几点要注意下,一个是servlet中可以有多条匹配路径与之对应,意思就是说 匹配路径,例如/addServlet 这行代码,可以多写几行,里面的匹配路径可以为多个.到时候无论访问哪一个路径,都是会跳转到该servlet的.另外一个就是匹配问题.这里面涉及到完全匹配,目录匹配以及扩展名匹配.这其中完全匹配的优先级最高.需要注意⚠️的是,如果自己手动删除了一个servlet,则需要到web.xml中手动删除相对应的servlet的配置信息,这一步别忘了.

1.4 Servlet的生命周期

当我们谈论Servlet时,我们实际上使用的是servlet对象,那么这个对象是什么时候创建和销毁的.这个就是servlet的生命周期.简单来说,Servlet的生命周期可被定义为从创建到毁灭的整个过程.参看以下:

Servlet 通过调用 init () 方法进行初始化。

void init(ServletConfig)

servlet的初始化方法,只在创建servlet实例时候调用一次,Servlet是单例的,整个服务器就只创建一个同类型Servlet,servlet可以在第一次接受请求时被创建,也可以在服务器启动时就被创建.这个时间点的设置,需要在web.xml的中添加一条配置信息 < load-on-startup>5< /load-on-startup>,当值为0或者大于0时,表示容器在应用启动时就加载这个servlet,当是一个负数时或者没有指定时,则指示容器在该servlet被请求时才加载。

Servlet 调用 service() 方法来处理客户端的请求。


void service(ServletRequest,ServletResponse)

servlet的处理请求方法,在servle被请求时,会被马上调用,每处理一次请求,就会被调用一次。ServletRequest类为请求类,ServletResponse类为响应类

Servlet 通过调用 destroy() 方法终止(结束)。

void destory()

最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
  2、Filter

2.1 filter简介

filer是javaweb中的过滤器,它与servlet一样,也有三个生命周期方法,同时在web.xml的配置也差不多.但是两者的主要功能不同,servlet负责处理请求,filter负责拦截请求和放行.可以实现Url级别的权限访问,敏感词汇过滤,解决编码问题等等.

2.2 filter实现原理

Filter接口中有一个doFilter方法,当我们编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:

调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问web资源)。
调用目标资源之后,让一段代码执行。
  web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,我们可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。

2.3 filter实现步骤

编写java类实现Filter接口,并实现其doFilter方法。
在 web.xml 文件中使用和元素对编写的filter类进行注册,并设置它所能拦截的资源。
  范例

package com.test.web.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;public class FilterDemo01 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("----过滤器初始化----");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//对request和response进行一些预处理request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");System.out.println("Filter执行前");chain.doFilter(request, response);  //放行System.out.println("Filter执行后");}@Overridepublic void destroy() {System.out.println("----过滤器销毁----");}
}

重要的一步,在web.xml中配置拦截规则

<?xml version="1.0" encoding="UTF-8"?><!--配置过滤器--><filter><filter-name>FilterDemo01</filter-name><filter-class>me.gacl.web.filter.FilterDemo01</filter-class></filter><!--映射过滤器--><filter-mapping><filter-name>FilterDemo01</filter-name><!--“/*”表示拦截所有的请求 --><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

2.4 filter的四种拦截方式

REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;

  FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、<jsp:forward>标签都是转发访问;INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、<jsp:include>标签都是包含访问;ERROR:当目标资源在web.xml中配置为<error-page>中时,出现异常后,转发到目标资源时,会执行过滤器。

3、Listener(主要是javaWeb中的监听器)

3.1 监听器简介

监听器就是一个实现了特定接口的java类,这个java类用来监听另外一个java类的方法调用或者属性改变,当被监听的对象发生上述事件后,监听器的某个方法就会立即执行.这里就涉及几个相关概念:

事件源:被监听的对象

事件:就是事件源的改变,一旦发生变化,事件就会传递给监听器对象,监听器的对应方法就会执行

监听器:监听的对象

绑定监听器:在事件上绑定监听器

3.2监听器的分类

在servlet的规范中定义了多种类型的监听器,主要用来监听ServletContext,HttpSession,ServletReques三个域对象.按照功能划分,可以分成三类:

一类:监听三个域对象的创建和销毁的监听器
二类:监听三个域对象的属性变更的监听器(xxxAttribute())
三类:监听HttpSession对象中的JavaBean的状态的改变.(绑定,解除绑定,钝化,活化)       
三、拓展

1、servlet是不是单例设计模式?

servlet并不是单例设计模式,如果有多个Url映射到同一个servlet时,就会出现多个实例.

虽然 Servlet 在多数情况下只有一个实例。但它并不是单例设计模式,即不是真正的单例。

2、serlvet线程安全问题?

基于 JVM 对多线程的支持,这样可以提高代码的执行效率。 不需要为每一个请求都要单独创建/销毁 Servlet(执行 init(), desdroy() )。
同一段代码可以在同一时间被多个请求同时执行。 Servlet 是普通的 Java 类,因此没有对其做线程安全的处理

JavaWeb三大组件小结相关推荐

  1. JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)

    JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference 转载于:https://www.cnblogs.com/Jeremy2001 ...

  2. 【超详解】JavaWeb三大组件讲解

    文章目录 前言: 一.Servlet 二.Filter 三.Listener 总结 前言: JavaWeb三大组件指的是:Servlet.Filter.Listener,三者提供不同的功能,然而很多人 ...

  3. javaweb 三大组件之Severlet

    javaweb 三大组件之Severlet Servlet介绍 Javaweb三大组件 Servlet.Filter.Listener.今天我们就来了解下Servlet. 一:Servlet的作用: ...

  4. JavaWeb三大组件之一——Filter过滤器源码解析(全面手撕Filter源码,需要耐心看完)

    什么是Filter? 本文所说的Filter是JavaWeb中常见常使用的过滤器.Filter的作用是拦截前端发送给后端的请求,一般是用于权限过滤.日志记录.图片转换.加密.数据压缩等操作. 大致流程 ...

  5. JavaWeb三大组件之Servlet

    为什么80%的码农都做不了架构师?>>>    ###Servlet的生命周期### 与Servlet的生命周期相关的方法有: void init(ServletConfig) 服务 ...

  6. JavaWeb三大组件(ServletFilterListener)

    目录 一.Servlet 1.1概念 1.2步骤 1.3执行原理 1.4生命周期 1. 被创建:执行init方法,只执行一次 2. 提供服务:执行service方法,执行多次 3. 被销毁:执行des ...

  7. javaWEB的三大组件(入门基础总结)

    Javaweb三大组件 Servlet.Filter.Listener. 一:Servlet的作用: 接受请求参数.处理请求,响应结果 二:Servlet的生命周期  void init(Servl ...

  8. 【Java】javaWeb中的三大组件与八大监听器

    一.三大组件 JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.F ...

  9. JavaWeb框架(四):JavaWeb项目基于三大组件实现的公司管理系统

    MVC实战项目 Web 三大组件实现 公司管理系统 需求: 项目实战 基于会话跟踪技术实现登录功能 基于Filter过滤器实现登录验证功能 基于Listener监听器监听ServletCntext对象 ...

  10. java web三大组件之filter过滤器

    过滤器是java web中相当重要的组成成分,是JavaWeb三大组件之一,它与Servlet很相似.不过过滤器有以下三条特性: 过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servle ...

最新文章

  1. python接口返回json处理_python 接口返回的json字符串实例
  2. jieba分词错误_如何掌握分词技术,你需要学会这些
  3. 二次开发是什么意思_什么是框架?为什么要使用框架?我告诉你理由哦!
  4. 第 6 章 认知吝啬鬼
  5. Ponemon:优化SIEM时所面临的挑战
  6. 【codevs1227】方格取数2(最大流费最大流-模板
  7. matlab课堂笔记,厦门大学matlab第四次课程笔记 PTB的简单讲解
  8. android图片模糊处理
  9. MATLAB模糊控制算法,驾驶员制动意图识别
  10. Java面试时,该如何准备亮点?
  11. 数据库中ER图(一对多、一对一、多对多)讲解
  12. 深度学习 Deep Learning简介 (二):浅层学习(Shallow Learning)和深度学习(Deep Learning)
  13. 路飞学城Python-Day1
  14. 数学基础知识总结 —— 2. 常用积分公式
  15. U盘分区损坏了还能恢复吗?双重方法解难题
  16. learn git branching 重新开始
  17. 计算机网络技术之局域网
  18. 2022起重机械指挥考试题模拟考试题库及在线模拟考试
  19. 论文阅读笔记- Dremel
  20. 面试字节跳动测试岗位一般问什么测试点_字节跳动校招流程详解(附带笔试真题+面经)...

热门文章

  1. 创建ipadWEB应用程序到主屏幕
  2. 在HP-UX上安装Oracle11.2.0.3修改maxfiles
  3. javascript的table 对象 属性 方法
  4. Java容器工具类Arrays
  5. JAVA语言基础-面向对象(方法重写概述及其应用)
  6. linux下无法创建组
  7. Docker结合Consul实现的服务发现(一)
  8. centos下安装Anaconda
  9. 人们为何喜欢在社交网络发布个人状态?
  10. LeetCode Sumary - Graph