spring nvc与ajax map,SpringMVC笔记(3)方法参数及处理ajax

SpringMVC的转发和重定向

在spring-mvc.xml中配置视图解析器

当返回类型是String时前缀和后缀字符串拼接即jsp文件的路径

如果字符串开头是redirect:/则为重定向,可以访问另一个方法的url或者公开的.jsp文件,WEB-INF下的资源不能访问

@RequestMapping("/aaa")

public String f1(){

System.out.println(this.getClass() + "日志1... f1()..转发 meto");

return "test2";

}

@RequestMapping("/bbb")

public String f2(){

System.out.println(this.getClass() + "日志2... f2()..重定向 meto");

//return "redirect:test2"; //web-inf/下的资源不让访问,只能转发

//return "redirect:/fff/aaa.do";

return "redirect:/test1.jsp";

}

SpringMVC中方法的返回值

ModelAndView,重定向和转发形式

方法的参数为ModelAndView mv

返回值为 mv

mv.setViewName();为转发和重定向的方法

代码演示:

@RequestMapping("/ccc")

public ModelAndView f3( ModelAndView mv ){

System.out.println(this.getClass() + "日志3... f1()..转发 meto");

mv.setViewName("test2");

return mv;

}

@RequestMapping("/ddd")

public ModelAndView f4( ModelAndView mv){

System.out.println(this.getClass() + "日志4... f2()..重定向 meto");

//mv.setViewName("redirect:test2"); //web-inf/下的资源不让访问,只能转发

mv.setViewName("redirect:/test1.jsp");

return mv;

}

返回值为JSON

@ResponseBody+手动拼接

参数 HttpServletResponse

代码演示:

@RequestMapping("/eee")

@ResponseBody

public void f5(HttpServletResponse resp ) throws IOException{

System.out.println(this.getClass() + "日志3... f1()..转发 meto");

String str="{'success':0,'data':['张三','bbb','ccc']}";

resp.setCharacterEncoding("utf-8");

resp.setContentType("text/html;charset=utf-8");

resp.getWriter().print(str);

}

@ResponseBody+jar包自动拼接

导入jar包

aa7032a350ef

021.PNG

new JSONObject对象,put("","")方法存数据

代码演示

@RequestMapping("/fff")

@ResponseBody

public void f6(HttpServletResponse resp) throws IOException{

System.out.println(this.getClass() + "日志3... f1()..转发 meto");

List ulist = new ArrayList();

ulist.add( new Users("A1","战三1",21));

ulist.add( new Users("A2","战三2",22));

ulist.add( new Users("A3","战三3",23));

ulist.add( new Users("A4","战三4",20));

ulist.add( new Users("A5","战三5",25));

ulist.add( new Users("A6","战三6",26));

JSONObject js = new JSONObject();

js.put("success", 0);

js.put("data", ulist);

resp.setCharacterEncoding("utf-8");

resp.setContentType("text/html;charset=utf-8");

resp.getWriter().print( js.toString() );

}//f6

@ModelAttribute注解:Controller中预先执行的方法

代码演示:

会先执行pre1方法

@Controller

@RequestMapping("/sss")

public class Second {

@ModelAttribute

public void pre1(){

System.out.println("...pre1()....");

}

@RequestMapping("/aaa")

public String s1(){

System.out.println(this.getClass()+"日志1...");

return "test2";

}

}

预处理-对象处理

@ModelAttribute

在预处理方法中返回一个对象如Users,它可以是从数据库查到的或者通过参数接收创建的,它被放在了Model/ModelMap中

将方法的返回类型的首字母小写的字符串作为键存放

可以在另一个方法里通过Model,ModelMap来获取

代码演示:

@ModelAttribute

public Users pre1(){

System.out.println("...pre1()....预处理,并放置对象在 Model/ModelMap");

//可能是从数据查询出的 或者 通过参数接收创建的

Users u = new Users("A001","瓷洗太后",40);

return u;

}

@RequestMapping("/aaa")

public String s1( Model md, ModelMap mdMap , ModelAndView mv){

System.out.println(this.getClass()+"日志1..." + md.asMap().get("users"));

System.out.println(this.getClass()+"日志2..." + mdMap.get("users"));

System.out.println(this.getClass()+"日志3..." + mv.getModelMap().get("users"));

return "test2";

}

预处理-对象处理+key:@ModelAttribute("uvv")

这次注解中的字符串为键,不是返回值类型的小写了

数据仍然存放在Model/ModelMap中

代码演示:

@ModelAttribute("uvv")

public Users pre4(){

System.out.println("...pre4()....预处理,并放置对象在 Model/ModelMap");

//可能是从数据查询出的 或者 通过参数接收创建的

Users u = new Users("A001","拿破轮",40);

return u;

}

@RequestMapping("/aaa")

public String s1( Model md, ModelMap mdMap , ModelAndView mv){

System.out.println(this.getClass()+"日志1..." + md.asMap().get("uvv"));

System.out.println(this.getClass()+"日志2..." + mdMap.get("uvv"));

System.out.println(this.getClass()+"日志3..." + mv.getModelMap().get("uvv"));

return "test2";

}

预处理-对象处理+model

预处理方法的参数为(Model md)时,可以通过md.addAttribute("",u)来存到Model/ModelMap中

代码演示:

@ModelAttribute

public void pre5(Model md){

System.out.println("...pre5()....预处理,并放置对象在 Model/ModelMap");

//可能是从数据查询出的 或者 通过参数接收创建的

Users u = new Users("A001","焊武帝",40);

md.addAttribute("www", u);

}

@RequestMapping("/aaa")

public String s1( Model md, ModelMap mdMap , ModelAndView mv){

System.out.println(this.getClass()+"日志1..." + md.asMap().get("www"));

System.out.println(this.getClass()+"日志2..." + mdMap.get("www"));

System.out.println(this.getClass()+"日志3..." + mv.getModelMap().get("www"));

return "test2";

}

预处理--对象处理+形参@ModelAttribute

预处理方法中的参数md.addAttribute("xxx",u);

在获取时可以在另一个方法的参数里

(@ModelAttribute("xxx") Users t)

这样t就是预处理方法中所存的对象

代码演示:

@ModelAttribute

public void pre6(Model md){

System.out.println("...pre6()....预处理,并放置对象在 Model/ModelMap");

//可能是从数据查询出的 或者 通过参数接收创建的

Users u = new Users("A001","糖太宗",40);

md.addAttribute("xxx", u);

}

@RequestMapping("/aaa")

public String s1(@ModelAttribute("xxx") Users t){

System.out.println(this.getClass()+"日志1..." + t);

System.out.println(this.getClass()+"日志2..." + t);

return "test2";

}

方法的参数为Model,ModelMap,ModeAndView,返回类型String时

保存一些数据,

md.addAttribute("kkk", "qxs钱学森");

mdMap.addAttribute("vvv", "ylp袁隆平");

mv.addObject("xxx", "djx邓稼先");

转发到页面上时

在页面上

math?formula=%7Bkkk%7D{vvv}可以拿到对应的值${xxx}不可以

重定向到页面上时

1.${kkk}

2.${vvv}

3.${xxx}

a.${param.kkk}

b.${param.vvv}

c.${param.xxx}

123为null,ab有值,c为null,null就是不显示

代码如下:

@RequestMapping("/aaa")

public String f1(Model md,ModelMap mdMap,ModelAndView mv){

System.out.println(this.getClass()+"日志...Model/ModelMap/ModelAndView 转发");

md.addAttribute("kkk", "qxs钱学森");

mdMap.addAttribute("vvv", "ylp袁隆平");

mv.addObject("xxx", "djx邓稼先");

return "test2";

}

@RequestMapping("/bbb")

public String f2(Model md,ModelMap mdMap,ModelAndView mv){

System.out.println(this.getClass()+"日志...Model/ModelMap/ModelAndView 重定向");

md.addAttribute("kkk", "qxs钱学森");

mdMap.addAttribute("vvv", "ylp袁隆平");

mv.addObject("xxx", "djx邓稼先");

return "redirect:/test1.jsp";

}

方法的参数为Model,ModelMap,ModeAndView,返回类型ModelAndView时

存值,返回mv,

mv.setViewName("test2")转发方式

md.addAttribute("kkk", "qxs钱学森");

mdMap.addAttribute("vvv", "ylp袁隆平");

mv.addObject("xxx", "djx邓稼先");

mv.setViewName("test2");

return mv;

页面上

1.${kkk}

2.${vvv}

3.${xxx}

1,2,3都可以取到对应的值

重定向到

mv.setViewName("redirect:/test1.jsp");

md.addAttribute("kkk", "qxs钱学森");

mdMap.addAttribute("vvv", "ylp袁隆平");

mv.addObject("xxx", "djx邓稼先");

mv.setViewName("redirect:/test1.jsp");

return mv;

test1.jsp页面

1.${kkk}

2.${vvv}

3.${xxx}

a.${param.kkk}

b.${param.vvv}

c.${param.xxx}

1,2,3无值,abc有值

由此可见

保存时Model/ModelMap/ModelAndView集合中保存一份同时也会在request中也会自动保存一份

转发到下一个资源依然会从request.getAttibute中接收到

重定向时下一个资源需要从request.getParamter中接收

ModelAndView 需要设这方法的返回值也是ModelAndView 才可以访问 ModelAndView中的资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值