MVC&事务&AJAX 学习笔记
反射Class对象类名.class 对象.getClass() Class.forName("类全名")
Class对象的newInstance()方法可以创建对象 构造方法Constructor[] constructor = clazz.getConstructors();获得构造方法 Constructor constructor = clazz.getConstructor(parameters...); getDeclaredConstructor(parameters...); getDeclaredConstructor(); constructor.newInstance(parameters...); 成员变量Field getDeclaredField(String name,params.class...); field.set(Object object, Object object); field.setAccessible(true); 成员方法Method getDeclaredMethod(String name, params.class...); setAccessible(true); method.invoke(Object object, params...); 内省Java中的内省技术】(了解)
内省:用来获得JavaBean的属性及属性的get或set方法.
JavaBean:就是一个满足了特定格式的Java类:
* 需要提供无参数的构造方法:
* 属性私有
* 对私有的属性提供public的get/set方法.
内省的代码:
public void demo1() throws Exception{
// 获得了Bean的信息
BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
// 获得Bean的属性描述了
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd:pds){
System.out.println(pd.getName());
/*pd.getReadMethod(); // 获得get方法
Method method = pd.getWriteMethod();// 获得set方法.
*/ }
}
使用内省封装一个MyBeanUtils:
public class MyBeanUtils {
public static void populate(Object obj,Map<String,String[]> map) throws Exception{
// 获得类的所有的属性的名称:
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
// 获得类中所有的属性:
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if(map.containsKey(pd.getName())){
Method method = pd.getWriteMethod();
// 执行set方法:
method.invoke(obj, map.get(pd.getName())[0]);
}
}
}
}事务ACID特性原子性:事务的不可分割 一致性:事务执行前后,数据的完整性保持一致 隔离性:事务执行不受到其他事务的干扰 持久性:事务一旦结束,保存到数据库中 事务的隔离级别read uncommitted read committed repeatable read serializable 读问题:脏读:读到了另一个事务未提交的数据 不可重复读:读到另一个事务update的数据,导致前后查询不一致 虚读/幻读:读到另一个事务insert的数据,导致前后查询不一致 AajxAjax使用步骤创建异步对象 设置状态改变的监听 设置请求路径 发送请求
$.get(
"url",
{
"":"",
"":""
},
function(data){ //data:服务器对当前这次请求的响应
},
"响应的类型"
);
$.post(
"url",
{
"":"",
"":""
},
function(data){ //data:服务器对当前这次请求的响应
},
"响应的类型"
);
$.ajax({
url:"",
type:"请求方式",
data:{
"":"",
"":""
},
dataType:响应内容的类型
success:function(data){ //成功后执行
},
error:function(){ //出错之后执行
},
beforeSend:function(){ //发送之前执行
},
complete:function(){ //不管成功还是失败都执行
}
});XML传输数据xStream void alias("别名",类名.class); void useAttributeFor(类名.class,"属性名"); String toXML(Object);
XStream xs = new XStream();
//xs.alias("city",City.class);
String xmlstr = xs.toXML(Object object);
response.setContentType("text/xml;charset=UTF-8")
$("#city").each(function(){
var cname = $(this).findchildren("cname").text();
var cid = $(this).findchildren("cid").text();
$("#city").append("<option value="+cid+">"+cname+"</option>");
});JSON传输数据对象表示为键值对 数据由逗号分隔 花括号保存对象 方括号保存数组
{"名称":值,"名称":值} //普通格式,值可以是数组
[{"名称":值,"名称":值},{"名称":值,"名称":值}] //数组
{
“city”:{“cid”:1,”cname”:”xxx”}
}工具
JSONArray :
JSONObject :
JsonConfig :
config.setExcludes(new String[] {""});
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] {"pid"});
JSONArray array = JSONArray.fromObject(list,config);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(array.toString());监听器Listener三类八种:一类:监听三个域对象的创建和销毁的监听器:
ServletContextListener HttpSessionListener ServletRequestListener
二类:监听三个域对象的属性变更的监听器(属性添加,移除,替换):
ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener
三类:监听HttpSession中的JavaBean的状态改变(绑定,解除绑定,钝化,活化)
ServletContextListener服务器启动时加载框架 定时的任务调度 将耗时的操作放到服务器启动的时候
|