Java Servlet和Java Filter简介

一:简介servlet

1.什么是Servlet?

Servlet可以通过多种方式进行描述,具体取决于上下文:

(1)Servlet是一种用于创建web应用程序的技术

(2)Servlet是一个API,提供许多接口和类。

(3)Servlet是一个扩展服务器功能并响应传入请求的类。

(4)Servlet是一个web组件,部署在服务器上用于创建动态web页面。

(5)Servlet是一个必须实现的接口,用于创建任何Servlet。

一个servlet的核心是一个java类; 它可以处理HTTP请求。servlet是一种Java编程语言类,用于扩展托管通过请求 - 响应编程模型访问的应用程序的服务器的功能。尽管servlet可以响应任何类型的请求,但它们通常用于扩展Web服务器托管的应用程序。对于此类应用程序,Java Servlet技术定义了特定于HTTP的servlet类。

2.Servlet生命周期

servlet的生命周期由部署了servlet的容器​​控制。当请求映射到servlet时,容器执行以下步骤。

  >>如果servlet的实例不存在,则为Web容器

  >>调用服务方法,传递请求和响应对象

init()service()destroy()是Servlet生命后期的核心,他们由每个Servlet实现,在特定时间由服务器调用

(1)在servlet 生命周期的初始化阶段,Web容器通过调用init()方法初始化servlet实例,并传递实现该javax.servlet.ServletConfig接口的对象。此配置对象允许servlet 从Web应用程序访问名称 - 值初始化参数。

(2)初始化之后,servlet实例可以为客户端请求提供服务。每个请求都在自己独立的线程中提供服务。Web容器service()为每个请求调用servlet 的方法。该service()方法确定正在进行的请求的类型,并将其分派给适当的方法来处理请求。servlet的开发人员必须为这些方法提供实现。如果对servlet未实现的方法发出请求,则调用父类的方法,通常会导致向请求者返回错误。

(3)最后,Web容器调用destroy()使servlet停止服务的方法。这个destroy()方法init()在servlet的生命周期中只调用一次

3.图解Java Servlet

Java servlet详细信息

                                           

二:过滤器(Filter)

FIlter是一个对象,可以将转换一个请求或响应的包头和内容,过滤器与Web组件的不同之处在于过滤器通常不会自行创建响应。相反,过滤器提供可以“附加”到任何类型的Web资源的功能。因此,过滤器不应该对作为过滤器的Web资源有任何依赖性; 这样,它可以由多种类型的Web资源组成。

过滤请求响应

1.Filter主要任务是:

  • 查询请求并采取相应措施。

  • 阻止请求和响应对进一步传递。

  • 修改请求标头和数据。您可以通过提供请求的自定义版本来完成此操作。

  • 修改响应标头和数据。您可以通过提供自定义版本的响应来完成此操作。

  • 与外部资源互动。

过滤器的应用包括身份验证,日志记录,图像转换,数据压缩,加密,标记化流,XML转换等。你可以按特定顺序配置由一个零个,一个或多个过滤器链过滤的Web资源。在部署包含组件的Web应用程序时指定此链,并在Web容器加载组件时实例化该链。

2.dofilter方法主要作用

  • 检查请求标头。

  • 如果过滤器希望修改请求标头或数据,请自定义请求对象。

  • 如果过滤器希望修改响应标头或数据,请自定义响应对象。

  • 调用过滤器链中的下一个实体。如果当前过滤器是链中以目标Web组件或静态资源结束的最后一个过滤器,则下一个实体是链末尾的资源; 否则,它是WAR中配置的下一个过滤器。过滤器通过调用链对象上doFilter方法调用下一个实体,传入它所调用的请求和响应,或者它可能创建的包装版本。或者,过滤器可以选择通过不调用调用下一个实体来阻止请求。在后一种情况下,过滤器负责填写响应。

  • 在调用链中的下一个过滤器后检查响应头。

  • 抛出异常以指示处理中的错误

3.指定过滤器映射

Web容器使用筛选器映射来决定如何将筛选器应用于Web资源。筛选器映射按名称将筛选器与Web组件匹配,或按URL模式匹配Web资源。按照过滤器映射出现在WAR的过滤器映射列表中的顺序调用过滤器。

Filter-to-Servlet映射图:

参考链接

https://www.oracle.com/technetwork/java/filters-137243.html

https://docs.oracle.com/javaee/6/tutorial/doc/bnagb.html

https://www.javaworld.com/article/3313114/what-is-a-java-servlet-request-handling-for-java-web-applications.html

https://en.wikipedia.org/wiki/Java_servlet

原文地址:https://www.cnblogs.com/yuanchao-blog/p/10558370.html