SpringMVC数据交换

前台JSP页面:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<script type="text/javascript" src="js/jquery.min.js"></script>
<a href="/day01/spring/mvc">submit</a>

<input type="button" id="bt1" value="ajax" />

<script type="text/javascript">

    var data = {
        "name":"jacky",
        "age":"20"
    }
    /*
    // 请求Key/Value(无需设置请求类型)
    $(function(){
        $("#bt1").click(function(){
            $.ajax({
                type:"POST",
                url:"/day01/spring/mvc",
                //contentType:"application/json;charet=utf-8",
                data:data,
                success:function(data){
                    alert(data)
                }
            })
        })
    })
    */

    // 请求Json字符串(需要设置请求类型)
    $(function(){
        $("#bt1").click(function(){
            $.ajax({
                type:"POST",
                url:"/day01/spring/mvc",
                contentType:"application/json;charet=utf-8",
                data:JSON.stringify(data),
                success:function(data){
                    alert(data)
                }
            })
        })
    })

</script>

Controller源码:

package com.spring;

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.model.User;

@ControllerAdvice
@RequestMapping("/spring")
public class TestControllers
{
      // 无返回值的Controller结合ajax实现局部刷新,有返回值的Controller实现页面的跳转与数据的响应

      /*
       * 将返回值已Object的形式输出到当前页面
       * PrintWriter 输出对象
       *
       */

        /*
        @RequestMapping("/mvc")
        public void showPerson(PrintWriter printWriter, @RequestBody String param)
        {

            System.out.println(param);
            // 写入Response的Body体

            String st ="{\"name\":\"zhangsna\",\"name1\":\"zhangsna\"}";
            Map map = JSONObject.fromObject(st);
            System.out.println(map);
            printWriter.println(map);
        }
        */

        /*
         * POJO(JavaBean)  接收前台传递的key/value,
         * @ResponseBody 将User对象输出至Response的Body中
         */

        /*
          @RequestMapping("/mvc")
          public  @ResponseBody User showPerson(User user)
          {
             System.out.println(user);
             return user;
          }
         */

        /*
         *  接收前台传递的Json字符串,
         *  @ResponseBody 将User对象输出至Response的Body中
         */
        /*@RequestMapping("/mvc")
        @ResponseBody
        public Map showPerson( @RequestBody String params)
        {
            @SuppressWarnings("unchecked")
            Map<String,Object> map = JSONObject.fromObject(params);
            System.out.println(map);
            return map;
        }*/

        /*
         * ModelAndView 视图(view)和模型(数据)
         * Model 内置的一个数据对象
         *
         */

        @RequestMapping("/demo1")
        public ModelAndView execute(Model model)
        {
            // 设置数据模型
            model.addAttribute("name", "Jacky");
            model.addAttribute("age", "20");
            model.addAttribute("school", "陕西理工大学");
            //设置视图数据模型
            ModelAndView mav = new ModelAndView();
            mav.setViewName("return");
            mav.addObject("data",model);
            return mav;
        }
        /*
         * 自定义参数
         */
        @RequestMapping("/demo2")
        public ModelAndView execute()
        {
            Map data = new HashMap();
            Map map = new HashMap();
            // 设置数据模型
            map.put("name", "Jacky");
            map.put("age", "20");
            map.put("school", "陕西理工大学");
            data.put("data", map);
            //返回视图数据模型
            return new ModelAndView("return",data);
        }

        /*
         * @RequestParam("user") user和前台传递的值保持一致
         *
         */
        @RequestMapping("/demo3")
        public void execute( PrintWriter writer ,@RequestParam("user") String name)
        {
            writer.print(name);
        }

        /*
         * @RequestParam("user") user和前台传递的值保持一致
         * RequestMethod.GET  请求方式
         */
        @RequestMapping(value=("/demo04"),method={RequestMethod.GET,RequestMethod.POST})
        public void executes( PrintWriter writer ,@RequestParam("user") String name)
        {
            writer.print(name);
        }

        /*
         * method={RequestMethod.GET,RequestMethod.POST} 请求方式
         * @PathVariable("testId") 将url中的变量绑定到Controller的形参中
         * 可以实现rest接口
         */
        @RequestMapping(value=("/delete/{testId}"),method={RequestMethod.GET,RequestMethod.POST})
        public void execut( PrintWriter writer ,@PathVariable("testId") String id)
        {
            writer.print("Delete ID IS :"+id);
        }
}

响应视图JSP:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>returnJsp</title>
  </head>
  <body>
    This is return JSP page. <br>
    返回数据:${data}
  </body>
</html>

常见错误分析:

  1.运行Tomcat时找不到类错误,去tomcat看,项目是部署到Tomcat的(MyEclipse和Idea在对应的输出路径处应该也有jar包的依赖关系)

  2.处理器根据url找不到handler

  

  3.转发jsp页面找不到

  

  4.json数据转Java对象

5.浏览器406错误

  

时间: 2024-10-01 04:49:29

SpringMVC数据交换的相关文章

【学习】006数据交换格式与SpringIOC底层实现

课程目标 XML和JSON Java反射机制 手写SpringIOC 什么是数据交换格式 客户端与服务器常用数据交换格式xml.json.html 数据交换格式用场景 移动端(安卓.IOS)通讯方式采用http协议+JSON格式 走restful风格. 很多互联网项目都采用Http协议+JSON 因为xml比较重WebService服务采用http+xml格式 银行项目使用比较多 数据交换格式 JSON简单使用 什么是JSON JSON(JavaScript Object Notation)是一

java中的线程协调与线程间的数据交换

Java中提供多种方式协调线程的工作. CountDownLatch:当多个也就是具体的数量等于CountDownLatch初始化参数的时候.线程达到了预期状态或者完成了预期工作时触发事件,其他线程可以等待这个事件来触发自己的后续工作.等待的线程是多个.达到了预期状态的线程会调用CountDownLatch的countDown方法.等待的线程会调用CountDownLatch的await方法. import java.util.concurrent.CountDownLatch; import

JQuery + XML作为前后台数据交换格式实践

JQuery + xml作为前后台数据交换 JQuery提供良好的异步加载接口AJAX,可以局部更新页面数据, http://api.jquery.com/category/ajax/ xml作为一种轻量数据格式,被浏览器js引擎普遍支持,同json格式,但是没有json那么精简. 使用AJAX+xml数据格式来实现动态页面,有以下好处: 1. 松耦合, 页面HTML和数据彻底分离, 即表示层 和 数据层分开, 有利前台样式定制. 不同于以往后台脚本嵌套HTML标签,并输出数据到标签的合适位置,

iOS 中 XML 数据交换格式

     XML 是一种自描述的数据交换格式,但是 XML 的数据交换格式并没有 JSON 来的轻便,但是无可否认的是,XML 的应用范围也是非常广泛的,比如在 ROS(一个开源机器人操作系统)中利用 XML 来描述包的依赖关系等,当然还有很多了.      对于 XML 文档操作包括了"读"与"写",读入 XML 文档并分析的过程称为"解析" XML 文档,"解析" XML 文档在实际开发中是占很大比重的.      读写

Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger

本文将要介绍的内容都是Java5中的新特性,一个是倒计时记数器---CountDownLatch,另一个是用于线程间数据交换的Exchanger. 一.CountDownLatch 1.什么是CountDownLatch? 倒计时计数器,调用CountDownLatch对象的CountDown()方法就将计数器减一,当计数到达0时,则所有等待者或者全部等待者开始执行. 2.如何用? new CountDownLatch(1); 直接new,其构造函数必须传一个int类型的参数,参数的意思是: c

Disruptor——一种可替代有界队列完成并发线程间数据交换的高性能解决方案

本文翻译自LMAX关于Disruptor的论文,同时加上一些自己的理解和标注.Disruptor是一个高效的线程间交换数据的基础组件,它使用栅栏(barrier)+序号(Sequencing)机制协调生产者与消费者,从而避免使用锁和CAS,同时还组合使用预分配内存机制.缓存行机制(cache line).批处理效应(batch effect)来达到高吞吐量和低时延的目标.目前Disruptor版本已经迭代至3.0,本论文是基于Disruptor1.0写就,在新版本中,相对与1.0版本,其核心设计

第三次作业-前端与后台数据交换问题

问题:JS前端取得并解析后台服务器返回的JSON数据方法有哪些? 前一段时间,我在做一个有关美食的Web App,很多商家的店铺信息以及一些用户评论信息等内容需要从后台来获取,如果仅仅只是静态布局的话就太过于死板,但是在进行前端与后端的数据交换时遇到不少问题,如题目JS前端取得并解析后台服务器返回的JSON数据的方法就是问题之一. 在解决这个问题之前,首先需要了解JavaScript eval()函数,eval(string)函数可计算某个字符串,并执行其中JavaScript代码. JS前端取

iOS 中 JSON 数据交换格式

     JSON (JavaScript Object Notation)是一种轻量级的数据交换格式.JSON 的具体教程,可以参见 JSON 中国:http://www.json.org.cn/index.htm ,当然还有 JSON 在线校验格式化工具:http://www.bejson.com/ ,希望深入学习 JSON 可以参考其他教程.JSON 的轻量级是相对于 XML 文档结构而言的,描述项目字符少,所以描述相同的数据所需的字符个数要少,当然传输的速度就会提高而流量也会减少.  

JQuery + JSON作为前后台数据交换格式实践

JQuery + JSON作为前后台数据交换 JQuery提供良好的异步加载接口AJAX,可以局部更新页面数据, http://api.jquery.com/category/ajax/ JSON作为一种轻量数据格式,被浏览器js引擎普遍支持,同xml格式. 使用AJAX+JSON数据格式来实现动态页面,有以下好处: 1. 松耦合, 页面HTML和数据彻底分离, 即表示层 和 数据层分开, 有利前台样式定制. 不同于以往后台脚本嵌套HTML标签,并输出数据到标签的合适位置, 来实现动态页面,表示