注意: 这里的返回就是返回到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. unity3d-地图制作之光照贴图Lightmapping

    今天无聊随便翻看了暗黑战神的场景资源,发现了一个以前没怎么注意的静态场景优化问题. 什么是静态场景,也就是说这个场景是不会变化.比如MMO游戏中选择人物的场景. 就拿默认的暗黑战神的选择人物场景来看, ...

  2. [ GIT ] GIT tip : A simple .gitconfig file

    reference : http://fle.github.io/git-tip-a-simple-gitconfig-file.html As several friends have asked ...

  3. 如何记录linux终端下的操作日志

    如何记录linux终端下的操作日志 在linux终端下,为方便检查操作中可能出现的错误,以及避免屏幕滚屏的限制,我们可以把操作日志记录下来.常用的工具有 screen,script,以及tee等,通过 ...

  4. C柔性数组

    柔性数组成员 柔性数组 .允许结构中包含一个大小可变的数组,sizeof返回的这种结构大小不包括柔性数组的内存. .包含柔性数组成员的结构要使用malloc()函数进行内存的动态分配.分配的内存大于结 ...

  5. JConsole详解

    一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JCons ...

  6. Common Internet File System

    CIFS (Common Internet File System) is a protocol that gained popularity around the year 2000, as ven ...

  7. 用java查询HBase中某表的一批数据

    java代码如下: package db.query; import java.io.IOException; import org.apache.hadoop.conf.Configuration; ...

  8. 系统对接API调用

    在与公司外部系统对接时,API接口一般采用REST风格,对外暴露HTTP服务.只需要将入参封装好,并发起HTTP请求即可.具体请求流程如下图所示: 数据格式 API调用参数分为系统参数和业务参数,请求 ...

  9. j2ee model1模型完成分页逻辑的实现 详解!

    在显示用户全部信息的页面,在显示全部数据的时候,长长的滚动条,像是没有边界的天空一样, 让用户查看数据很不方便. 于是, 我们要把这些数据分页显示, 就像office的word一样,每页显示一定数量的 ...

  10. PS-点击选中某一个图层

    需要点击选中某一图层的时候,需要勾选[自动选择]