Fliter+Json+Ajax

Filter是什么—过滤器

1、是Java Web 三大组件之一(Servlet 程序+Listener+Filter)
2、是Java EE规范,即接口
3、作用:拦截请求、过滤响应

场景:
1、权限检查
2、日记操作
3、事务管理
……等等

初体验:

在这里插入图片描述
Filter 过滤器的使用步骤:

  1. 编写一个类去实现 Filter 接口
  2. 实现过滤方法 doFilter()
  3. 到 web.xml 中去配置 Filter 的拦截路径
@Override
    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");//从数据域拿那边存好的user
        //如果为null,说明还没有登录
        if(user == null){
            servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
            return;
        }else{//登录成功
            //让程序继续往下,访问用户的目标资源
            filterChain.doFilter(servletRequest,servletResponse);
            //已经有权限了,但是不知道要查询啥内容、啥文件
        }
    }

意思就是:先检查一遍,如果检查通过了再继续往下走。
如若不合格,就跳转到指定界面(比如强制要求登录:这里就是login.jsp)
xml的小变化:

<!--filter 标签用于配置一个 Filter 过滤器-->
    <filter>
        <!--给 filter 起一个别名-->
        <filter-name>AdminFilter</filter-name>
        <!--配置 filter 的全类名-->
        <filter-class>com.lyp.AdminFilter</filter-class>
    </filter>

    <!--filter-mapping 配置 Filter 过滤器的拦截路径-->
    <filter-mapping>
        <!--filter-name 表示当前的拦截路径给哪个 filter 使用-->
        <filter-name>AdminFilter</filter-name>
        <!--url-pattern 配置拦截路径
         / 表示请求地址为:http://ip:port/工程路径/ 映射到 IDEA 的 web 目录
         /admin/* 表示请求地址为:http://ip:port/工程路径/admin/*
         -->
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>

完整的用户登录

Filter生命周期

Filter 的生命周期包含几个方法
1、构造器方法

2、init 初始化方法
第 1,2 步,在 web 工程启动的时候执行(Filter 已经创建)

3、doFilter 过滤方法
第 3 步,每次拦截到请求,就会执行

4、destroy 销毁
第 4 步,停止 web 工程的时候,就会执行(停止 web 工程,也会销毁 Filter

FilterConfig类

FilterConfig 类见名知义,它是 Filter 过滤器的配置文件类。
Tomcat 每次创建 Filter 的时候,也会同时创建一个 FilterConfig 类,这里包含了 Filter 配置文件的配置信息。

FilterConfig 类的作用是获取 filter 过滤器的配置内容
1、获取 Filter 的名称 filter-name 的内容
2、获取在 Filter 中配置的 init-param 初始化参数
3、获取 ServletContext 对

<!--filter 标签用于配置一个 Filter 过滤器-->
<filter>
<!--给 filter 起一个别名-->
<filter-name>AdminFilter</filter-name>
<!--配置 filter 的全类名-->
<filter-class>com.atguigu.filter.AdminFilter</filter-class>

<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>

<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost3306/test</param-value>
</init-param>
</filter>

多个过滤器的整体

请添加图片描述

Filter 的拦截路径

请添加图片描述

什么是Json

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

JSON 在 JavaScript 中的使用。

Json的定义

json的访问

接送本身是一个对象,json中的key,我们可以理解为是对象中的一个属性。
json中的key访问,就跟访问对象的属性一样:json对象.key

json的两个常用方法

json常用对象:

  • 对象形式:我们叫他Json对象 一般操作json之中的数据的时候,用对象形式
  • 字符串形式:我们把他叫做json字符串 一般要在客户端、服务器之间进行数据交换 的时候,使用json字符串

可以互相转化
对象 字符串
JSON.stringify () <-----> JSON.parse()

// 把 json 对象转换成为 json 字符串
var jsonObjString = JSON.stringify(jsonObj); // 特别像 Java 中对象的 toString
alert(jsonObjString)
// 把 json 字符串。转换成为 json 对象
var jsonObj2 = JSON.parse(jsonObjString);
alert(jsonObj2.key1);// 12
alert(jsonObj2.key2);// ab

JSON在java中使用

记得导包:gson.jar

一般最常用三个:

javaBean 和 json 的
List 和 json
@Test
public void test2() {
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "国哥"));
personList.add(new Person(2, "康师傅"));
Gson gson = new Gson();
// 把 List 转换为 json 字符串
String personListJsonString = gson.toJson(personList);
System.out.println(personListJsonString);
List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
System.out.println(list);
Person person = list.get(0);
System.out.println(person);
}
map 和 json
// 1.2.3、map 和 json 的互转
@Test
public void test3(){
Map<Integer,Person> personMap = new HashMap<>();
personMap.put(1, new Person(1, "国哥好帅"));
personMap.put(2, new Person(2, "康师傅也好帅"));
Gson gson = new Gson();
// 把 map 集合转换成为 json 字符串
String personMapJsonString = gson.toJson(personMap);
System.out.println(personMapJsonString);
// Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new
PersonMapType().getType());
Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new
TypeToken<HashMap<Integer,Person>>(){}.getType());
System.out.println(personMap2);
Person p = personMap2.get(1);
System.out.println(p);
}

Json 转换成 常见类型的集合需要:
Gson.jar包内部提供了一个类:TypeToken
需要手动继承一个这个类的 子类,然后啥也不用干

public class PersonListType extends TypeToken<ArrarList<Person>>{}

Ajax

是什么

AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发
技术。
ajax 是一种浏览器通过 js 异步发起请求,局部更新页面的技术。
Ajax 请求的局部更新,浏览器地址栏不会发生变化
局部更新不会舍弃原来页面的内容

异步:
在这里插入图片描述

本质上来说,就是彼此互不干扰,打破了原来线性的阻塞。

原生JS里面的ajax示例

ajax本身也是服务器,也是Servlet
也需要到web.xml 里面配置

	<head>
		<meta http-equiv="pragma" content="no-cache" />
		<meta http-equiv="cache-control" content="no-cache" />
		<meta http-equiv="Expires" content="0" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
		<script type="text/javascript">
			function ajaxRequest() {
// 				1、我们首先要创建XMLHttpRequest 
                var xmlhttprequest = new XMLHttpRequest();
// 				2、调用open方法设置请求参数
                xmlhttprequest.open("GET","http://localhost:8080/16_json_ajax_i18n/ajaxServlet?action=javaScriptAjax",true);

// 				4、在send方法前绑定onreadystatechange事件,处理请求完成后的操作。
				xmlhttprequest.onreadystatechange = function (){
               	   if(xmlhttprequest.readyState==4&&xmlhttprequest.status ==200){
               	   	var jsonObj = JSON.parse(xmlhttprequest.responseText);

               	   	//写在页面上
               	   	  document.getElementById("div01").innerHTML="编号:"+jsonObj.id+",姓名"+jsonObj.name;

				   }
				}
// 				3、调用send方法发送请求
				xmlhttprequest.send()
			}
		</script>
	</head>
	<body>	
		<button onclick="ajaxRequest()">ajax request</button>
		<div id="div01">
		</div>
	</body>

jQuery 里面的ajax请求

最常用的五个方法

url 表示请求的地址
type 表示请求的类型 GET 或 POST 请求
data 表示发送给服务器的数据
格式有两种:
一:name=value&name=value
二:{key:value}
success 请求成功,响应的回调函数
dataType 响应的数据类型
常用的数据类型有:
text 表示纯文本
xml 表示 xml 数据
json 表示 json 对象

ajax方法

// ajax请求
				$("#ajaxBtn").click(function(){
					$.ajax({
						url:"http://localhost:8080/16_json_ajax_i18n/ajaxServlet",
						data:"action=javaScriptAjax",
						type:"GET",
                        success:function (data){
							alert("服务器返回了:"+data);
							//var jsonObj = JSON.parse(data);
							$("#msg").html("编号:"+data.id + ",姓名:"+data.name);
						},
						dataType:"json"  //这里直接使用json对象更加方便,不用转化
					});
					alert("ajax btn");

				});

get post方法

参数少了个type="GET"

// ajax--get 请求
 $("#getBtn").click(function(){
     $.get("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGet",function (data) 
     {
			$("#msg").html(" get 编号:" + data.id + " , 姓名:" + data.name);
			},"json");
  });
                // ajax--post 请求
 $("#postBtn").click(function(){
		 $.post("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryPost",function (data)
			 {
						$("#msg").html(" post 编号:" + data.id + " , 姓名:" + data.name);
					},"json");
				});

getjson

 //ajax-getJson请求
$("#getJSONBtn").click(function(){
	$.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGetJSON",function
		(data) {
		  $("#msg").html(" getJSON 编号:" + data.id + " , 姓名:" + data.name);
		});
});

表单序列化

// ajax 请求
$("#submit").click(function(){
// 把参数序列化
$.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQuerySerialize&" +
$("#form01").serialize(),function (data) {
$("#msg").html(" Serialize 编号:" + data.id + " , 姓名:" + data.name);
});
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值