SpringMVC系列(三)
系列目录
SpringMVC技术细节(二)
一. SpringMVC中域的使用
-
request域
-
传统方式向request域中写入数据:直接通过request对象写入。
-
向model中写入数据,默认就是写入request域
-
-
session域
-
传统方式向session域中写入数据
-
通过model+@SessionAttributes将数据写入session
-
-
ServletContext域
-
只能通过传统方式
-
-
@ModelAttribute
-
使用在方法上
被修饰的方法将会在当前类的任意handler方法执行之前执行,该方法的返回值会自动存入model供后续使用。 -
使用在方法参数前
会从model中获取属性值复制到被修饰的方法参数上。
-
二. 实现返回一段数据
-
返回字符串数据
-
通过response返回
response.getWriter().write("abcde");
-
直接获取PrintWriter返回
@RequestMapping("/test.action") public void test(PrintWriter writer)throws Exception { writer.write("abcde"); }
-
通过ResponseBody返回
@ResponseBody @RequestMapping(value="/test.action",produces="text/html;charset=utf-8") public String test() { return "abcd中国"; }
-
-
返回json数据
-
手动拼接json
-
通过配置@ResponseBody利用内置的jackson将对象处理为json返回
@ResponseBody @RequestMapping(value="/test.action",produces="application/json;charset=utf-8") public User test() throws Exception { User user = new User(99,"张三",Arrays.asList("bj","sh","gz")); return user; }
-
三. 处理器方法支持的参数类型和返回值类型总结
-
支持的方法参数类型
- HttpServletRequest 代表当前请求的对象
- HttpServletResponse 代表当前响应的对象
- HttpSession 代表当前会话的对象
- WebRequest
SpringMVC提供的对象,相当于是request和session的合体,可以操作这两个域中的属性。 - InputStream OutputStream Reader Writer
代表request中获取的输入流和response中获取的输出流 - 通过@PathVariable @RequestParam声明的方法参数
@PathVariable可以将请求路径的指定部分获取赋值给指定方法参数。@RequestParam可以将指定请求参数赋值给指定方法参数。如果不写此注解,则默认会将同名的请求参数赋值给方法参数 - 通过@CookieValue和@RequestHeader声明的方法参数
@CookieValue可以将请求中的指定名称的cookie赋值给指定方法参数@RequestHeader可以将请求参数中的指定名称的头赋值给指定方法参数 - Model和ModelMap和java.util.Map
向Model ModelMap Map中存入属性,相当于向模型中存入数据 - Bean类
SpringMVC自动将请求参数封装到bean - MultipartFile
实现文件上传功能时,接收上传的文件对象 - Errors BindingResult
实现数据验证的参数
-
支持的返回值类型
- ModelAndView
可以返回一个ModelAndView对象,在其中封装Model和View信息 - View
可以直接返回一个代表视图的View对象 - 字符串
直接返回视图的名称 - void
如果返回值类型是void,则会自动返回和当前处理器路径名相同的视图名 - 方法被@ResponseBody修饰
当方法被@ResponseBody修饰时,默认将返回的对象转为json写入输出 - 以上之外,返回的任何内容都会被当做模型中的数据来处理,值为返回的数据,键为返回类型名首字母转小写,而返回的视图名等同于返回值为void的时的视图名。
- ModelAndView