【04】SpringMVC笔记–响应类型
一、响应类型:
- String
说明:比如响应了一个字符串“success”。那么MVC框架就会根据配置的视图解析器寻找到对应的jsp文件,然后进行跳转。
这里跳转到了
WEB-INF/pages/
目录下的"success.jsp
"
springmvc.xml配置的视图解析器
<!-- 视图解析器对象 -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
Controller类
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 测试返回值为String类型
* @param model
* @return
*/
@RequestMapping("testReturnString")
public String testReturnString(Model model){
System.out.println("testReturnString()执行了...");
//模拟查询用户成功,并返回一个success字符串
User user = new User();
user.setAge(12);
user.setName("Yang99");
user.setPassword("99001");
//存到request域中,借用Model对象的方法
model.addAttribute("user",user);
return "success";
}
}
- void
无返回类型
- 会跳转到以该方法名为名的.jsp文件。例如 访问方法testVoid ===>默认响应跳转到testVoid.jsp
- 或使用原生Servlet api进行
- 转发
- 重定向
- 直接响应输出流
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 测试无返回值:void
* 默认:会跳转到以该方法名为名的.jsp文件。例如 访问方法testVoid ===>默认响应跳转到testVoid.jsp
* 其他:
* 手动:1. 转发
* 2. 重定向
* 3. 直接响应输出流
*/
@RequestMapping("testReturnVoid")
public void testReturnVoid(HttpServletRequest request, HttpServletResponse response) throws Exception{
System.out.println("testReturnVoid()执行了...");
//转发
//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
//重定向 ---不可访问WEB-INF目录
response.sendRedirect(request.getContextPath()+"/index.jsp");
//输出流
//response.getWriter().write("helloWorld!!!");
}
}
- ModelAndView
ModelAndView对象。是SpringMVC提供的一个对象。里面可以封装需要返回的对象与视图名称
- addObject()方法,底层是存到了request域中
- setViewName(),设置跳转视图名称(上面直接返回字符串进行跳转的,底层就是在使用这个方法
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 测试返回ModelAndView
* @return
*/
@RequestMapping("testModelAndView")
public ModelAndView testModelAndView(){
System.out.println("testModelAndView()执行了...");
//创建ModelAndView对象
ModelAndView mv = new ModelAndView();
//模拟查询用户成功,并返回一个success字符串
User user = new User();
user.setAge(121);
user.setName("Yang222");
user.setPassword("111101");
//存到request域中,使用ModelAndView的方法
mv.addObject("user",user);
//设置跳转页面
mv.setViewName("success");
//注:手动返回"success",底层也是使用ModelAndView对象 ,也是使用视图解析器
return mv;
}
}
二、转发与重定向
SpringMVC提供的方式:根据返回的字符串关键字进行转发,或重定向
- 转发:"
forward:
"+跳转页面路径 - 重定向:"
redirect:
"+跳转页面路径
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("testForwardOrRedirect")
public String testForwardOrRedirect(Model model){
System.out.println("testForwardOrRedirect()执行了...");
//转发
//return "forward:/WEB-INF/pages/success.jsp";
//重定向
return "redirect:/index.jsp";
}
}
}
三、接收与响应json数据
- 前端表单异步提交一个json数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="js/jquery.min.js" type="text/javascript"></script>
<script>
$(function () {
//异步提交表单
$("#login_form").submit(function () {
//....
//把表单数据转为json
var formObject = {};
var formArray =$(this).serializeArray();
$.each(formArray,function(i,item){
formObject[item.name] = item.value;
});
$.ajax({
url: '${pageContext.request.contextPath}/fore/userLogin',
type: 'POST',
contentType: 'application/json; charset=UTF-8',
async: false,
dataType: 'json',
data: JSON.stringify(formObject),
success: function (info) {
if (!info.flag) {
$("#check_error").html(info.info);
} else {
// alert("登录成功");
location.href = "${pageContext.request.contextPath}/fore/home";
}
}
});
return false;
});
});
</script>
</head>
<body>
<form action="#" method="post" id="login_form">
<!-- 表单字段...-->
</form>
</body>
</html>
- 如果提交的键值对的键和某个JavaBean的属性名相同。可以在控制器方法参数提供该Bean对象接收json数据
- 如果需要返回的数据也是json,需要在添加相关jar包。(使用的maven工程,所以添加如下依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
- Controller
/**
* 模拟异步请求响应
* 接受的Json数据会被直接封装到User对象中,由于我们引入了json的jar包。
* mvc框架会自动将对象转换为json返回。
* 我们只需返回User对象即可。
*/
@RequestMapping("/testAjax")
public @ResponseBody
User testAjax(@RequestBody User user){
System.out.println("testAjax方法执行了...");
// 客户端发送ajax的请求,传的是json字符串,后端把json字符串封装到user对象中
System.out.println(user);
// 做响应,模拟查询数据库
user.setName("Yangx");
user.setAge(21);
// 做响应,spirngMVC框架会自动将其转换为json数据,然后返回给浏览器
return user;
}
转载:https://blog.csdn.net/qq_42701294/article/details/104790031
查看评论