加快网站速度,代理网络是什么,建站公司要不要承担网站被黑,东莞网站建设-拥有多年专业Listener监听器
一、Listener概述
1、监听器概念
web的三大组件之一。
2、事件监听机制
事件#xff1a;一件事情事件源#xff1a;事件发生的地方监听器#xff1a;一个对象注册监听#xff1a;将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后#xf…Listener监听器
一、Listener概述
1、监听器概念
web的三大组件之一。
2、事件监听机制
事件一件事情事件源事件发生的地方监听器一个对象注册监听将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后执行监听器代码
二、Listener使用
ServletContextListener监听ServletContext对象的创建和销毁
1、方法
void contextDestroyed(ServletContextEvent sce) ServletContext对象被销毁之前会调用该方法void contextInitialized(ServletContextEvent sce) ServletContext对象创建后会调用该方法
2、步骤
1定义一个类实现ServletContextListener接口
2复写方法
3-1web.xml配置
listenerlistener-classcn.itcast.web.listener.ContextLoaderListener/listener-class
/listener3-2注解配置WebListener
Filter过滤器
一、Filter概述
web中的过滤器当访问服务器的资源时过滤器可以将请求拦截下来完成一些特殊的功能。
过滤器的作用一般用于完成通用的操作。如登录验证、统一编码处理、敏感字符过滤…
二、使用Filter
1、实现接口Filter
定义一个类实现接口Filter
2、复写方法
doFilter每一次请求被拦截资源时会执行。执行多次 放行chain.doFilter(req, resp); init在服务器启动后会创建Filter对象然后调用init方法。只执行一次。用于加载资源
destroy在服务器关闭后Filter对象被销毁。如果服务器是正常关闭则会执行destroy方法。只执行一次。用于释放资源
3、配置拦截路径
1web.xml
!-- 设置拦截路径 --
filterfilter-namedemo1/filter-namefilter-classcn.itcast.web.filter.FilterDemo1/filter-class
/filter
filter-mappingfilter-namedemo1/filter-name!-- 拦截路径 --url-pattern/*/url-pattern
/filter-mapping!-- 设置dispatcherTypes --
dispatcher/dispatcher2注解配置
WebFilter(/*)
value属性
具体资源路径/index.jsp只有访问index.jsp资源时过滤器才会被执行拦截目录/user/访问/user下的所有资源时过滤器都会被执行后缀名拦截*.jsp访问所有后缀名为jsp资源时过滤器都会被执行
dispatcherTypes属性
DispatcherType.REQUEST默认值。浏览器直接请求资源DispatcherType.FORWARD转发访问资源DispatcherType.INCLUDE包含访问资源DispatcherType.ERROR错误跳转资源DispatcherType.ASYNC异步访问资源多个参数用大括号包裹
4、过滤器执行流程
执行过滤器执行放行后的代码回来执行过滤器
5、过滤器链
1执行顺序
如果有两个过滤器过滤器1和过滤器2
过滤器1过滤器2资源执行过滤器2过滤器1
2过滤器先后顺序问题
注解配置按照类名的字符串比较规则比较值小的先执行
web.xml配置谁定义在上边谁先执行
三、增强对象的功能
设计模式一些通用的解决固定问题的方式
1、装饰模式
不必改变原类文件和使用继承的情况下动态地扩展一个对象的功能。它是通过创建一个包装对象也就是装饰来包裹真实的对象。
2、代理模式
1概念
真实对象被代理的对象代理对象代理模式代理对象代理真实对象达到增强真实对象功能的目的
2实现方式
静态代理有一个类文件描述代理模式动态代理在内存中形成代理类 实现步骤 代理对象和真实对象实现相同的接口代理对象 Proxy.newProxyInstance();使用代理对象调用方法增强方法 增强方式 增强参数列表增强返回值类型增强方法体执行逻辑
String str new String();
/*1. 真实对象2. 接口数组3. 处理器new InvocationHandler()
*/
String str2 (String) Proxy.newProxyInstance(str.getClass().getClassLoader().getClass().getClassLoader(), str.getClass().getInterfaces(), new InvocationHandler() {
/*代理逻辑编写的方法代理对象所有的方法都会被执行参数1. proxy代理对象2. method代理对象调用的方法被封装为对象(反射)3. args方法执行时传递的参数
*/Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//使用真实对象调用方法return method.invoke(str,args);}
});