JavaWeb:Filter过滤器、JSON和AJAX

Session

Session是什么

  • Session是一个接口
  • Session是个会话。他是一个用来维护一个客户端和服务器之间关联的一种技术。
  • 每个客户端都有Session会话。

浏览器和Session会话之间的技术内幕

JavaWeb:Filter过滤器、JSON和AJAX

Filter过滤器

  1. Filter过滤器是JavaWeb三大组件之一(Servlet、Listener、Filter过滤器)
  2. Filter过滤器是JavaEE的规范,是接口。

如果做到权限限制

//1.创建一个类来实现Filter,并重写doFilter()方法
public class AdminFilter implements Filter {}
//2.在doFilter()编写验证代码
//对doFilter()的形参servletRequest进行类型转换
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
Object userName = httpServletRequest.getSession().getAttribute("userName");
if(userName==null){
//如果尚未登录,则跳转至登录页面
httpServletRequest.getRequestDispatcher("/logIn.jsp").forward(servletRequest,servletResponse);
   System.out.println("您还没有登录");
}else {
//否则就让程序继续往下走
filterChain.doFilter(servletRequest,servletResponse);
}
//4.在web.xml中配置
<filter>
	<filter-name>AdminFilter</filter-name>
    <filter-class>com.boerk.controller.AdminFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>AdminFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>//这里表示web下的admin文件夹里所有的文件
</filter-mapping>
  • Filter的生命周期
    • 构造器方法:在工程创建的时候执行
    • init初始化方法:在工程创建的时候执行
    • doFilter方法:每次拦截到请求就会执行
    • destroy销毁方法:停止web工程的时候执行

FilterConfig类

FilterConfig是Filter的配置信息文件夹。每次创建Filter的时候都会创建一个FilterConfig类。

FilterConfig类的作用是获取Filter过滤器的配置信息

  1. 获取Filter的别名(filterconfig.getFilterName()
  2. 获取Filter的初始化参数(filterConfig.getInitParameter(key);)
  3. 获取ServletContext对象(filterConfig.getServletContext();)

FilterChain

FilterChain过滤器链(多个过滤器一起工作)

FilterChain.doFilter()的作用

  1. 执行下一个Filter(如果有Filter)
  2. 执行目标资源(没有Filter)

在多个Filter过滤器执行的时候,执行顺序是在web.xml从上到下的顺序


Filter过滤器的拦截路径

  1. 精确匹配: <url-pattern>/admin/a.html</url-pattern>

  2. 目录匹配: <url-pattern>/admin/*</url-pattern>

  3. 后缀匹配: <url-pattern>*.html</url-pattern>


Json

JSON(JavaScr ipt Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,而且很多语言都提供了对json的支持(包括C,C++,C#,Java,JavaScript,Perl, Python等)。这样就使得JSON成为理想的数据交换格式。

json是一种轻量级的数据交换格式。

Json在Js里

var jsons = {
    "key1":"abc", // 字符串类型
    "key2":1234, // Number
    "key3":[1234,"21341","53"], // 数组
    "key4":{ // json 类型
            "key4_1" : 12,
            "key4_2" : "kkk"
    	},
    "key5":[{ // json 数组
            "key5_1_1" : 12,
            "key5_1_2" : "abc"
        },{
            "key5_2_1" : 41,
            "key5_2_2" : "bbj"
        }]
    };

json的类型是Object,是一个对象,通过json去调用key则可以获得value。

Json的两个常用方法

  • Json.stringify(jsonObj):将json对象转为json字符串。
  • Json.parse(jsonString):将json字符串转为json对象。

一般在操作json时使用json对象,在客户端和服务器中交互时,使用json字符串。


json在java里

  • JavaBean和json互相转换
//创建gson对象,调用toJson方法。将java对象转为String
Gson gson =new Gson();
String toJson = gson.toJson(emp);
//使用FromJson方法将Json字符串转换为Java对象
gson.fromJson(toJson,Dept.class); 
//第一个参数为json字符串,第二个参数为java对象类型
  • List集合与json互相转换
//创建gson对象,调用toJson方法。将List集合转为String
Gson gson =new Gson();
String toJson = gson.toJson(emp);
//创建一个类,去继承TypeToken,并将需要转换的类型写在泛型中。
gson.fromJson(toJson,new TypeToken.getType());
//此时fromJson里的第二个参数为你所创建的类的对象并调用getType方法。
  • Map集合与Json的互相转换
//完全同List
  • 由于如上的继承方式过于浪费资源,因此建议使用匿名内部类。
//这里以Map集合为例。
//创建泛型为Map<Integer,Dept>的匿名内部类
Map map = gson.fromJson(toJson, new TypeToken<Map<Integer,Dept>>(){}.getType());
  • 匿名内部类必须继承一个类或者实现一个接口
  • 匿名内部类不能是抽象类
  • 匿名内部类没有抽象方法

AJAX(阿贾克斯)

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。


原生AJAX

ajax是一种游览器通过js异步发起请求。局部更新页面的技术。

  1. 创建XMLHttpRequest对象
var xmlhttprequest = new XMLHttpRequest();
  1. 调用open方法设置请求参数
xmlhttprequest.open("GET","http://localhost:8080/AJAX/ajaxservlet?action=javaScriptAjax",true)
  1. 调用send方法发送请求
xmlhttprequest.send();
  1. 在send方法前绑定事件,处理请求完成后的操作
xmlhttprequest.onreadystatechange=function (){
if(xmlhttprequest.readyState==4 && xmlhttprequest.status==200){
			alert(xmlhttprequest.responseText);
	}
}

一般客户端和服务器交互时使用json。

我们一般将收到的内容写在页面上。

xmlhttprequest.onreadystatechange=function (){
		if(xmlhttprequest.readyState==4 && xmlhttprequest.status==200){
            //将收到的json字符串转为json对象然后获取属性并输出。
				var json= JSON.parse(xmlhttprequest.responseText);
				document.getElementById("div01").innerHTML="用户的ID是:"+json.id+",用户姓名是:"+json.name;
					}
				}
  • 同步:等执行Ajax内容的时候,客户端的其他内容会等待Ajax执行完再执行。(点击一个按钮后,整个页面卡死)
  • 异步:客户端和服务器同时执行各自的内容,互不干扰。

jQuery中的Ajax请求

  • .ajax方法
$.ajax({
		url:"http://localhost:8080/AJAX/ajaxservlet",
		data:"action=jQueryAjax",
		type:"GET",
    	//访问成功的回调函数(你要做什么)data是从服务器端拿回来的数据
		success:function (data){
			//将服务器穿回来的数据转为json对象类型
            var jsonobj=JSON.parse(data)
			$("#div1").html(jsonobj.name);
		},
		//常用的返回类型有XML、JSON和TXT
		dataType:"text"
		})
  • $.get和$.post方法在$.ajax方法的基础上进一步封装
    • url:请求的url地址
    • data:发送的数据
    • callback:成功的回调函数
    • type:返回的数据类型
$.get("http://localhost:8080/AJAX/ajaxservlet","action=jQueryAjax",function (data){
	$("#div1").html("get 姓名:"+data.name);
},"JSON")
  • $.getJSON
    • url
    • data
    • callback
$.getJSON("http://localhost:8080/AJAX/ajaxservlet","action=jQueryAjax",function (data){
	$("#div1").html("getJson 姓名:"+data.name);
})
  • $.serialize()
    • 用来获取form表单中所填的单局
"action=jQuerySerialize&"+$("#form01").serialize()
//一定要在action后面加上一个&,然后调用serialize()函数将数据改写为name=value&的形式。
上一篇:微信小程序5——小程序网络数据请求


下一篇:Filter 过滤器