1.mvc要做哪些事:
先说下Servlet 做哪些事情:
处理用户提交的数据;
调用业务方法;
处理业务结果;
控制视图显示;
a)将url映射到java类或java 类方法
b)封装用户提交的数据
c)处理请求-调用相关的业务处理-封装相应的数据
d)将响应的数据进行渲染,Jsp,html,freemarker等
2.spring mv是一个轻量级的,基于请求响应的mvc框架。
3.为啥要学习spring mvc 呢?
性能较struts2好。
简单,便捷,易学。
天生和spring无缝集成(使用spring ioc ,aop)使用约定优于配置
能够进行简单junit测试
支持Restful风格
异常处理
本地化,国际化
数据验证,类型转换等
拦截器等
--------------------------------使用的人多,使用的公司多
简单结构图:
4.跳转结果的方式
4.1、设置ModelAndView对象。根据View的名称和视图解析器跳转到指定页面。
页面:视图解析器的前缀+view name +视图解析器的后缀
4.2、通过Servlet对象来实现。不需要视图解析器的配置
通过HttpServletResponse来进行输出
通过HttpServletResponse实现重定向
通过HttpServletRequest实现转发
4.3、通过springmvc来实现转发和重定向——没有视图解析器
转发的实现
转发1:
转发2:
重定向
4.4、通过spring mvc 来实现转发和重定向——有视图解析器
转发方式
注意:重定向"redirect:index.jsp"不需要视图解析器
5.数据的处理。
5.1.提交数据的处理:
a.提交的域名称和处理方法的参数一致即可。
处理方法:
b.如果域名称和参数名不一致
c.如果提交的是一个对象
要求提交的表单域名和对象的属性名一致,参数名使用对象即可
处理方法
实体类
5.2、将数据显示到UI层
第一种通过Model And View ——需要视图解析器
第二种通过ModelMap来实现——不需要视图解析器
ModelMap需要作为处理方法的参数
ModelAndView 和ModelMap的区别
相同点:都可以将数据封装显示到表示层页面中
不同点:ModelAndView可以指定跳转的视图,而ModelMap不能;ModelAndView需要视图解析器,ModelMap不需要配置
6.乱码及Restful
a)spring mvc 中提供了CharacterEncodingFilter解决Post乱码
<display-name>Spring 编码过滤</display-name>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
同一个Controller通过参数来达到不同的处理方法不重要
Spring Mvc使用框架实现的组件(不需要开发):
DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。----------------------接收请求,响应结果,相当于电脑的CPU
作用:接收请求,响应结果,相当于转发器,中央处理器。有了dispatcherServlet减少了其它组件之间的耦合度。
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。----------------------根据URL去查找处理器
作用:根据请求的url查找Handler
HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器。-----------------会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。----------------------进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户。
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)
springMVC和spring之间的关系:
springMVC是spring的一个后续产品,其实就是spring在原有基础上,又提供了web应用的MVC模块,可以把springMVC理解为是spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说springMVC和spring无缝集成,其实springMVC就是spring的一个子模块,所以根本不需要同spring进行整合。