方法返回值类型
- Servlet与SpringMVC将结果返回浏览器的不同之处
- 处理器的返回值-ModelAndView
- 处理器的返回值-void(一般不用,没有体现springmvc的优势)
- 处理器的返回值-String
- 处理器的返回值-String-转发和重定向
- forward指令 请求转发
- redirect 重定向
- 处理器的返回值-Object-json数据处理
- javaBean对像与json互转 如阿里巴巴的fastjson
- JavaBean转json
- JSON转JavaBean
- 返回值Object转Json
- pom.xml
- 收到的参数Json转JavaBean对象
Servlet与SpringMVC将结果返回浏览器的不同之处
1)Servlet将结果返回浏览器
转发:带数据
重定向:不带数据
异步:json数据发给页面的js,js组织标签显示
Servlet里面编写响应浏览器的代码都要调用response
2)springmvc的方法设计了多种返回值类型
》ModelAndView
》void
》String :请求转发,重定向,json数据
处理器的返回值-ModelAndView
list是文件名也就是逻辑视图
/jsp/list.jsp是物理视图,
物理视图=前缀+逻辑视图+后缀
@Controller
public class PersonController {
@RequestMapping("list.action")
public ModelAndView listPersons(HttpRequest request){
//获取集合
List<Person> list=Personutil.findAll();
//转发到页面
/* 请求转发
request.setAttribute("list",list);
request.getDispatcher("list.jsp").forward(req,resp);
但是没有必要可以使用下面的进行请求转发
*/
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("list",list);
/* <!--定义页面路径的前缀-->
<property name="prefix" value="/jsp/"/>
<!--定义页面路径的后缀-->
<property name="suffix" value=".jsp"/>
简化后只要写文件名称
*/
modelAndView.setViewName("list"); //list是文件名也就是逻辑视图
// /jsp/list.jsp 物理视图=前缀+逻辑视图+后缀
return modelAndView;
//在页面上进行forEach循环
}
处理器的返回值-void(一般不用,没有体现springmvc的优势)
@RequestMapping(path="demo02.action",method = {RequestMethod.GET,RequestMethod.POST})
public void test02(HttpServletRequest req, HttpServletResponse resp)throws Exception{
//请求转发
req.setAttribute("name","请求转发");
req.getRequestDispatcher("demo05.jsp").forward(req,resp);
}
处理器的返回值-String
方法返回值类型写上String类型方法内就会返回页面名称
其中Model类为SpringMVC自动创建的模型类,不用我们创建
Model可以用来向页面传递参数
Model与ModelAndView相比少了View视图,但是String
类型在方法中返回了页面名称也就是View
@RequestMapping("success.action")
public String test(Model model){
model.addAttribute("data","String类型");
return "main";
}
处理器的返回值-String-转发和重定向
返回值可以添加指令,但是添加指令之后不能使用视图解析器对指令后的内容拼接前缀与后缀
forward指令 请求转发
forward 指令:物理视图(必须自己加上)
@RequestMapping(path="demo04.action",method = {RequestMethod.GET,RequestMethod.POST})
public String test04(Model model){
//Model 可以设置数据,自动由视图解析器带到页面
model.addAttribute("data","wHelloWord");
return "forward:/WEB-INF/jsp/success.jsp";
//必须自己加上物理视图
}
redirect 重定向
redirect 指令:项目访问路径+物理视图(必须自己加上)
@RequestMapping(path="demo04.action",method = {RequestMethod.GET,RequestMethod.POST})
public String test04(Model model){
//Model 可以设置数据,自动由视图解析器带到页面
model.addAttribute("data","wHelloWord");
//return "redirect:http://www.baidu.com"; //外网
//return "redirect:demo05.jsp"; //
return "redirect:demo01.action"; //
}
处理器的返回值-Object-json数据处理
javaBean对像与json互转 如阿里巴巴的fastjson
Json一般在ajax请求中使用
pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.74</version>
</dependency>
JavaBean转json
TestPersonJson
public class TestPersonJson {
@Test
public void test(){
Person person=new Person(1,"jack","12345","bj");
String json= JSON.toJSONString(person);
System.out.println(json);
}
}
运行结果
JSON转JavaBean
JSON.parseObject()方法
JSON.parseObject(json,Person.class);
// json转javaBean,参1,json 参2 类
@Test
public void test02(){
String json = "{\"id\":1,\"password\":\"1234\",\"name\":\"jack\",\"city\":\"bj\"}";
Person p = JSON.parseObject(json,Person.class);// json转javaBean,参1,json 参2 类
System.out.println(p);
}
运行结果
返回值Object转Json
pom.xml
依赖 jackson库
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.3</version>
</dependency>
@ResponseBody注解加在方法上,SpringMVC可以自动将方法的返回对象转为json,并且发送给页面
@RequestMapping("list.action")
public @ResponseBody Object personJson(){
//获取集合
List<Person> list=Personutil.findAll();
return list;
}
收到的参数Json转JavaBean对象
@RequestBody注解加在方法上,SpringMVC可以自动将页面传来的Json转为JavaBean对象
@RequestMapping(path = "update.action",method = {RequestMethod.POST,RequestMethod.GET})
public ModelAndView test06(@RequestBody Person person){
System.out.println("object:"+person);
return null;
}