Filter(过滤器)
过滤器的使用:
过滤器有点面向切面编程的意思,一般是想要在这个请求的前后做一些事情,才会使用过滤器,比如字符过滤器,就是为了统一编码格式,避免中文乱码情况。
-
作用:
对服务器接受的请求资源和响应给浏览器的资源进行管理。 保护servlet
-
使用:
创建一个实现了Filter接口的普通Java类 覆写接口的方法: init方法:服务器启动即执行。资源初始化 doFilter方法:拦截请求的方法,在此方法中可以对资源进行管理 注意: 需要手动对请求进行放行。chain.doFilter(request, response); destroy方法:服务器关闭的时候执行。 在web.xml中配置过滤器
配置过滤器:
filter-name:为这个过滤器起一个名字,最好是见名知意
filter-class:配置过滤器的路径,要求是全类名
url-pattern:配置要拦截的请求
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.qlgydx.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:
url-pattern:/*
表示拦截所有的请求。
url-pattern:*.do
表示所有以.do结尾的请求,一般是用来进行模块拦截处理。
url-pattern:/ts
表示拦截指定url的请求。针对某个servlet的请求进行拦截,保护servlet
-
过滤器的生命周期:
服务器启动到服务器关闭。 总结: 过滤器程序员声明和配置,服务器根据请求中的uri信息调用。 执行: 浏览器发起请求到服务器,服务器接受到请求后,根据URI信息在web.xml中找到对应的 过滤器执行的doFilter方法,该方法对此次请求进行处理后如果符合要求则放行,放行后 如果还有符合要求的过滤器则继续进行过滤,直到执行对应的servlet进行请求处理。servlet 对请求处理完毕后,也就是service方法执行结束后。还需继续返回相应的do Filter方法继续执行。 案例: 统一编码格式设置。 session管理 权限管理 资源统一(统一水印,和谐词汇等等)
有个问题需要特别注意一下,过滤器的配置是在web.xml中配置的,如果配置了多个过滤器,那就有个先后顺序的问题,先配置的过滤器会先执行,所以有些过滤器的位置需要仔细考虑,比如字符过滤器,就应该放在第一位。
监听器
监听器的使用:
-
作用:
监听作用域对象request、session、application的创建、销毁和内容的改变
-
使用:
创建一个实现了指定接口的Java类 监听request--->ServletRequestListener 监听request对象的创建和销毁 requestInitialized(ServletRequestEvent sre)//创建 requestDestroyed(ServletRequestEvent sre)//销毁 注意: 形参可以获取监听的request对象 sre.getServletRequest(); 监听request--->ServletRequestAttributeListener 监听request作用域数据的变更。 attributeAdded(ServletRequestAttributeEvent srae) attributeRemoved(ServletRequestAttributeEvent srae) attributeReplaced(ServletRequestAttributeEvent srae) 注意: 形参可以获取被监听的数据 srae.getName() 获取监听数据的键 srae.getValue() 获取监听数据的值 监听session--->HttpSessionListener 监听session的创建和销毁 sessionCreated(HttpSessionEvent se) 创建 sessionDestroyed(HttpSessionEvent se) 销毁 注意: 形参可以获取被监听的session对象 se.getSession(); 监听session--->HttpSessionAttributeListener 监听session数据的变更 attributeAdded(HttpSessionBindingEvent event) attributeRemoved(HttpSessionBindingEvent event) attributeReplaced(HttpSessionBindingEvent event) 注意: 形参可以获取被监听的数据 event.getName() 获取数据的键名 event.getValue() 获取数据的值 监听application--->ServletContextListener 监听application对象的始化和销毁 contextInitialized(ServletContextEvent sce) 初始化 服务器启动 contextDestroyed(ServletContextEvent sce) 销毁 服务器关闭 注意: 形参可以获取当前application对象 sce.getServletContext() 监听application--->ServletContextAttributeListener 监听application对象数据的变更 attributeAdded(ServletContextAttributeEvent event) attributeRemoved(ServletContextAttributeEvent event) attributeReplaced(ServletContextAttributeEvent event) 注意: 形参可以获取当前监听的数据 event.getName() 获取数据的键名 event.getValue() 获取数据的值
在web.xml中配置监听类
<listener>
<listener-class>com.qlgydx.listener.MyListener</listener-class>
</listener>
案例:
统计当前在线人数
统计网页浏览器次数
这里提一下Ajax的使用
Ajax
-
ajax的概念
局部刷新技术,不是一门新技术,是多种技术的组合。是浏览器端的技术。
-
ajax的作用
可以实现在当前结果页中显示其他请求的响应内容
-
ajax的使用
ajax的基本流程 创建ajax引擎对象 覆写onreadystatement函数 判断ajax状态码 判断响应状态码 获取响应内容(响应内容的格式) 普通字符串responseText json(重点)responseText 其实就是将数据按照json的格式拼接好的字符串,方便使用eval方法 将接受到的字符串数据直接转换为js的对象用 json的格式: var 对象名={ 属性名:属性值, 属性名:属性值, ... } XML数据responseXML 返回document对象 通过document对象将数据从XMl中获取出来 处理响应内容(js操作文档结构) 发送请求 get请求 get的请求实体拼在URL后面,?隔开,键值对 ajax.open("get","url"); ajax.send(null); post请求 有单独的请求实体 ajax.open("post","url" ); 下面这行代码告诉服务器按键值对解析请求数据,否则服务器会把请求数据当做字符串 ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.send("name=张三&pwd=123"); ajax的状态码 ajax的状态码 readyState:0,1,2,3,4 4:表示响应内容被成功接受 响应状态码 status 200:表示一切OK 404:表示资源未找到 500:内部服务器错误 ajax的异步和同步 ajax.open(method,ur,async) async:设置同步代码执行,还是异步代码执行 true代表异步,默认是异步 false代表同步