springMVC
@RequestMapping
除了可以修饰方法,还可以修饰类,修饰方法时是提供详细的映射信息,修饰类时相当于WEB-INF的根目录
1.修饰方法
2.修饰类
@RequestMapping请求方式
如果时通过超链接的方式则韦get方式,表单一般为post
@RequestMapping请求参数(params),请求头(headers)
@RequestMapping支持通配符
@PathVariable 映射URL 绑定占位符 ,通过URL绑定到控制器@Controller中,@PathVariable在springMVC走向REST风格有里程碑的意义
HiddenHttpMethodFilter过滤器(资源表现层转化)
rest风格的URL
GET 获取资源
POST 新建资源
DELETE 删除资源
PUT 更新资源
用@PathVariable 来获取资源
@RequestParam获取请求参数
@RequestHeaher获取请求头(用得不多),用法同@RequestParam,作用是映射请求头信息
@CookieValue:获取Cookie值(了解,用得不多);
使用POJO对象绑定请求参数
因为在开发中不可能用request.getParameter()一个一个得获取请求参数,那样的话 成本太高,所以springMVC会按照请求参数和POJO对象进行匹配,还支持级联属性,
使用Servlet原生API作为参数
开发中难免会用到Servlet原生API,如HttpServletRequest,HttpServletResponse等
处理模型数据之ModelAndView(no success)
ModelAndView可以包含视图和模型
springMVC会把ModelAndView 的model放到请求域中
处理模型数据之Map(no success)
处理模型数据之SessionAttributes注解(把模型放在session中)
当某个属性需要共用时,就使用SessionAttributes,该注解只能放在类上面,不能放在方法上
如图同时放在请求域和session域中
@ModelAttribute注解 ***(和struts2的一个拦截器差不多)
有@ModelAttribute标记的方法,会在每个目标方法调用前先调用@ModelAttribute标记的这个方法(每个方法调用前都会)
使用情景
当我们修改某个表的时候,如果其中有一个字段不能修改(入驻时间这类),我们首先想到的是从表单输入这些字段,然后创建对象和这些表单输入的字段匹配,因为对象是新创建的,所以匹配的时候如果表单输入的和对象的属性匹配,则赋值,如果表单没有与对象对应的值,则为空,显然,如果这样的话,不是我们想要的,进行修改的话表单没有的值则为空,所以引入了@ModelAttribute注解,这样的话,当我们在输入表单的时候,如果某些字段不能修改,则使用@ModelAttribute注解,从数据库中获取对象的值(通过id),为空的则赋从数据库查询的值给它,
如下
没有使用@ModelAttribute注解,password为空
使用@ModelAttribute注解
@ModelAttribute原理
/*
*
*/
@ModelAttribute运行流程
@SessionAttributes这里有一个坑,会发生500错误**********
原因:
/*
*
*/
SpringMVC_视图解析流程分析
/*
*
*/
自定义视图
重定向
annotation-driven配置
加了这个标签之后,会为我们注册三个bean,
分别是
RequestMappingHandlerMapping,
RequestMappingHandlerAdapter,
ExceptionHandler,
使得我们的@RequestMapping,@RequestParam,@ExceptionHandler,@DateTimeFormat等这些注解生效,在之前这些都得手动配置才行。
如果使用了<mvc:view-controller>标签,必须添加annotation-driven标签
<mvc:view-controller>
一般springmvc都是经过Controller,但是当我们不想经过Controller,而是直接访问视图的时候。就可以通过mvc:view-controller,使用<mvc:view-controller>时必须配置annotation-driven,不然会报404错误,
springMVC数据绑定流程分析
如:当我们从表单输入一个日期,这个日期从白哦但输入时是一个字符串,然而它所对应的实体类类型时date,所以在传输过程中要进行数据转换,流程为:
SpringMVC_自定义类型转换器
当我们需要将数据转换成另一种类型的时候,就用到数据转换,但是springMVC给我们封装了很多类型转化,所以这个方法了解了解就行,具体用到再看
SpringMVC_InitBinder注解
/""
"
""/
SpringMVC_数据的格式化
如日期的转化,float转化等,当从表单输入数据时,日期和浮点型是不能被正常转化的(会发生400错误),所以需要在对象的实体类属性上加注解