在RequestMapping中:
可以使用params和headers来更精确的映射请求,其支持简单的表达式
Ant风格资源地址支持3种匹配符 ?匹配一个字符 *匹配任意字符 **匹配多层路径
@PathVariable可以来映射URL中的占位符到目标方法德参数中
REST风格的URL,CRUD为例, 新增 /order POST、修改/order/1 PUT、获取 /order/1 GET、删除/order/1 DELETE
发送PUT和DELETE请求:配置HiddenHttpMethodFilter,需要在发送POST请求时携带一个name="_method"的隐藏域
值为DELETE或PUT
可以使用@RequestParam来映射参数,value值即为请求参数德参数名,required设置该参数是否必须,default设置默认值
@RequestHeader可以映射请求头,其用法同@RequestParam
@CookieValue用来映射一个Cookie值用法同@RequestParam
SpringMVC会按参数名和POJO属性名进行自动匹配,自动为该对象填充属性值,且支持级联属性
可以使用Servlet原生的API作为目标方法的参数具体支持类型:HttpServletRequest,HttpServletResponse,HttpSession
,java.security.Principal,Locale InputStream,OutputStream,Reader,Writer
请求参数类型可以是ModelAndView,Map
@SessionAttributes除了可以通过属性名指定需要放在会话中的属性外(实际上使用的是value属性值),还可以通过模型属性的对象类型
指定哪些模型属性需要放到会话中(实际上使用的是types属性值),该注解只能放在类上面,不能修饰方法
@ModelAttribute标记的方法会在每个目标方法执行之前被SpringMVC调用
@ModelAttribute注解也可以修饰目标方法POJO类型的入参,其value值有如下作用:
1、SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则会直接传入到目标方法的入参中
2、SpringMVC会以value为key,POJO类型的对象value,存入到request中
返回的字符串带有forward: 或redirect: 前缀时,SpringMVC会对其进行特殊处理将forward: 或redirect: 当成指示符,
将其后面的字符串当成URL来处理
在@ExceptionHandler方法的入参中可以加入Exception类型的参数,该参数即对应发生的异常对象
@ExceptionHandler方法的入参中不能传入Map,若希望将异常信息传导到页面上,需要使用ModelAndView作为返回值
@ExceptionHandler方法标记的异常有优先级的问题
@ControllerAdvice,如果在当前Handler中找不到@ExceptionHandler标记的方法来处理当前方法出现的异常,则将去@ControllerAdvice标记
的类中查找@ExceptionHandler标记的方法来处理异常
SpringMVC对比Structs2
1、SpringMVC入口是Servlet,而Structs2是Filter
2、SpringMVC会稍微比Structs2快些,SpringMVC是基于方法设计的,Structs2是基于类的,每次请求都会实例一个Action
3、SpringMVC更加简洁,开发效率较于Structs2高,支持JSR303,处理ajax请求更方便
4、Structs2的OGNL表达式使页面的开发效率相比于SpringMVC更高些