JavaWeb-Filter,Json,Ajax


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");
});
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值