SpringMVC进阶

SpringMVC进阶

1.异步调用

1.1 发送异步请求(重点)

发送异步请求(回顾)

<a href="javascript:void(0);" id="testAjax">访问controller</a><br>
<script type="text/javascript" src="/js/jquery-3.3.1.min.js"/>
<script type="text/javascript">
    $(function() {
    
    $("#testAjax").click(function () {
   //为id="testAjax"的组件绑定点击事件
        $.ajax({
   					//发送异步调用
            type:"POST",			 //请求方式:POST请求
            url:"ajaxController",	  //请求的地址
            data:'ajax message',	  //请求参数(也就是请求内容)
            dataType:"text",		 //响应正文类型
            contentType:"application/text"//请求正文的MIME类型
        });
    });
});
</script>

JQuery下载:Download jQuery | jQuery

测试:

@RequestMapping("/ajaxController")
public String ajaxController() {
   
    System.out.println("ajax request is running...");
    return "page.jsp";
}

异步请求传参

  • 名称:@RequestBody

  • 类型:形参注解

  • 位置:处理器类中的方法形参前方

  • 作用:将异步提交数据组织成标准请求参数格式,并赋值给形参

  • 范例:

    @RequestMapping("/ajaxController")
    public String ajaxController(@RequestBody String message) {
         
        System.out.println("ajax request is running..."+message);
        return "page.jsp";
    }
    
  • 注解添加到Pojo参数前方时,封装的异步提交数据按照Pojo的属性格式进行关系映射

    @RequestMapping("/ajaxPojoToController")
    public String ajaxPojoToController(@RequestBody User user) {
         
        System.out.println("controller pojo :"+user);
        return "page.jsp";
    }
    
  • 注解添加到集合参数前方时,封装的异步提交数据按照集合的存储结构进行关系映射

    @RequestMapping("/ajaxListToController")
    public String ajaxListToController(@RequestBody List<User> userList) {
         
        System.out.println("controller list :"+userList);
        return "page.jsp";
    }
    

1.2 返回异步请求数据

异步请求响应(回顾)

//为id="testAjaxReturnString"的组件绑定点击事件
$("#testAjaxReturnString").click(function () {
   
    //发送异步调用
    $.ajax({
   
        type: "POST",
        url: "ajaxReturnString",
        //回调函数
        success:function (data) {
   
            //打印返回结果
            alert(data);
        }
    });
});

异步请求响应

  • 名称:@ResponseBody

  • 类型:方法注解、返回值注解

  • 位置:处理器类中的方法前方

  • 作用:将异步提交数据组织成标准请求参数格式,并赋值给形参

  • 范例:

    @RequestMapping("/ajaxReturnString")
    @ResponseBody
    public String ajaxReturnString() {
         
        System.out.println("controller return string :");
        return "page.jsp";
    }
    
  • 方法返回值为Pojo时,自动封装数据成json对象数据

    @RequestMapping("/ajaxReturnJson")
    @ResponseBody
    public User ajaxReturnJson() {
         
        System.out.println("controller return pojo :");
        User user = new User();
        user.setName("Jock");
        user.setAge(20);
        return user;
    }
    
  • 方法返回值为List时,自动封装数据成json对象数组数据

    @RequestMapping("/ajaxReturnJsonList")
    @ResponseBody
    public List<User> ajaxReturnJsonList() {
         
        System.out.println("controller return list :");
        User user1 = new User();
        user1.setName("Tom");
        user1.setAge(20);
    
        User user2 = new User();
        user2.setName("Jerry");
        user2.setAge(25);
    
        ArrayList<User> list = new ArrayList<User>();
        list.add(user1);
        list.add(user2);
    
        return list;
    }
    

1.3 跨域访问(重点)

跨域访问:

  • 当通过域名A下的操作访问域名B下的资源时,称为跨域访问

    SpringMVC进阶_第1张图片
  • 跨域访问时,会出现无法访问的现象

    SpringMVC进阶_第2张图片

跨域环境搭建

  • 为当前主机添加备用域名
    • 修改Windows安装目录中host文件 C:\Windows\System32\drivers\etc
    • 格式:ip 域名
  • 动态刷新DNS
    • 命令:ipconfig/displaydns
    • 命令:ipconfig/flushdns

跨域访问支持

  • 名称:@CrossOrigin

  • 类型:方法注解、类注解

  • 位置:处理器类中的方法上方 或 类上方

  • 作用:设置当前处理器方法/处理器类中所有方法支持跨域访问

  • 范例:

    @RequestMapping("/cross")
    @ResponseBody
    @CrossOrigin
    public User cross() {
         
        System.out.println("controller cross :");
        User user = new User();
        user.setName("Jocker");
        user.setAge(22);
        return user;
    }
    
    //为id="testCross"的组件绑定点击事件
    $("#testCross").click(function () {
         
        //发送异步调用
        $.ajax({
         
            type: "POST",
            url: "cross",
            //回调函数
            success:function (data) {
         
                //打印返回结果
                alert("跨域调用信息反馈:"+data['name']+","+data['age']);
            }
        });
    });
    

2.拦截器

2.1 概述(重点)

请求处理过程解析

SpringMVC进阶_第3张图片

拦截器简介

拦截器(Interceptor):是一种动态拦截方法调用的机制

作用:

  • 在指定的方法调用前后执行预先设定的代码
  • 阻止原始方法的执行

核心原理:AOP思想

拦截器链:多个拦截器按照一定的顺序,对原始被调用功能进行增强

拦截器VS过滤器

  • 归属不同:Filter数据Servlet技术,Interceptor属于SpringMVC技术

  • 拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对SpringMVC的访问进行增强

    SpringMVC进阶_第4张图片

拦截器作用

  • 增强

2.2 自定义拦截器(重点)

拦截器开发

  • 制作拦截器功能类(通知)
  • 配置拦截器的执行位置(切入点)

拦截器开发入门

  • 实现HandlerInterceptor接口

    public class MyInterceptor implements HandlerInte

你可能感兴趣的:(框架,java,springmvc,web,restful)