A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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”}
}
工具
  • jsonlib
  • fastjson


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的状态改变(绑定,解除绑定,钝化,活化)

    • HttpSessionBindingListener
    • HttpSessionActivationListener


ServletContextListener
  • 服务器启动时加载框架
  • 定时的任务调度
  • 将耗时的操作放到服务器启动的时候




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马