Java基础(五)
什么是Ajax,由哪几部分组成
Ajax(Asynchronous JavaScript And Xml),字面意思为异步的JavaScript和Xml,可实现动态加载页面及页面局部刷新
主要包含技术:Html、CSS、Dom、XMLHttpRequest、JavaScript
常用参数:
- url:请求地址
- type:请求方式,默认为get,常用的还有post
- async:设置是否异步,默认为true,表示异步
- dataType:设置返回的数据格式,常用的是json,也可以设置为text、html
- data:设置发送给服务器的数据
- success:请求成功后的回调函数
- error:请求失败后的回调函数
如何解决Ajax跨域问题
- 服务端响应头添加Header允许访问
response.addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问
response.addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
* 前端使用jsonp:只支持get不支持post 用法:动态创建script,利用script不受同源策略限制的特性获取服务端返回信息 1) dataType改为jsonp 2) jsonp:"jsonpCallback" 3) 后端获取get请求中的jsonpCallback 4) 构造回调结构 ```javascript
//前端
$.ajax({
type : "GET",
async : false,
url : "http://a.a.com/a/FromServlet?userName=644064",
dataType : "jsonp",//数据类型为jsonp
jsonp : "jsonpCallback",
success : function(data) {
alert(data["userName"]);
},
error : function() {
alert('fail');
}
});
```java
//后端
String jsonpCallback = request.getParameter("jsonpCallback");
//构造回调函数格式jsonpCallback(数据)
resp.getWriter().println(jsonpCallback+"("+jsonObject.toJSONString()+")");
* httpClient内部转发 * 使用接口网关nginx、springcloud zuul
HashMap和HashTable的区别
相同点:
- 都实现了Map接口
- 实现原理相同,底层都是哈希表,功能相同
不同点:- HashTable继承自Dictionary类,HashMap继承自AbstractMap类
- HashTable线程安全,HashMap线程不安全
- HashTable不允许有null,HashMap允许至多一个null
- 检查是否存在:Hashtable->contains();HashMap->containsKey()/containsValue()
jdbc与Hibernate比较
- jdbc使用sql,Hibernate使用HQL
- jdbc操作数据,Hibernate操作持久化对象
- jdbc操作的数据是临时的,Hibernate是可持久的,即持久化对象的值和数据库保持一致
过滤器Filter和拦截器Interceptor
- Filter依赖于servlet容器,基于函数回调,可以对几乎所有请求进行过滤,如CharacterEncodingFilter
- Interceptor依赖于web框架,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理
谈谈对MyBatis的理解
- MyBatis是一个数据持久层(ORM)框架,可以在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。
- 需要开发人员自己来写sql语句,程序更灵活,在一定程度上可以作为ORM的一种补充,但数据库移植性差。
- 便于统一管理与维护,降低了程序的耦合度。
MyBatis中如何使用事务
Mybatis对于事务的支持不太好,需要手动开启JDBC事务进行事务管理:
- 在整个请求处理之前,创建事务工厂
- 基于同一个SqlSession对象获得事务对象,期间执行多次数据库更新操作
- 最后捕捉异常,进行事务回滚或关闭