十、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)
-