Eclipse, Tomcat, Filter, Servlet, Listener 笔记

Filter

filter 的配置可以有如下两种方式:

以下说明的方式是建立在把 filter 工程导出 .jar 包后,放入 Tomcat 的 lib 下的前提。

  1. 放在 Tomcat 目录 conf/web.xml内。这个方法中,使用<servlet-name>指定需要影响的 servlet,使用<url-pattern>指定需要影响的URL通配规则,如下:

     <filter>
         <filter-name>helloFilter</filter-name>
         <filter-class>com.test.testMyFilter</filter-class>
     </filter>
     <filter-mapping>
         <filter-name>helloFilter</filter-name>
         <servlet-name>helloServlet</servlet-name>
         <url-pattern>/*</url-pattern>
         <dispatcher>REQUEST</dispatcher>
     </filter-mapping>
  2. 放在各自 servlet 的WEB-INF/web.xml内。在<servlet> 前加入此 filter 的配置。

Eclipse, Servlet

使用 Eclipse 创建的 Servlet 工程名,就是将来会在 url 中 映射的地址,比如,这个工程叫 MyPuppyServlet,那么在浏览器中访问时,其URL就是 http://localhost/MyPuppyServlet

若你创建 servlet 时,勾选了产生独立的 web.xml 配置文件,那么在 WEB-INF 下就会有一个 web.xml。以下都是基于这个前提的说明。

在这个 web.xml 内,涉及到关于 servlet 的配置。这里解释一下几个名字的重要关系。

  1. URL中的访问名,如http://localhost/MyPuppyServlet中的 MyPuppyServlet。首先在 URL 里涉及路径上面说过了,就是工程的名字,这个名字,会被 Tomcat 在 conf/Catalina/localhost 目录下产生一个对应的 .xml 文件,比如工程名叫 MyPuppyServlet,那么文件名就 MyPuppyServlet.xml。这个文件里 <Context> 属性 docBase 指明了你的工程在文件系统中的实际位置。属性 path 为 "/testMyServlet" 好像有些多余,并不能在 eclipse 中有所指定。手工修改成其它值,也并不影响 URL 的访问。
  2. <servlet-name>,配置中使用的 servlet 名。Tomcat 根据 docBase 中指明的位置,找到 servlet 的根目录,然后进入目录查看 WEB-INF/web.xml 中的内容,这个文件中的标签 <servlet-name> 就明确了在整个系统中,servlet 的名字,必须是唯一的。这里指明的名字,可以被其它地方引用,比如 <filter-mapping> 中想指定对某个 servlet 起作用,就可以在 <filter-mapping> 下用 <servlet-name> 指明。这个 <servlet-name> 名,并不一定要与工程名或路径名中保持一致,它只是一个系统内部引用的名字。比如上面的 URL 是 http://localhost/MyPuppyServlet,这里的 <servlet-name> 仍可以叫作 testABC。
  3. <servlet-class> 是在工程内为 servlet 从 HttpServlet 继承下来的主类名称,这个名称也与 URL 及 <servlet-name> 完全无关。这里举个例子。我创建一个 servlet 工程,工程名叫 MyPuppyServlet,主类命名为 testCCC,package 名为 com.test.servlet ,则访问 servlet 的 URL 是 http://localhost/MyPuppyServlet,而在此 servlet 下 WEB-INF/web.xml 中的 <servlet-name> 改名为 testABC,<servlet-class> 是 com.test.servlet.testCCC。

Listener

listener 的部署类似于 filter。首先需要导出 listener 的工程为 .jar 包并放到 Tomcat 的 lib 目录下。
然后,分成为所有或部分 servlet 提供服务两个方向。

  1. 为所有 servlet 提供服务。在 Tomcat 的目录 conf/web.xml内,放入 <listener> 及其子标签。
  2. 为部分 servlet 提供服务。在需要使用它的 servlet 的 WEB-INF/web.xml 中,加入 <listener> 及其子标签。

我没有找到如何在 Tomcat 的目录 conf/web.xml内为部分 servlet 提供服务的配置方法。

    原文作者:luke
    原文地址: https://segmentfault.com/a/1190000019891146
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞