目录
  • servt规范扩展———–过滤器接口
    • 3、filter接口实现类的开发步骤:三步
      • 第一步:创建一个java类实现filter接口
      • 第二步:重写dofilter接口中的dofilter()方法
      • 第三步:在web.xml文件中将过滤器接口实现类注册到http服务器
    • oneservlet
      • twoservlet
        • 4、filter拦截地址的格式

      1、介绍:

      1)一组来自于servlet规范下的接口,共有8个接口。在tomcat中存在于servlet-api.jar

      2)监听器接口需要由开发人员亲自实现,http服务器提供的jar中并没有对应的实现类

      3)监听器接口用于监控【作用域对象生命周期的变化时刻】以及【作用域对象共享数据的变化时刻】

      2、作用域对象:

      1)在servlet规范中,认为在服务端内存中可以在某些条件下为两个servlet之间提供数据共享方案的对象,被称为【作用域对象】

      2)在servlet规范下的作用域对象:

      servletcontext:全局作用域对象

      httpsession:会话作用域对象

      httpservletrequest:请求作用域对象

      3、监听器接口实现类开发规范:三步

      1)根据监听的实际情况,选择对应的监听器接口进行实现

      2)重写监听器接口中声明的【监听事件处理方法】

      3)在web.xml文件中将监听器接口实现类注册到http服务器中

      4、servletcontextlistener

      1)作用:通过这个接口合法的检测全局作用域对象的两个时刻

      被初始化时刻 被销毁时刻

      2)监听事件处理方法

      public void contextinitialized():在全局作用域对象被http服务器初始化是调用

      public void contextdestroyed():在全局作用域对象被http服务器销毁时调用

      5、servletcontextattributelistener接口:

      1)作用:通过这个接口合法的检测全局作用域对象共享数据变化的时刻

      2)监听事件处理方法:

      public void contextadded():在全局作用域对象添加共享数据时调用

      public void contextreplaced():在全局作用域对象更新共享数据时调用

      public void contextremoved():在全局作用域对象删除共享数据时调用

      6、全局作用域对象共享数据变化时刻

      servletcontext application=request.getservletcontext();

      application.setattribute("key1",100); //新增共享数据

      application.setattribute("key1",200); //更新共享数据

      application.removeattribute("key1"); //删除共享数据

      代码实现

      以下就以servletcontextlistener接口和servletcontextattributelistener接口

      第一步:选择servletcontextlistener接口进行实现

      第二步:重写监听器接口声明的【监听事件处理方法】

      public class onelistener implements servletcontextlistener {
          @override
          public void contextinitialized(servletcontextevent sce) {
              system.out.println("initialized............");
          }
          @override
          public void contextdestroyed(servletcontextevent sce) {
              system.out.println("destroyed.............");
          }
      }
      

      第三步:在web.xml中将监听器接口实现类注册到http服务器中

      <listener>
          <listener-class>school.xauat.listener.onelistener</listener-class>
      </listener>
      

      由于servletcontext【全局作用对象的生命周期】贯穿网站的整个运行期间

      servlet之间数据共享中有具体的servletcontext生命周期

      因此在tomcat服务器启动过程时,执行contextinitialize()方法

      initialized…………

      在tomcat服务器准备关闭时,执行contextdestroyed()方法

      destroyed………….

      第一步:选择servletcontextattributelistener接口进行实现

      第二步:重写监听器接口声明的【监听事件处理方法】

      public class onelistener implements servletcontextattributelistener {
          @override
          public void attributeadded(servletcontextattributeevent scae) {
              system.out.println("servletcontextattribute is added......");
          }
          @override
          public void attributeremoved(servletcontextattributeevent scae){
              system.out.println("servletcontextattribute is removed......");
          }
          @override
          public void attributereplaced(servletcontextattributeevent scae){
              system.out.println("servletcontextattribute is replaced......");
          }
      }
      

      第三步:在web.xml文件中将监听器接口实现类注册到tomcat服务器中

      <servlet>
          <servlet-name>oneservlet</servlet-name>
          <servlet-class>school.xauat.controller.oneservlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>oneservlet</servlet-name>
          <url-pattern>/one</url-pattern>
      </servlet-mapping>
      <listener>
          <listener-class>school.xauat.listener.onelistener</listener-class>
      </listener>
      

      监听事件

      public class oneservlet extends httpservlet {
          protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
              //通过请求对象获取全局作用域对象
              servletcontext application=request.getservletcontext();
              //向全局作用域对象中添加共享数据
              application.setattribute("key",100);
              //更改全局作用域对象中的共享数据
              application.setattribute("key",500);
              //删除全局作用域对象中的共享数据
              application.removeattribute("key");
          }
      }
      

      运行结果

      servt规范扩展———–过滤器接口

      1、介绍:

      1)来自于servlet规范下的接口,在tomcat中存在于servlet-api.jar包中

      2)filter接口实现类由开发人员负责提供的,http服务器不负责提供

      3)filter接口会在http服务器调用资源文件之前,对http服务器进行拦截

      2、具体作用:

      1)拦截http服务器,帮助http服务器去检测当前请求的合法性

      2)拦截http服务器,对当前请求进行增强操作

      3、filter接口实现类的开发步骤:三步

      1)创建一个java类实现filter接口

      2)重写filter接口中的dofilter方法

      3)在web.xml文件中将过滤器接口实现类注册到http服务器

      过滤器检测请求合法性

      第一步:创建一个java类实现filter接口

      第二步:重写dofilter接口中的dofilter()方法

      /**
       * http://localhost:8080/myweb/mm.jpg?age=89
       */
      public class onefilter implements filter {
          @override
          public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception {
              //通过拦截的请求对象来得到请求包中的参数信息,从而得到来访用户的真实年龄
              string age=servletrequest.getparameter("age");
              //根据这个年龄帮助我们的http服务器判断本次请求的合法性
              if(integer.valueof(age)<70){
                  //将拦截请求对象和相应对象交换给tomcat,由tomcat继续调用资源文件
                  filterchain.dofilter(servletrequest,servletresponse);
              }else{
                  //过滤器代替http服务器拒绝本次请求
                  servletresponse.setcontenttype("text/html;charset=utf-8");
                  printwriter out=servletresponse.getwriter();
                  out.print("<center><font style='color:red;font-size:40px'>不合适!!!!</font></center>");
              }
          }
      }
      

      第三步:在web.xml文件中将过滤器接口实现类注册到http服务器

      <!--将过滤器类文件交给tomcat-->
      <filter>
          <filter-name>onefilter</filter-name>
          <filter-class>school.xauat.filter.onefilter</filter-class>
      </filter>
      <!--通知tomcat在调用何种资源文件是需要被当前过滤器拦截-->
      <filter-mapping>
          <filter-name>onefilter</filter-name>
          <url-pattern>/mm.jpg</url-pattern>
      </filter-mapping>
      

      过滤器对请求对象进行增强服务

      当有多个以post的请求访问服务器时,需要对每个servlet接口实现类中dopost()方法进行以下操作,增加的开发的难度。

      response. setcharacterencoding(“utf-8”)

      以下展示过滤器的作用:

      第一步:创建java实现filter接口

      第二步:重写filter接口下的dofilter()方法

      public class onefilter implements filter {
          @override
          public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception {
              servletrequest.setcharacterencoding("utf-8");
              filterchain.dofilter(servletrequest,servletresponse);
          }
      }
      

      第三步:在web.xml文件中将过滤器接口实现类注册到http服务器

      <servlet>
              <servlet-name>oneservlet</servlet-name>
              <servlet-class>school.xauat.controller.oneservlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>oneservlet</servlet-name>
              <url-pattern>/one</url-pattern>
          </servlet-mapping>
          <servlet>
              <servlet-name>twoservlet</servlet-name>
              <servlet-class>school.xauat.controller.twoservlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>twoservlet</servlet-name>
              <url-pattern>/two</url-pattern>
          </servlet-mapping>
          <!--注册filter类-->
          <filter>
              <filter-name>onefilter</filter-name>
              <filter-class>school.xauat.filter.onefilter</filter-class>
          </filter>
          <filter-mapping>
              <filter-name>onefilter</filter-name>
              <!--通知tomcat在调用所有资源文件之前都需要调用onefilter进行拦截-->
              <url-pattern>/*</url-pattern>
          </filter-mapping>
      

      oneservlet

      public class oneservlet extends httpservlet {
          protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
              //通过请求对象获取请求体中的请求参数
              string username=request.getparameter("username");
              system.out.println("oneservlet----->"+username);
          }
      }
      

      twoservlet

      public class twoservlet extends httpservlet {
          protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
              //通过请求对象获取请求体中的请求参数
              string username=request.getparameter("username");
              system.out.println("twoservlet---->"+username);
          }
      }
      

      4、filter拦截地址的格式

      1)命令格式:

      <filter-mapping>

      <filter-name><onefilter/filter-name>

      <url-pattern>拦截地址</url-pattern>

      </filter-mapping>

      2)命令作用:

      拦截地址通知tomcat在调用和何种资源文件之前需要调用onefilter过滤进行拦截

      3)要求tomcat在调用某一个具体文件之前,来调用onefilter进行拦截

      <url-pattern>/目录/文件名</url-pattern>

      4)要求tomcat在调用某一个文件夹下所有的资源文件之前,来调用onefilter进行拦截

      <url-pattern>/目录/*</url-pattern>

      5)要求tomcat在调用任意文件夹下的某种类型文件之前,来调用onefilter拦截

      <url-pattern>*.jpg</url-pattern>

      6)要求tomcat在调用网站中任意文件时,来调用onefilter拦截

      <url-pattern>/*</url-pattern>

      总结

      本篇文章就到这里了,希望能给你带来帮助,也希望你能够多多关注www.887551.com的更多内容!