反射反射: 反射就是通过一个类的Class对象操作该类的构造方法,成员属性,成员方法
类的构造方法用Constructor对象来表示
类的成员属性用Field对象来表示
类的成员方法用Method对象来表示
或取字节码对象的方法:
1. 对象.getClass()
2. 类名.class()
3. Class.forName(全类名)
反射使用的类和方法
java.lang.Class类: 类的字节码对象
获取构造方法
参数列表填写参数的字节码对象,有几个参数写几个,无参不用传
Constructor<T> getConstructor(Class<?>... parameterTypes);//获取所有public的构造方法;
Constructor<>[] getDeclaredConstructors(Class<?>... parameterTypes);//获取包括私有的所有够造方法;
获取成员属性
Field[] getFields(): 获取所有public的成员变量
Field[] getDeclaredFields(): 获取所有权限的成员变量, 包括private的
Field getField(String fieldName): 通过指定的成员变量名获取指定的public的成员变量
Field getDeclaredField(String fieldName): 通过指定的成员变量名获取指定的所有权限的成员变量, 包括private的
获取成员方法
Method[] getMethods(): 返回所有public的方法数组
Method[] getDeclaredMethods(): 返回所有权限的方法数组
Method getMethod(String name, Class<?>... parameterTypes): 获取public的方法, 传入方法名和方法形参字节码对象
Method getDeclaredMethod(String name, Class<?>... parameterTypes): 获取所有权限的指定方法, 传入方法名和方法形参字节码对象
java.lang.reflect.Constructor类: 构造方法对象
创建对象
newInstance(): 通过无参构造方法对象创建一个类的对象
newInstance(Object... initargs): 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表
void setAccessible(boolean canAccess): 设置为true时禁用Java的访问安全检查, 可以访问所有权限的构造方法
java.lang.reflect.Field类: 成员变量对象
Object get(Object obj): 获取指定对象的属性值
void set(Object obj, Object value): 将指定对象的属性值设置为指定的值
void setAccessible(boolean canAccess): 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员属性
java.lang.reflect.Method类: 成员方法对象
Object invoke(Object obj, Object... args): 调用指定对象的成员方法
void setAccessible(boolean canAccess): 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员方法
内省概述: 内省是基于反射的
作用: 用来获得JavaBean的属性和属性的get和set方法
一个JavaBean属性是由get和set方法确定的
使用的类: Introspector类;//这个类就是用来描述JavaBean的
方法:
BeanInfo Introspector.getBeanInfo(类的字节码对象);//获得该类的信息
PropertyDescriptor[] BeanInfo.getPropertyDescriptors();//或的这个类的属性,返回一个数组
PropertyDescriptor.getReadMethod();//获得get方法
PropertyDescriptor.getWriteMethod();//获得set方法ThreadLocal类概述: 代表的是本地线程
内部维护的是一个Map,其中的Key就是当前的线程,value就是要绑定的数据
方法:
void set(T value);//设置当前线程的value
T get();//获得当前线程的valueUUID概述: 生成随机的id
static UUID randomUUID();//获取随机的idAJAX概述: 异步的 JavaScript And XML
作用: 完成页面的局部刷新,不中断用户体验
同步和异步的区别:
同步刷新整个页面
异步刷新一块区域
响应的数据: 文本,HTML,XML,JSONXMLHttpRequest概述: js中的对象
作用: 可以向服务器异步发送请求
属性:
readyState : 返回XMLHttpRequest的状态
0(未初始化),1(初始化),2(发送数据),3(数据传输中),4(完成)
onreadystatechange : 当XMLHttpRequest状态改变的时候触发一个函数(回调函数)
status : 获得响应的状态码
responseText :获得异步加载时响应的文本数据
responseXml :获得异步加载时响应的xml的数据
方法:
open(请求方式,请求路径,是否异步); :异步的去向服务器发送请求
send(请求参数); 发送请求,没有参数写null;
setRequestHeader(头信息,头的值); : 用来处理post请求方式的中文问题
示例:setRequestHeader("Content-Type","application/x-www-form-urlencoded");
创建:(不同浏览器创建的不一样)
IE : 将XMLHttpRequest对象封装到一个ActiveXObject组件
火狐: 直接就可创建XMLHttpRequest对象
创建对象的代码:
function createXmlHttp(){
var xmlHttp;
try{ // Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e){
try{// Internet Explorer
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){}
}
}
return xmlHttp;JQuery概述: js的框架
JQuery的AJAX部分的方法
jq对象.load(路径,参数,回调函数);//将服务器对当前这次请求的响应加载到选择器选中的元素里面
$(选中要提交的表单).serialize();//将表单所有要提交的数据封装到这个对象中(键值对类型);
$.get(路径,参数,回调函数,响应的数据类型);//执行异步请求,get方式,数据类型可以不写
用法:
$.get(
"路径",
{发送到服务器的键值对类型的参数,多个参数用逗号隔开},
function(data){ //data代表的是当前这次请求的响应
//回调后执行的业务操作
}
);
$.post(路径,参数,回调函数,响应的数据类型);//执行异步请求,post方式,数据类型可以不写
用法: 跟$.get()用法一样;
$.ajax();//执行异步请求,参数是键值对类型的(常用在逻辑操作比较多的地方)
用法:
$.ajax({
//参数是键值对类型的,键有特定的含义
url : "路径",
type : "请求方式",
data : { //发送到服务器的参数
键值对类型的,多个参数之间用逗号隔开
},
success:function(data){data},//成功后执行的回调函数
error:function(){},//出错后执行的函数
beforeSend:function(){},//发送之前执行的函数
complete:function(){}//不管成功失败都会执行的函数
});XStream概述: 生成XML文件的工具
作用: 将集合,数组,对象转成xml文件
方法:
XStream xStream = new XStream();//创建对象
xStream.toXML(要转换的数据);//转换成xml文件
xStream.alias("指定的标签名",要修改的类的字节码);//修改标签名,默认是全类名
xStream.useAttributeFor(要修改的类的字节码,"类中的属性名");//将类中的属性作为标签的属性,默认是子标签JSON概述: JavaScript Object Notation,是一种轻量级的数据交换格式.基于ECMAScript的一个子集.
数据是键值对类型的,多个数据之间用逗号隔开,{}保存的是对象,[]保存的是数组
JSON的生成工具(有很多)
JSONLIB工具:
JSONArray.fromObject(要转换的数据);//将数组,List集合转成JSON
JSONObject.fromObject(要转换的数据);//将对象或Map集合转成JSON
转换数据时去除某些属性的方法:
JsonConfig jc = new JsonConfig();//创建JsonConfig对象
jc.setExcludes(new String[] {"不让显示的属性名,多个用逗号隔开"}); 监听器概述: Listener就是一个java类,用来监听其他java类的状态变化,主要应用在图形化界面比较多
术语:
事件源:指的是被监听的对象.(汽车)
监听器:值的是监听的对象.(报警器)
事件源与监听器的绑定:就是在汽车上安装报警器.
事件:指的是事件源的改变.(踹汽车一脚)---主要的功能获得事件源对象.
WEB开发中的监听器
概述:共有三类八中(监听三个域对象的)
需要配置监听器:在web.xml中;
一类:监听三个域对象的创建和销毁的监听器:
ServletContextListener:监听ServletContext对象的创建和销毁
HttpSessionListener:监听HttpSession的创建和销毁的监听器
ServletRequestListener:监听ServletRequest对象的创建和销毁的监听器
二类:监听三个域对象的属性变更的监听器:(属性添加,移除,替换)
ServletContextAttributeListener:监听ServletContext对象的属性变更
HttpSessionAttributeListener:监听HttpSession中的属性变更
ServletRequestAttributeListener:监听ServletRequest对象的属性变更的
三类:监听HttpSession中的JavaBean的对象的状态改变的监听器(不需要配置的)
HttpSessionBindingListener:监听HttpSession中的JavaBean的绑定和解除绑定的
HttpSessionActivationListener:监听HttpSession中的JavaBean的钝化和活化的
方法:
sessionDidActivate();//活化(反序列化)
sessionWillPassivate();//钝化(序列化到硬盘)ServletContextListener(接口)概述: 用来监听ServletContext对象的创建和销毁
企业应用:
1. 加载框架的配置文件
2. 定时任务的调度(Timer类和TimerTask类)
3. 用来写一些资源初始化很耗时,并且只在第一次访问时初始化的代码
用法:编写一个类继承这个接口
方法:
void contextInitialized(ServletContextEvent sce);//监听ServletContext对象的创建
void contextDestroyed(ServletContextEvent sce);//监听ServletContext对象的销毁优化Session实现方法: 通过配置<Context>标签配置定时session序列化
1.在tomcat/conf/context.xml中配置<Context>;//在tomcat中所有的虚拟主机和虚拟路径都会按照这个配置执行.
2.在tomcat/conf/Catalina/localhost/context.xml配置<Context>;//在tomcat中的localhost虚拟主机中的所有虚拟路径按照这个配置执行.
3.在当前的工程下的META-INF/context.xml配置<Context>;//当前这个工程按照配置执行.
tomcat服务器配置的方法:
<Context>
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="指定分钟后session会自动序列化到硬盘">
<Store className="org.apache.catalina.session.FileStore" directory="序列化后存放的位置"/>
</Manager>
</Context>