请求数据传入
- 默认获取参数的规则:
直接给方法参数上写一个与请求参数名相同的变量, 这个变量就能获取到请求的参数
- @RequestParam:
获取请求参数: 默认该注解标注的参数,必须存在
@RequestParam(“ha”)String param ===> param = request.getParameter(“ha”);
三个属性:
value = name : 请求参数名
required default true: 指定该参数是否必须存在
defaultValue : 设置默认值 - @RequestHeader:
获取请求头中某个key的值:默认该注解标注的参数,必须存在
@RequestHeader(“User-Agent”)String ss ===> String ss = request.getHeader(“User-Agent”);
三个属性:
value = name : 请求参数名
required default true: 指定该参数是否必须存在
defaultValue : 设置默认值 - @CookieValue:
获取某个cookie的值
public String test (@CookieValue(“sessionId”)String sessionId) { … - POJO自动装配:
使用 POJO 对象绑定请求参数值
Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性 - 使用Servlet原生API作为参数:
支持的参数类型:
HttpServletRequest
HttpServletResponse
HttpSession
java.security.Principal
Locale 国际化相关的区域信息对象
字节流:
InputStream
OutputStream
字符流:
Reader
Writer
直接在目标方法参数中声明, SpringMVC会自动赋值:
@RequestMapping("/testServletAPI")
public void testServletAPI(HttpServletRequest request,HttpServletResponse response, Writer out) throws IOException {…
响应数据传出
- 可以在方法处传入Map, 或者Model或者ModelMap对象,(具体实现都是 BindingAwareModelMap)
Spring MVC 在内部使用了一个 org.springframework.ui.Model 接口存储模型数据
Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传递给这些入参。
给这些参数里面保存的数据都会放在域中,可以在页面获取
数据都会放在请求域中 - ModelAndView
① 控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。数据放在请求域中
② 添加模型数据:
MoelAndView addObject(String attributeName, Object attributeValue)
ModelAndView addAllObject(Map<String, ?> modelMap)
③ 设置视图, 即要显示的模型显示视图:
void setView(View view)
void setViewName(String viewName)
new ModelAndView(viewName ); - @SessionAttributes:
SpringMVC提供的一种可以临时给Session域中保存数据的方法
@SessionAttributes(value = “msg”), 在代码中给BindingAwareModelMap, ModelAndView中保存的数据(名为"msg"), 同时给session放一份.
① @SessionAttributes(types=User.class) 根据类型, 将隐含模型中所有类型为 User.class 的属性添加到session中.
@ModelAttribute
-
@ModelAttribute: 作用于方法入参
使用@ModelAttribute指定pojo回显到页面在request中的key, 即保存在modelAndView中的key, value为标注的对象. 若model中已经存在了一个同key的值, 会先将这个值赋值给参数对象. -
在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了 @ModelAttribute 的方法, 并将方法作为Mode的属性,然后再调用对应的Controller处理方法。
标注了value值: 参数名为value, 值为方法的返回值
未标注value值, 方法有返回值类型: 参数名为返回值类的首字母小写, 值为返回值
未标注value值的void的方法: 参数名为void, 值为: null
字符编码处理
web.xml中配置CharacterEncodingFilter过滤器:
<!-- 字符编码 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<!-- forceEncoding: 包括request与response对象 -->
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>