Spring MVC原理

Spring MVC

是Spring Framework提供的web组件核心组件:   
DispatcherServlet    Handler    HandlerMapping    
HandlerInterceptor    HandlerExecutionChain    
HandlerAdapter    ModelAndView    

ViewResolver工作流程:
    1. 客户端请求被DispatcherServlet接收
    2. 根据HandlerMapping映射到Handler
    3. 生成Handler和HandlerInterceptor
    4. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
    5. DispatcherServlet通过HandlerAdapter调用Hanlder的方法完成业务逻辑处理
    6. 返回一个ModelAndView对象给DispatcherServlet
    7. DispatcherServlet将获取的ModelAndView对象传给ViewResolver视图解析器,将逻辑视图解析成物理视图
    8. ViewResolver返回一个View给DispatcherServlet
    9. DispatcherServlet根据View进行视图渲染
    10. DispatcherServlet将渲染之后的视图响应给客户端

使用步骤:
    1. 在pom.xml配置spring-webmvc的依赖
    2. 在web.xml中配置Spring MVC的DispatcherServlet
    3. speingmvc.xml中配置自动扫描、视图解析器(前缀、后缀)
    4. 创建Handler

流程梳理:
    1. DispatcherServlet就收到URL请求index,结合@RequestMapping("/index")注解将该请求交给index业务方法进行处理
    2. 执行index业务方法,控制台打印日志,并且返回“index”字符串(逻辑视图)
    3. 结合springmvc.xml中的视图解析器配置,找到目标资源:/index.jsp,即根目录下的index.jsp文件,将该jsp资源返回给客户端完成响应

Spring MVC常用注解
    1. @RequestMapping:将URL请求与业务方法进行映射,在控制器的类定义处和方法定义处都可以以添加@RequestMapping,在类定义处添加相当于多了一层访问路径

@RequestMapping常用参数:    value:指定URL请求的实际地址,是@RequestMapping的默认值    method:指定请求的method类型,包括GET,POST,DELETE,PUT等    params:指定request请求中必须包含的参数值,若不包含,无法调用该方法参数绑定:    params是对URL请求参数进行限制,不满足条件的URL无法访问该方法,需要在业务方法中获取URL的参数值。
    1. 在业务方法定义时声明参数列表
    2. 给参数列表添加@RequestParam注解进行绑定

Spring MVC也支持RESTful风格的URL参数获取传统URL : http://localhost:8080/springmvc_war/hello/restful?id=1&name=tomRESTful URL: http://localhost:8080/springmvc_war/hello/restful/1/tom将参数列表的注释该位@PathVariable("id")即可映射Cookie: @CookieValue("JESSIONID")使用POJO绑定参数Spring MVC会根据请求参数名和POJO属性名进行匹配,自动为该对象填充属性值,并且支持属性级联(属性名要一致)级联:在jsp文件中的name设置为address.id这样的形式主体对象可以没有无参构造函数,但是级联对象必须有无参构造函数。如果出现中文乱码,可以通过配置过滤器来解决,在web.xml中配置即可(encodingFilter)。JSP页面的转发和重定向Spring MVC默认以转发的形式响应JSP,可以手动进行修改。重定向的时候不能写逻辑视图,必须写明资源的物理路径,比如“redirect:/index.jsp”或“forward:/index.jsp”Spring MVC数据绑定:在后台业务方法中,直接获取前端HTTP请求中的参数@RequestMapping注解可以添加参数,进行设置:    value=“id”:将HTTP请求中名为id的参数与Handler业务方法中的形参进行映射    required:true表示id参数是必填的,false表示非必填    defaultValue=“0”,表示默认值解决响应时乱码问题,在

springmvc.xml中配置转换器:

<mvc:annotation-driven>    <!-- 消息转换器 -->   

<mvc:message-converters>       

        <bean class="org.springframework.http.converter.StringHttpMessageConverter">                    <property name="supportedMediaTypes" value="text/html;charset=UTF-8"></property>                </bean>   

</mvc:message-converters>

</mvc:annotation-driven>

Spring MVC不支持LIst类型的直接转换,需要包装成Object,List集合的基本类 要有无参构造函数。

JSON数据:JSON数据可以使用JSON.stringify()方法转换成字符串contentType:"application/json;charset5=UTF-8"不能省略业务方法:@RequestBody注解:将JSON数据转为java bean,使用Fastjson@ResponseBody注解Spring MVC视图层解析业务数据的搬到是指将业务数据绑定给JSP域对象,业务数据的绑定是由ViewResolver来完成的。

MapModelModelAndView@SessionAttribute@ModelAttribute :当Handler接收到一个客户端请求后,Servlet APIHttpServletRequest@ModelAttribute :当Handler接收到一个客户端请求后,无论调用哪个业务方法,都会优先调用被@ModelAttribute注解修改的方法,并将其返回值作为业务数据,在进入到业务方法,此时业务方法只需要返回视图信息即可,不需要返回业务数据,及时返回业务数据,也会被@ModelAttribute注释修饰的方法返回的数据所覆盖。直接给Model对象进行装载的方法优先级更高。业务数据绑定到session,从sessionScope取数@SessionAttribute :给类添加只要给类添加了@SessionAttribute注解之后,无论类中的哪个业务方法被访问,将业务数据绑定到request域对象的同时,也会将业务数据帮到session域对象中,前提是request域中的key值需要与@SessionAttribute注解中的value值一致。@SessionAttribute可以通过key值绑定,也可以通过业务数据的数据类型进行绑定。@SessionAttribute可以同时绑定多个数据Spring MVC自定义数据类型转换器
    1. 创建DateConverter类,并实现org.springframework.core.convert.converter.Converter接口,需要指定泛型Converter<String,Date>
    2. 在springmvc.xml中配置conversionService bean,这个bean是org.springframework.context.support.ConversionServiceFactoryBean的实例化对象,同时bean中必须包含一个converters属性,在其中注册所有需要自定义的转换器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值