标签: springmvc
本文对springmvc系列博文进行小结
DispatcherServlet
前端控制器:接收request,进行responseHandlerMapping
处理器映射器:根据url查找Handler。(可以通过xml配置方式,注解方式)HandlerAdapter
处理器适配器:根据特定规则去执行Handler,编写Handler时需要按照HandlerAdapter的要求去编写。Handler
处理器(后端控制器):需要程序员去编写,常用注解开发方式。 ModelAndView
,具体开发时Handler
返回方法值类型包括:ModelAndView
、String
(逻辑视图名)、void
(通过在Handler形参中添加request和response,类似原始 servlet开发方式,注意:可以通过指定response响应的结果类型实现json数据输出)View Resolver
视图解析器:根据逻辑视图名生成真正的视图(在springmvc中使用View对象表示)View
视图:jsp页面,仅是数据展示,没有业务逻辑。<!--注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
在实际开发,使用<mvc:annotation-driven>
代替上边处理器映射器和适配器配置。
@controller
注解必须要加,作用标识类是一个Handler处理器。@requestMapping
注解必须要加,作用: 映射成功后,springmvc框架生成一个Handler对象,对象中只包括 一个映射成功的method。
将request请求过来的key/value的数据(理解一个串),通过转换(参数绑定的一部分),将key/value串转成形参,将转换后的结果传给形参(整个参数绑定过程)。
springmvc所支持参数绑定:
HttpServletRequest
、response
、session
、model/modelMap
(将模型数据填充到request域)@RequestParam
(指定request请求的参数名),@RequestParam
加在形参的前边。HttpServletRequest request
参数,通过request接收查询条件参数。get/set
方法,action使用包装对象接收注意:形参中即有pojo类型又有简单类型,参数绑定互不影响。
自定义参数绑定
定义的Converter<源类型,目标类型>
接口实现类,比如:Converter<String,Date>
,表示:将请求的日期数据串转成java中的日期类型。
注意:要转换的目标类型一定和接收的pojo中的属性类型一致。
将定义的Converter实现类注入到处理器适配器中。
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- conversionService -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 转换器 -->
<property name="converters">
<list>
<bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>
</list>
</property>
</bean>
springmvc面向方法开发的(更接近service接口的开发方式),struts2面向类开发。
springmvc可以单例开发,struts2只能是多例开发。
服务端校验:
一般使用hibernate的校验框架,依赖hibernate-validator.jar
,jboss-logging.jar
,validation-api.jar
这几个jar包
开发步骤
@Validated
来捕获和显示校验错误信息分组校验
数据回显有三种方法
@ModelAttribute
指定pojo回显到页面在request中的key@ModelAttribute
还可以将方法的返回值传到页面@ModelAttribute
系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。
springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。
全局异常处理器处理思路:
解析出异常类型
抛出异常的位置
开发步骤
commons-fileupload
两种json数据交互的形式:
需要的依赖:
jackson-databind
jackson-mapper-asl
在注解适配器中加入messageConverters
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</list>
</property>
</bean>
注意:如果使用<mvc:annotation-driven />
则不用定义上边的内容。
在controller的返回值上加注解@ResponseBody
来将java对象输出json,返回json格式数据
@RequestMapping(value="/ itemsView/{id}")
:{×××}
占位符,请求的URL可以是/viewItems/1
或/viewItems/2
,通过在方法中使用@PathVariable
获取{×××}中的×××变量。@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上。
如果@RequestMapping
中表示为/itemsView/{id}
,id和形参名称一致,@PathVariable
不用指定名称。
同时需要配置前端控制器。若要访问静态资源,还需在springmvc.xml中添加静态资源解析方法,如<mvc:resources location="/js/" mapping="/js/**"/>
定义拦截器,实现HandlerInterceptor
接口。接口中提供三个方法。可以从名称和参数看出各个接口的顺序和作用
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
链式执行测试
应用