SpringMVC中的视图以及视图解析器
使用 @RequestMapping 映射请求示例
通过DispatcherServlet截获请求,来确定所要映射的方法
在@RequestMapping 映射处理中由映射请求参数,请求方法,请求头
注意:这里的method参数 会有专门来讲这一点的。
@PathVariable 映射URL绑定的占位符:是容过URL中的{xxx}占位符和@PathVariable绑定到方法的参数中
REST风格的互联网的软件架构
这里有一个很重要的类是HiddenHttpMethodFilter 来进行判断method的具体方法是什么
<!-- 配置Filter rest风格的url -->
<!--
配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求
-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
/**在测试方法中
* Rest 风格的 URL. 以 CRUD 为例: 新增: /order POST 修改: /order/1 PUT update?id=1 获取:
* /order/1 GET get?id=1 删除: /order/1 DELETE delete?id=1
*
* 如何发送 PUT 请求和 DELETE 请求呢 ? 1. 需要配置 HiddenHttpMethodFilter 2. 需要发送 POST 请求 3.
* 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT
*
* 在 SpringMVC 的目标方法中如何得到 id 呢? 使用 @PathVariable 注解
*
*/
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.POST)
public String TestPost(@PathVariable Integer id) {
System.out.println("TestPost" + id);
return SUCCESS;
}
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE)
public String TestDelete(@PathVariable Integer id) {
System.out.println("TestDelete" + id);
return SUCCESS;
}
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT)
public String TestPut(@PathVariable Integer id) {
System.out.println("TestPut" + id);
return SUCCESS;
}
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.GET)
public String TestGet(@PathVariable Integer id) {
System.out.println("TestGet" + id);
return SUCCESS;
}
请求处理方法签名
自我认为:用的最多的是@RequestParam 和@RequestVariable
/*
* @RequestParam来映射请求参数,
* value 值请求参数的参数名 ,
* required 该参数是否必须,默认是true
* defaultValue请求参数的默认值
*
*/
@RequestMapping(value = "/testRequest")
public String TestRequest(@RequestParam(value = "name") String name,
@RequestParam(value = "age", required = false, defaultValue = "0") int age) {
System.out.println("RequestTest" + "name:" + name + ":age" + age);
return SUCCESS;
}
pojo代表的是古老的java代码 。
/**
* Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配, 自动为该对象填充属性值。支持级联属性。
* 如:dept.deptId、dept.address.tel 等
*/
@RequestMapping("/testPojo")
public String testPojo(User user) {
System.out.println(user);
return SUCCESS;
}
/**
* 可以使用 Serlvet 原生的 API 作为目标方法的参数 具体支持以下类型
*
* HttpServletRequest
* HttpServletResponse
* HttpSession
* java.security.Principal
* Locale InputStream
* OutputStream
* Reader
* Writer
* @throws IOException
*/
@RequestMapping("/testServletAPI")
public void testServletAPI(HttpServletRequest request,
HttpServletResponse response, Writer out) throws IOException {
System.out.println("testServletAPI, " + request + ", " + response);
out.write("hello springmvc");
// return SUCCESS;
}
数据处理模型
1.ModelAndView
2.Map
3.Model
4.@SessionAttributes
5.@ModelAttribute
ModelAndView
/**
* 目标方法的返回值可以是 ModelAndView 类型。
* 其中可以包含视图和模型信息
* SpringMVC 会把 ModelAndView 的 model 中数据放入到 request 域对象中.
* @return
*/
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView() {
String viewName=SUCCESS;
ModelAndView modeandview=new ModelAndView(viewName);
//添加模型数据到视图当中
modeandview.addObject("time", new Date());
return modeandview;
}
Map及Model
/**
* 目标方法可以添加 Map 类型(实际上也可以是 Model 类型或 ModelMap 类型)的参数.
* @param map
* @return
*/
@RequestMapping("/testMap")
public String testMap(Map<String,Object> map) {
System.out.println(map.getClass().getName());
map.put("names", Arrays.asList("liusir","liusir"));
return SUCCESS;
}