注意: 这里的返回就是返回到jsp页面

**** controller接收前台数据的方式,以及将处理后的model 传向前台*****

1、前台传递数据的接受:传的属性名和javabean的属性相同

(1)、使用基本类型,或引用类型进行接受

@RequestMapping(value="/select")

PublicString  select(String name,int age,Model model){

// 这样这里的name,age 就是我们前台传递的参数,也是我们Javabean中的属性。

System.out.println("name"+name+"age "+age);

model.addAttribute("user",user);

Return"list";

}

}

(2)、用注解@RequestParam绑定请求参数

用注解@RequestParam绑定请求参数a到变量a

当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,

例如: @RequestParam(value="a",required=false)

Controller如下

// 这种方式是参数a必须是存在的,如果不存在报异常,如果@RequestParam(value='a') 不给required 赋值的话,就默认为true

@RequestMapping(value= "/requestParam", method =RequestMethod.GET/POST)
public StringsetupForm(@RequestParam("a") String a,ModelMap model) {
   System.out.println(a); 
return "helloWorld";

}

// 这种方式是请求参数a不是一定要存在,如果存在就赋值,如果不存在也不会报异常

@RequestMapping(value= "/requestParam", method =RequestMethod.GET/POST)
public StringsetupForm(@RequestParam(value="a",required=false) String a,ModelMap model) {
   System.out.println(a); 
return "helloWorld";

}

 

(3)、使用pojo方式来接受:要求,前台属性的名称和javabean 的属性的名称一样。

// 这种方式使用的比较多

@RequestMapping(value="select")

PublicString  select(User user ,Model model){

Stringname= user.getName();

Stringage=user.getAge();

//  按照这些属性进行查询,之后将数据集合放到model中

LIst<Map<String,Object>> list=  new ArrayList<Map<String,Object>>();

list="按照条件查询的结果";

model.addAttribute("userlist",list);

Return"list";

}

(4)、使用pojo方式来接受:要求,前台属性的名称和javabean 的属性的名称一样。

JSP表单如下

<form method="post" action="hao.do">
    a: <input id="a" type="text"  name="a"/>
    b: <input id="b" type="text"  name="b"/>
    <input type="submit" value="Submit"/>
 </form>

Java  Pojo如下

public class Pojo{
        private String a;
        privateint b;
    }

Java Controller如下

@RequestMapping(method= RequestMethod.POST) 
public StringprocessSubmit(@ModelAttribute("pojo") Pojo pojo) {
    
    return"helloWorld";
}

(5)、如果前台有相同name值的数据传递则要使用数组来接收,相同名称的可能是有这样的数值但更多的是多选框,所以我们要使用数组来接收这样的值

@RequestMapping(value="select.do")

public Stringhello(String []username,Model model){

System.out.println(username.length);

Stringname1=username[0];

Stringname2=username[1];

model.addAttribute("helloworld", "hello"+name1+name2);

return"welcome";

}

使用数组的方式接受多选框的内容

(6)、这种方式和servlet 接受请求参数的方式是相同的,因为springmvc 提供了servlet的api 所以我们可以使用HttpServletRequest request 来获取参数

@RequestMapping(value="/hello.do")

publicString hello(HttpServletRequest request,Model model){

String name=request.getParameter("name");

System.out.println(name);

model.addAttribute("helloworld","hello"+name);

return"welcome";

}

(7)、通过@PathVariabl获取路径中的参数值

@RequestMapping(value="user/{id}/{name}",method=RequestMethod.GET/POST)

public String printMessage1(@PathVariable String id,@PathVariableString name, ModelMap model) {
        System.out.println(id);
        System.out.println(name);
        model.addAttribute("message","111111");
        return"users";
    }

例如,访问user/123/whd路径时,执行以上方法,其中,参数id=123,name=whd

@RequestMapping(value="user/{id}/{name}")其中的{id}/{name}就是占位符,这样和路径能完整对应,之后通过方法中的注解从请求路径中获取这些站位符位置的值。

**** 都看到了我们上面列举了参数接受方式,但是我们发现处理后的model(数据模型)的接受都是使用Model 这个对象来传的,这也是推存使用的,但还有其他方式,其实不管使用那种方式技术实现都是一样的,参数传递具体方式:******

2、 将数据模型向前台传值:

(1)、向前台传递一个bean或基本类型的值

@RequestMapping(value="select")

// 使用model 向前台传对象

Public String  select(User user ,Model model){

Stringname= user.getId();

//  按照这些属性进行查询,之后将数据放到model中

User  user="按照id获取的数据"

model.addAttribute("user",user);

Return"list";

}

(2)、向前台传list集合

@RequestMapping(value="/hello.do")

public String hello(User user,Modelmodel){

List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();

Map<String,Object> map1= newHashMap<String,Object>();

Map<String,Object> map2= newHashMap<String,Object>();

map1.put("name","name1");

map1.put("age", 1);

map2.put("name","name2");

map2.put("age", 2);

list.add(map1);

list.add(map2);

//  将list集合放在model中,在前台获取这个集合并进行遍历

model.addAttribute("ulist",list);

return"welcome";

}

前台使用c标签

<c:forEach   items="${ulist}"  var="user" >

${user.name}

${user.age}

</c:forEach>

****前面的几种都使用了model来传值,这也是比较推存的方式,但还有几种方式在这里给大家列出来:

(3)、ModelAndView  从字面意思我们就能看出这个对象包括,数据模型和视图名称

Public ModelAndView  select(User user){

ModelAndView    mav=new  ModelAndView    ("view_value");

// view 可以按照上面的这样写,也可以按照下面这样写,也就是view的两种赋值方式

// mav.setViewName("view_value"); 指定视图名

mav.addObject("key1",value);

mav.addObject("key2",value);

return modelAndView ;

}

(4)、使用map 来存储model 然后向前台传值

@RequestMapping(value="/hello.do")

public String hello(User user,Map<String,Object>  map){

List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();

Map<String,Object> map1= newHashMap<String,Object>();

Map<String,Object> map2= newHashMap<String,Object>();

map1.put("name","name1");

map1.put("age", 1);

map2.put("name","name2");

map2.put("age", 2);

list.add(map1);

list.add(map2);

//  将list集合放在model中,在前台获取这个集合并进行遍历,map和model是很相似的。

map.addAttribute("ulist",list);

return"welcome";

}

*************上面都是同步请求的,下面我们看看ajax异步请求数据的传递和接收*************

  • ajax请求向后台传值,前台传一般值
  • ajax请求向后台,前台传json数组格式的值

1、ajax 请求向后台传值一般格式的值,一般格式也就是jsonObject 格式的数据

$.ajax({

url:"selectinfo.do",

type:"post",

// data 就是向后台传递的值,有name和age两个值,而这里传的是Json对象,这个jquery会帮你转换为键值对的格式,就是xx=xx&xxxx=xxxxx...

//有些时候调用webservice的方法,需要json格式的字符串,所以不能传递json对象,而是json格式的字符串,所以要传递字符串

data:{name:"name1",age:2},

//  规定返回值的类型,这里是json格式返回

dataType:"json",

// data 为后台传过来的值

success:function(data){

// 在后台传的是一个jsonarray这里使用eval函数进行遍历

arr=eval(data);

alert("长度"+arr.length);

alert(arr);

for(var i=0;i<arr.length;i++){

alert("内容"+arr[i].title);

}

}

});

后台接受,这里数据的接受和前面说的数据的接收是相同的,即可以使用 request,变量,Javabean 等来接收

(1)、使用request 接收

@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)

public void  selectinfo(HttpServletRequest  request,HttpServletResponse   response){

Stringname= request.getParameter("name");

Stringage= request.getParameter("age");

System.out.println("v"+name);

System.out.println("v"+age);

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

Map<String,Object>map1= new HashMap<String,Object>();

Map<String,Object>map2= new HashMap<String,Object>();

Map<String,Object>map3= new HashMap<String,Object>();

map1.put("title","map1");

map1.put("artist","ADG3");

map1.put("mp3","musics/zjh.mp3");

map1.put("poster","images/m0.jpg");

map2.put("title","map2");

map2.put("artist","ADG3");

map2.put("mp3","musics/zhm.mp3");

map2.put("poster","images/m0.jpg");

map3.put("title", "暖心");

map3.put("artist","ADG3 Studios");

map3.put("mp3","musics/zhm.mp3");

map3.put("poster","images/m0.jpg");

list.add(map1);

list.add(map2);

list.add(map3);

// 转化为 json数组

JSONArraystr=JSONArray.fromObject(list);

try {

//  向前台输出值,获取PrintWriter 对象

PrintWriterout= response.getWriter();

// 将数据输出到 ajax的success函数中的data这个值

out.print(str.toString());

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(str.toString());

}

(2)、使用 变量String name  int age 来接收

@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)

public void  selectinfo(String name,int age,HttpServletResponse  response){

Stringname= request.getParameter("name");

Stringage= request.getParameter("age");

System.out.println("v"+name);

System.out.println("v"+age);

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

Map<String,Object>map1= new HashMap<String,Object>();

Map<String,Object>map2= new HashMap<String,Object>();

Map<String,Object>map3= new HashMap<String,Object>();

map1.put("title","map1");

map1.put("artist","ADG3");

map1.put("mp3","musics/zjh.mp3");

map1.put("poster","images/m0.jpg");

map2.put("title","map2");

map2.put("artist","ADG3");

map2.put("mp3","musics/zhm.mp3");

map2.put("poster","images/m0.jpg");

map3.put("title", "暖心");

map3.put("artist","ADG3 Studios");

map3.put("mp3","musics/zhm.mp3");

map3.put("poster","images/m0.jpg");

list.add(map1);

list.add(map2);

list.add(map3);

// 转化为json数组

JSONArraystr=JSONArray.fromObject(list);

try{

// 获取PrintWriter 对象

PrintWriterout= response.getWriter();

// 输出数据

out.print(str.toString());

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(str.toString());

}

(3)、使用javabean 来接接收

@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)

public void  selectinfo(User user,HttpServletResponse   response){

System.out.println("v"+user.getName());

System.out.println("v"+user.getId());

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

Map<String,Object>map1= new HashMap<String,Object>();

Map<String,Object>map2= new HashMap<String,Object>();

Map<String,Object>map3= new HashMap<String,Object>();

map1.put("title","map1");

map1.put("artist","ADG3");

map1.put("mp3","musics/zjh.mp3");

map1.put("poster","images/m0.jpg");

map2.put("title","map2");

map2.put("artist","ADG3");

map2.put("mp3","musics/zhm.mp3");

map2.put("poster","images/m0.jpg");

map3.put("title", "暖心");

map3.put("artist","ADG3 Studios");

map3.put("mp3","musics/zhm.mp3");

map3.put("poster","images/m0.jpg");

list.add(map1);

list.add(map2);

list.add(map3);

// 转化为json数组

JSONArraystr=JSONArray.fromObject(list);

try{

// 获取PrintWriter 对象

PrintWriterout= response.getWriter();

// 输出数据

out.print(str.toString());

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(str.toString());

}

2、ajax 请求向后台传json数组格式的值:

(1)、在前台ajax发送异步请求,传递数据的格式为jsonarray,具体代码如下:

<script type="text/javascript">

var arr=null;

$(document).ready(function(){

// jsonObject 中存放了一个jsonarray格式的数据

varallMenu1={"datas":[{title:"title1",age:1},{title:"title2",age:2},{title:"title3",age:3}]};

// data 就是向后台传递的值,有name和age两个值,而这里传的是Json对象,这个jquery会帮你转换为键值对的格式,就是xx=xx&xxxx=xxxxx...

//有些时候调用webservice的方法,需要json格式的字符串,所以不能传递json对象,而是json格式的字符串,所以要传递字符串

/* 将json格式的JavaScript对象转化为json格式的字符串进行传递 */

var arrs = JSON.stringify(allMenu1);

/* 发送异步请求,获取jsonarray 数据 */

$.ajax({

url:"selectinfo.do",

type:"post",

data:"val="+arrs,

dataType:"json",

success:function(data){

arr=eval(data);

alert("长度"+arr.length);

alert(arr);

for(var i=0;i<arr.length;i++){

alert("内容"+arr[i].title);

}

}

});

});

</script>

(2)、后台接收前台传递的jsonarray数组格式的数据

@RequestMapping(value="selectinfo.do",method=RequestMethod.POST)

public void  selectinfo(HttpServletRequest  request,HttpServletResponse   response){

// 通过关键字获取的就是一个jsonobject对象格式的数据

String  string =request.getParameter("val");

JSONObject  json = new JSONObject();

// 将string 转化为 json

json=json.fromObject(string);

//这个jsonObject对象的key 就是datas 而value 就是一个jsonarray,通过关键子获取jsonarray

JSONArray  arr=(JSONArray)json.get("datas");

// 获取数组中的jsonobject数据

JSONObject  obj1= arr.getJSONObject(0);

JSONObject  obj2= arr.getJSONObject(1);

Stringname1=obj1.getString("title");

Stringname2=obj2.getString("title");

System.out.println("json数据1"+name1);

System.out.println("json数据2"+name2);

List<Map<String,Object>>list= new ArrayList<Map<String,Object>>();

Map<String,Object>map1= new HashMap<String,Object>();

Map<String,Object>map2= new HashMap<String,Object>();

Map<String,Object>map3= new HashMap<String,Object>();

map1.put("title","map1");

map1.put("artist","ADG3");

map1.put("mp3","musics/zjh.mp3");

map1.put("poster","images/m0.jpg");

map2.put("title","map2");

map2.put("artist","ADG3");

map2.put("mp3","musics/zhm.mp3");

map2.put("poster","images/m0.jpg");

map3.put("title", "暖心");

map3.put("artist","ADG3 Studios");

map3.put("mp3","musics/zhm.mp3");

map3.put("poster","images/m0.jpg");

list.add(map1);

list.add(map2);

list.add(map3);

// 将list集合转化为jsonarray数组

JSONArraystr=JSONArray.fromObject(list);

try {    // 其实ajax异步请求和同步请求最大的区别就是这里数据的输出,ajax异步请求数据的输出使用了打印输出流对象来将数据输出

PrintWriterout= response.getWriter();

out.print(str.toString());

}catch (IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(str.toString());

}

springmvc中同步/异步请求参数的传递以及数据的返回的更多相关文章

  1. Springmvc中 同步/异步请求参数的传递以及数据的返回

    转载:http://blog.csdn.net/qh_java/article/details/44802287 注意: 这里的返回就是返回到jsp页面 **** controller接收前台数据的方 ...

  2. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...

  3. 异步请求Ajax(取得json数据)

    异步请求Ajax 没有学习Ajax之前请求数据的时候都是整个页面全部刷新了一次,也就是每次请求都会重新请求所有的资源.但是在很多时候不需要页面全部刷新,仅仅是需要页面的局部数据刷新即可,此时需要发送异 ...

  4. Jquery中Ajax异步请求中的async参数的作用

    之前不知道这个参数的作用,上网找了前辈的博客,在此收录到自己的博客,希望能帮到更多的朋友: test.html <a href="javascript:void(0)" on ...

  5. 从零开始学 Web 之 Ajax(五)同步异步请求,数据格式

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  6. http 同步异步请求

    在用户交互模式下,当你改变表单中某个组件的值时, 譬如你填写名字.修改性别.选择爱好的时候,浏览器和服 务器至今没有发生任何交互,只有当你点击submit的时候, 浏览器才会把你的参数,也就是form ...

  7. jQuery基础(Ajax,load(),getJSON(),getScript(),post(),ajax(),同步/异步请求数据)

    1.使用load()方法异步请求数据   使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为:   load(url,[data],[callba ...

  8. okhttp框架源码分析从同步&异步请求使用开始

    对于okhttp在如今项目中的普及程度已经不言而喻啦,基本上如今网络请求都会基于它去进行封装,而非前几年用Android的网络框架HttpURLConnection和Apache HttpClient ...

  9. IO中同步异步,阻塞与非阻塞 -- 通俗篇

    一.同步与异步 同步/异步, 它们是消息的通知机制 1. 概念解释 A. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例 ...

随机推荐

  1. Oracle数据库中违反唯一约束的处理

    根据NULL的定义,NULL表示的是未知,因此两个NULL比较的结果既不相等,也不不等,结果仍然是未知.根据这个定义,多个NULL值的存在应该不违反唯一约束. 实际上Oracle也是如此实现的: SQ ...

  2. Android 系统服务一览表

    在<Zygote进程[3]--SystemServer的诞生>一文中介绍了SystemServer的诞生,本文来看一下SystemServer中初始化的系统服务. 1.AccountMan ...

  3. 基于Qt的wifi智能小车的制作(一)

     基于Qt的wifi智能小车的制作(一) 好久不写博客了,真的是有点惭愧了.翻开上一次的博客,到现在已经2个多月了,只能说是自己太懒惰了!忙是另一回事!趁今天晚上有点时间回顾下这一段时间的收获以及做的 ...

  4. Jump Game leetcode java

    题目: Given an array of non-negative integers, you are initially positioned at the first index of the ...

  5. DIV焦点事件详解 --【focus和tabIndex】​

    添加 tabindex='-1' 属性: 默认:获取不到焦点事件(blur) 1 <div class="wl-product" id="wl-product&qu ...

  6. java读取某个目录是否有新增文件(轮询)

    使用 commons-io 中的文件监控 jar包: package org.demo.file; import java.util.concurrent.TimeUnit; import org.a ...

  7. URAL 1748

    题目大意:找出T组不大于ni(i=1,2,3,...,T)的因子数最多的数mi(i=1,2,3,...,T),有多个数时输出最小的. KB     64bit IO Format:%I64d & ...

  8. 基于Java spring框架的微信企业号开发中关于js-sdk的配置

    在调用js-sdk的第一步,我们需要引入js-sdk的js链接,然后执行wx.config,官方示例如下所示: wx.config({ debug: true, // 开启调试模式,调用的所有api的 ...

  9. Linux shell 脚本入门教程+实例

    原文:http://www.wiquan.com/article/136 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的工具.She ...

  10. C++中无法解析的外部符号错误

      在编译C++程序的时候,如果引用了对应的头文件,但是调用一个函数的时候仍然出现" 无法解析的外部符号错误"的编译错误,比如: 无法解析的外部符号__imp__PathFileE ...