文章目录
Filter
Filter过滤器
三大组件之一:serlet程序,Listener监听器,Filter过滤器
作用:拦截请求,过滤响应
常用的应用场景:
- 1权限检查
- 2日记操作
- 3事务管理
Filter初体验
<%
Object user = session.getAttribute("user");
if(user == null) {
request.getRequestDispatcher("/login.jsp").forward(request, response);
return;
}
%>
像上面这种是对页面的权限访问功能,有对象才能访问,如果这个方法是后续加进来的,那我们一个一个页面去加这个代码判断的话,违背了开闭原则,我们需要面向切面编程,在访问页面之前,先去访问一个Filter,利用Filter先判断是否有权限,有才放行,这就是Filter的功能。
具体实现例子:
写一个类继承Filter接口,实现doFilter方法
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
HttpSession session = httpServletRequest.getSession();
Object user = session.getAttribute("user");
if(user == null) {
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest, servletResponse);
return;
}
else{
//让程序继续往下访问目录的目标资源
filterChain.doFilter(servletRequest,servletResponse);
}
}
在xml内配置路径
<filter>
<filter-name>AdminFilter</filter-name>
<filter-class>com.yuan.filter.AdminFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AdminFilter</filter-name>
<!--配置拦截路径-->
<url-pattern>/admin/a.html</url-pattern>
</filter-mapping>
生命周期
构造器->init方法->doFilter过滤方法->destroy销毁方法
FilterConfig类
在init方法内可以使用FilterConfig对象来获取xml配置文件内的参数值
FilterChain过滤器链
简单点说,就是多个过滤器如何一起工作
Filter的拦截路径
精准配置 /a.jsp 请求精确到项目内的一个页面文件,才会拦截到
目录匹配 /admin/* 请求某一个目录下的所有文件,才会拦截到
后缀名匹配 *.html 表示请求的地址以html结尾,才会拦截到
Json
JSON是一种轻量级的数据交换格式,跟xml作比较
数据交换指的是客户端和服务器之间的业务数据的传递格式
JSON在js中的使用
Json是由键值对组成,花括号包围,用引号引起来,冒号分割,逗号分割
// json的定义
var jsonObj = {
"key1":12,
"key2":24,
"key3":true,
"key4":[11,"arr",false],
"key5": {
"key5_1":551,
"key5_2":"key552",
},
"key6":[{
"key6_1_1":"6611",
"key6_1_2":"6612"
},{
"key6_1_1":"6611",
"key6_1_2":"6612"
}
]
};
JSON的访问
//json本身就是一个对象
//json的key就像对象的属性名
alert(jsonObj.key1);
alert(jsonObj.key5.key5_1);
alert(jsonObj.key6);
JSON的两个常用方法
一种是对象的形式存在,json对象
一种是字符串的形式存在,json字符串
JSON.Stringify()
JSON.parse()
// json对象转字符串
var JsonObjString = JSON.stringify(jsonObj);
alert(JsonObjString);
// json字符串转json对象
var jsonObj2 = JSON.parse(JsonObjString);
alert(jsonObj2);
Java中JSON和JavaBean的转化
利用GSON对象来转换
Gson gson = new Gson();
gson.toJson();
gson.fromJson();
AJAX请求
在之前使用的发送返回请求都需要刷新页面,而且一个请求没有返回的话,不能执行另一个请求,会导致页面看起来很卡,这是同步请求的概念,ajax是异步请求,就是自己直接对服务器进行交流数据,
原生Ajax
<script type="text/javascript">
function ajaxRequest() {
// 1、我们首先要创建XMLHttpRequest
var xmlhttprequest = new XMLHttpRequest();
// 2、调用open方法设置请求参数
xmlhttprequest.open("GET","http://localhost:8088/_13_JSON_AJAX_I18n/ajaxServlet?action=javaScriptAjax",true);
// 4、在send方法前绑定onreadystatechange事件,处理请求完成后的操作。
xmlhttprequest.onreadystatechange = function (){
if(xmlhttprequest.readyState == 4 && xmlhttprequest.status == 200){
var JsonObj1 = JSON.parse(xmlhttprequest.responseText);
document.getElementById("div01").innerHTML = "编号:"+jsonObj1.id+"姓名:"+jsonObj1.name;
}
}
// 3、调用send方法发送请求
xmlhttprequest.send();
}
</script>
局部更新,异步请求
xmlhttprequest.open(“GET”,“http://localhost:8088/_13_JSON_AJAX_I18n/ajaxServlet?action=javaScriptAjax”,true);
异步为true
jQuery内的ajax
$.ajax $.get $.post $.getJson
ajax请求
$("#ajaxBtn").click(function(){
$.ajax({
url:"http://localhost:8088/_13_JSON_AJAX_I18n/ajaxServlet?",
data:"action=jQueryAjax",
type:"GET",
success:function (data){
alert("服务器返回的数据是:"+data);
$("#msg").html("编号:"+data.id+"姓名:"+data.name);
},
dataType:"json"
})
});
Get和post请求少了type类型选择
Get请求
// ajax--get请求
$("#getBtn").click(function(){
$.get("http://localhost:8088/_13_JSON_AJAX_I18n/ajaxServlet","action=jQueryGet",function (data){
$("#msg").html("get 编号:"+data.id+"姓名:"+data.name);
},"json");
});
Post请求
// ajax--post请求
$("#postBtn").click(function(){
$.post("http://localhost:8088/_13_JSON_AJAX_I18n/ajaxServlet","action=jQueryPost",function (data){
$("#msg").html("post 编号:"+data.id+"姓名:"+data.name);
},"json");
});
getJson方法,少了最后一个参数,默认数据是json类型
参数序列化
表单的信息可能会很多,就需要用序列化
$("#submit").click(function(){
// 把参数序列化
$.post("http://localhost:8088/_13_JSON_AJAX_I18n/ajaxServlet","action=jQuerySerialize&"+$("#form01").serialize(),function (data){
$("#msg").html("post 编号:"+data.id+"姓名:"+data.name);
},"json");
});