菜鸟学JavaWeb之——Filter(过滤器)、Ajax

十、Filter 过滤器

引入

什么是过滤器?举个例子:我(请求)从我家(浏览器)要去女朋友家(资源){女朋友家住在山里,大山就相当于服务器,大山里有很多资源(有很多女朋友🙄)},途中我遇到了一个土匪(过滤器)抢掉了我的盘缠之后放我通过。我到了女朋友家待了几天后要原路回家,还会遇到这个土匪,他在把我敲诈一次才放我通行回家。

web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。

处理业务的功能交给Servlet完成,能否处理的动作交给Filter

过滤器的作用:一个请求被发到服务端先进入拦截器,看有没有拦截器要拦截这个请求,如果有。则拦截器拦截后在往下一级发这个请求(被拦截的请求会被直接返回去)直到发到Servlet。 一般用于登录验证、统一编码处理、敏感字符过滤。

Filter一定是在项目一启动时就被加载的,然后才是Servlet

步骤

  • 定义一个类,实现接口Filter

  • 覆写方法

  • 配置拦截路径

    • 方式一:web.xml

    • 方式二:注解

    放行操作:filterChain.doFilter(servletRequest,servletResponse);

10.1 过滤器细节

10.1.1 web.xml配置
<filter>
        <filter-name>demo1</filter-name>
        <filter-class>com.home.java.controller.filter.FilterDemo1</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>demo1</filter-name>
        <url-pattern>/*</url-pattern>  <!--拦截路径-->
    </filter-mapping>
10.1.2 过滤器执行流程
  • 执行过滤器
  • 执行放行后的资源
  • 回来执行过滤器放行代码下边的代码
10.1.3 过滤器生命周期方法
  • init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次,一般用于加载资源
  • doFilter:每一次请求被拦截资源时会执行。执行多次
  • destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次,一般用于释放资源。
10.1.4 过滤器配置详解

拦截路径配置

  • 具体资源路径(用的少):/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  • 拦截目录:/user/* 访问/user下的所有资源时,过滤器都会被执行
  • 后缀名拦截:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
  • 拦截所有资源:/* 访问所有资源时,过滤器都会被执行

拦截方式配置:资源被访问的方式

  • 注解配置

    设置dispatcherTypes属性

    • REQUEST:默认值。浏览器直接请求资源

    • FORWARD:转发访问资源。(配置为FORWARD以后,只有转发访问到资源才能被过滤器拦截)

      eg:@WebFilter(value="/index.jsp",dispatcherTypes = {DispatcherType.FORWARD, DispatcherType.REQUEST}) 表示转发访问index.jsp或者浏览器直接访问index.jsp都会执行过滤器

  • web.xml配置

    设置标签即可

10.1.5 过滤器链(配置多个过滤器)

执行顺序:如果有两个过滤器:过滤器1和过滤器2

  • 过滤器1 —>过滤器2 —> 资源执行—> 过滤器2—>过滤器1

过滤器先后顺序问题

  • 注解配置:按照类名的字符串比较规则比较,值小的先执行(依次比较字符,按字典顺序)

    如:AFilter 和 BFilter,AFilter 就先执行了

  • web.xml配置:谁定义在上面谁就先执行

十一、AJAX

概念:ASynchronous JavaScript And XML 异步的JavaScript 和 XML

异步和同步:客户端和服务器端相互通信的基础上

  • 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作
  • 客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作

Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。

Form表单是一个同步的过程,当form表单提交的时候,页面是一定要切换的。同时,页面当中正在执行的某些动作会立刻停止。 当发送的请求是异步的时候,他不会影响当前界面的跳转过程

实现方式:

  • JQuery实现方式

    • $.ajax()

      语法:$.ajax({键值对})

      //使用$.ajax()发送异步请求
                  $.ajax({
                      url:"ajaxServlet1", //请求路径
                      type:"post", //请求方式
                      // data:"username=jack & age=23", //请求参数
                      data:{"username":"jack","age":23}, //请求参数
                      success:function (data) { //这个data接收服务器给的响应的结果的值
                          alert(data)
                      }, //响应成功后的回调函数
                      error:function () {
                          alert("出错啦...")
                      },
                      dataType:"text" //设置接收到的响应数据的格式
                  });
      
    • $.get():发送get请求

      语法:$.get(url,[data],[callback],[type])

      参数:

      • url:请求路径

      • data:请求参数

      • callback:回调函数

      • type:响应结果的类型

      $.get("ajaxServlet",{username:"rose"},function (data) {
                      alert(data);
                  },"text");
      
    • $.post():发送post请求(同get)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值