[Spring-MVC] 5 前后台交互

一、简单的页面跳转

@RequestMapping("toSpringMVCDemo")
public String toSpringMVCDemo() {
	return "demo/springMVCDemo";
}

实际上该方法不需要任何参数,例如

HttpServletRequest HttpServletResponse ,不要拷贝一些没有用的代码。


二、带数据返回的页面跳转

使用ModelAndView,方法参数内加入ModelAndView
modelAndView.addObject可加入任意返回前台的数据
modelAndView.setViewName 设置跳转的界面


/**
* 带数据返回的页面跳转
*/
@RequestMapping(value = "toSpringMVCDemoWithReturn", method = RequestMethod.POST)
public ModelAndView toSpringMVCDemoWithReturn(ModelAndView modelAndView) {
	modelAndView.addObject("name", "姓名");
	modelAndView.addObject("sex", "性别");
	modelAndView.addObject("message", "返回界面的任意信息");
	modelAndView.setViewName("demo/springMVCDemoWithReturn");
	return modelAndView;
}

同样的,该方法也不需要HttpServletRequest,HttpServletResponse

实际上,基于spring-mvc的优秀封装,我们可以在绝大多数情况下摆脱原始的HttpServletRequest和HttpServletResponse

使用spring-mvc为我们封装好的方式,更优雅的完成功能


三、JSON请求

3.1 前台

一般使用$.post实现,而不使用$.ajax除非有特殊的要求

引用于w3school

ajax() 方法通过 HTTP 请求加载远程数据。
该方法是 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。
function springMVCReturnJSON() {
// 一般使用简单易用的高层实现 $.get, $.post等
// 大多数情况下你无需直接操作$.ajax函数,除非你需要操作不常用的选项,以获得更多的灵活性
    $.post("springMVCReturnJSON", {
        "param1" : "param1的值",
        "param2" : "param2的值"
    }, function(data, status) {
	console.log(data);
	console.log(status);
    });
}

此处function成功函数中不再需要对status和data中的success进行判断,只需要写正常的逻辑即可
具体参考“[Spring-MVC] 3 异常统一处理


3.2后台

/**
 * 使用POST请求JSON数据展示
 */
@RequestMapping("springMVCReturnJSON")
@ResponseBody
public Map springMVCReturnJSON(@RequestParam("param1") String param1,
		@RequestParam("param2") String param2) throws IOException, SchedulerException {
	Map result = new HashMap();
	result.put("success", true);
	List list = new ArrayList();// 模拟列表返回
	list.add("a");
	list.add("b");
	list.add("c");
	result.put("total", list.size());
	result.put("rows", list);
	return result;
}

只需要加上@ResponseBody即可
可参考“[Spring-MVC] 1 JSON格式问题”


四、前台向后台传递参数的几种方法

4.1、使用@RequestParam向后台传递参数

/**
 * 使用@RequestParam向后台传递参数
 */
@RequestMapping("springMVCRequestParam1")
@ResponseBody
public Map springMVCRequestParam1(@RequestParam("param1") String param1,
		@RequestParam(value = "param2", required = false) String param2) {
	logger.info(param1);
	logger.info(param2);
	Map result = new HashMap();
	result.put("success", true);
	return result;
}

适用于参数不多的情况,使用此方法注意如果前台传递的参数param1为空值,会报错
如果期望参数可选,则需要使用 required = false,例如:

@RequestParam(value = "param2", required = false) String param2

4.2、使用@ModelAttribute 以对象的方式向后台传递参数

/**
 * 使用@ModelAttribute 以对象的方式向后台传递参数
 */
@RequestMapping("springMVCRequestParam2")
@ResponseBody
public Map springMVCRequestParam2(@ModelAttribute RequestParamDemo requestParamDemo) {
	logger.info(requestParamDemo.getParam1());
	logger.info(requestParamDemo.getParam2());
	Map result = new HashMap();
	result.put("success", true);
	return result;
}

需要为其新建一个类,适用于参数较多的情况


4.3、直接使用HttpServletRequest向后台传递参数

/**
 * 直接使用HttpServletRequest向后台传递参数
 */
@RequestMapping("springMVCRequestParam3")
@ResponseBody
public Map springMVCRequestParam3(HttpServletRequest request, HttpServletResponse response) {
	String param1 = request.getParameter("param1");
	String param2 = request.getParameter("param2");
	logger.info(param1);
	logger.info(param2);
	Map result = new HashMap();
	result.put("success", true);
	return result;
}
直接使用HttpServletRequest,一般情况不建议使用,增加不必要的代码,显得方法内部逻辑更加杂乱


你可能感兴趣的:(Spring-MVC)