springMVC学习笔记初识springmvc

Posted 拐柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springMVC学习笔记初识springmvc相关的知识,希望对你有一定的参考价值。

springMVC

spring MVC 是spring给我提供的一个用于简化web开发的框架。

MVC体系结构

经典三层(代码架构):
dao层、业务层、表现层(view+controller)。
MVC模式是说代码的组织方式:
M:model 模型(数据模型(pojo、vo、po、bean等)和业务模型(业务逻辑))
V:view 识图(jsp、html
C:controller 控制器(servlet)
spring MVC框架是一个应用于表现层的框架。
spring MVC本质可以认为是对servlet的封装,简化我们servlet的开发,便于我们接受请求,返回相应,跳转页面。

spring MVC开发流程

1、配置DispatcherSevlet 前段控制器
2、开发处理具体业务逻辑的handler(@controller、@RequestMapping)
3、xml配置文件配置controller扫描,配置springmvc三大件
4、将xml文件路径告诉springmvc(DispatcherSevlet )

springmvc请求流程

1、用户发送请求给DispatcherSevlet
2、请求查询通过处理器映射器查找执行的handler,并返回给DispatcherSevlet
3、通过处理器适配器去请求之情handler
4、处理器适配器执行handler并返回modelAndView给DispatcherSevlet
5、DispatcherSevlet通过视图解析器进行解析识图,并返回view给DispatcherSevlet
6、渲染视图

其中处理器映射器HandlerMapping、处理器适配器HandlerAdapter、视图解析器ViewResolver是springmvc的三大核心组件。

springmvc 九大组件

HandlerMapping

处理器映射器。其作用是用来查找handler的,也就是处理器,具体表现形式可以是类,也可以是方法。添加了@RequestMapping的每个方法都可以看成是一个handler。handler负责具体实际的请求处理,在请求到达后,HandlerMapping的作用便是找到请求相应的处理器handler和interceptor。

HandlerAdapter

HandlerAdapter 是⼀个适配器。因为 Spring MVC 中 Handler 可以是任意形式的,只要能处理请
求即可。但是把请求交给 Servlet 的时候,由于 Servlet 的⽅法结构都是
doService(HttpServletRequest req,HttpServletResponse resp)形式的,要让固定的 Servlet 处理
⽅法调⽤ Handler 来进⾏处理,便是 HandlerAdapter 的职责。

HandlerExceptionResolver

HandlerExceptionResolver ⽤于处理 Handler 产⽣的异常情况。它的作⽤是根据异常设置
ModelAndView,之后交给渲染⽅法进⾏渲染,渲染⽅法会将 ModelAndView 渲染成⻚⾯。

ViewResolver

ViewResolver即视图解析器,⽤于将String类型的视图名和Locale解析为View类型的视图,只有⼀
个resolveViewName()⽅法。从⽅法的定义可以看出,Controller层返回的String类型视图名
viewName 最终会在这⾥被解析成为View。View是⽤来渲染⻚⾯的,也就是说,它会将程序返回
的参数和数据填⼊模板中,⽣成html⽂件。ViewResolver 在这个过程主要完成两件事情:
ViewResolver 找到渲染所⽤的模板(第⼀件⼤事)和所⽤的技术(第⼆件⼤事,其实也就是找到
视图的类型,如JSP)并填⼊参数。默认情况下,Spring MVC会⾃动为我们配置⼀个
InternalResourceViewResolver,是针对 JSP 类型视图的。

RequestToViewNameTranslator

RequestToViewNameTranslator 组件的作⽤是从请求中获取 ViewName.因为 ViewResolver 根据
ViewName 查找 View,但有的 Handler 处理完成之后,没有设置 View,也没有设置 ViewName,
便要通过这个组件从请求中查找 ViewName。

LocaleResolver

ViewResolver 组件的 resolveViewName ⽅法需要两个参数,⼀个是视图名,⼀个是 Locale。
LocaleResolver ⽤于从请求中解析出 Locale,⽐如中国 Locale 是 zh-CN,⽤来表示⼀个区域。这
个组件也是 i18n 的基础。

ThemeResolver

ThemeResolver 组件是⽤来解析主题的。主题是样式、图⽚及它们所形成的显示效果的集合。
Spring MVC 中⼀套主题对应⼀个 properties⽂件,⾥⾯存放着与当前主题相关的所有资源,如图
⽚、CSS样式等。创建主题⾮常简单,只需准备好资源,然后新建⼀个“主题名.properties”并将资
源设置进去,放在classpath下,之后便可以在⻚⾯中使⽤了。SpringMVC中与主题相关的类有
ThemeResolver、ThemeSource和Theme。ThemeResolver负责从请求中解析出主题名,
ThemeSource根据主题名找到具体的主题,其抽象也就是Theme,可以通过Theme来获取主题和
具体的资源。

MultipartResolver

MultipartResolver ⽤于上传请求,通过将普通的请求包装成 MultipartHttpServletRequest 来实
现。MultipartHttpServletRequest 可以通过 getFile() ⽅法 直接获得⽂件。如果上传多个⽂件,还
可以调⽤ getFileMap()⽅法得到Map<FileName,File>这样的结构,MultipartResolver 的作⽤就
是封装普通的请求,使其拥有⽂件上传的功能。

FlashMapManager

FlashMap ⽤于重定向时的参数传递,⽐如在处理⽤户订单时候,为了避免重复提交,可以处理完
post请求之后重定向到⼀个get请求,这个get请求可以⽤来显示订单详情之类的信息。这样做虽然
可以规避⽤户重新提交订单的问题,但是在这个⻚⾯上要显示订单的信息,这些数据从哪⾥来获得
呢?因为重定向时么有传递参数这⼀功能的,如果不想把参数写进URL(不推荐),那么就可以通
过FlashMap来传递。只需要在重定向之前将要传递的数据写⼊请求(可以通过ServletRequestAttributes.getRequest()⽅法获得)的属性OUTPUT_FLASH_MAP_ATTRIBUTE
中,这样在重定向之后的Handler中Spring就会⾃动将其设置到Model中,在显示订单信息的⻚⾯
上就可以直接从Model中获取数据。FlashMapManager 就是⽤来管理 FalshMap 的。

spring url-pattnern

url-pattern的作用就是拦截匹配的url请求,进入springmvc框架处理 。
方式1:带后缀,比如xx.do,xx.action,该种方式比较精确,方便,以前和现在都有很大的使用比例
方式2:/ 不会拦截jsp,拦截restful风格,但是会拦截.html等静态资源(静态资源:出了servlet、jsp以外的js,css,png等),因为tomcat服务器中,还有一个web.xml,项目中也有一个web.xml,是继承关系。在父级web.xml中有一个defaultservlet,url-pattern是“/”,在项目中也配置了“/”,覆写了web.xml。父web.xml中有个jspServlet,这个servlet拦截 .jsp文件,而我们并没有覆写该servlet。所以是springmvc不拦截.jsp,把jsp交给了web容器tomcat。
可以通过配置文件配置解决对静态资源的拦截
1、

<!--静态资源配置,方案一
原理:添加该标签之后,会在springmvc上下文中定义一个defaultServletHttpRequestHandler对象,
            该对象对进入dispatchServlet的url进行请求过滤,如果发现是一个静态资源请求,那么会把请求转回web应用服务器(tomcat中的defaultServlet来处理)
            如果不是静态资源,那么继续交由springmvc框架处理。该方式存在弊端,只可以把静态资源放在webapp目录下面。
-->
    <mvc:default-servlet-handler/>

2、

<!--静态资源配置,方案二
    springmvc 自己处理静态资源
    mapping:静态资源约定url规则,location:指定静态资源存放位置
    -->
    <mvc:resources mapping="/resources/**" location="classpath:/"></mvc:resources>

方式3:/* 拦截所有,包括jsp

数据输出

springmvc在handler方法上传入Map、Model、ModelMap参数,并想这些参数中保存数据(放入到请求域中),都可以在页面获取到。运行都是的具体类型都是BindingAwareModelMap,相当于给BindingAwareModelMap保存的数据都会放入请求域中。
Map(jdk中接口)
Model(spring框架的一个接口)
ModelMap(是map接口的一个实现类)
BindingAwareModelMap(继承了ExtendModelMap,ExtendModelMap继承了ModelMap,实现了Model接口),真正运行时使用的是BindingAwareModelMap。

springmvc请求参数绑定

请求参数绑定:springmvc如何接受请求参数。浏览器向后台发送请求时使用的是http协议(超文本传输协议),这里传输的是一个文本。

原生servlet接受请求整型参数

1)request.getParameter(“xxx”);
2)Integer.parseInt(“xxx”);

springmvc接受请求整型参数

springmvc在接受整形参数的时候,直接在handler方法中声明形参即可。参数绑定:取出参数值,绑定到handler方法的形参上。

servlet对象支持,以及简单数据类型参数

1、如果要在springmvc中使用servlet原生对象,直接在handler方法形参中声明出来即可。
2、springmvc在接受简单类型参数的时候,直接在handler方法中声明形参即可。简单数据类型(八种基本数据类型,及其包装类型),传递参数名和声明形参名称保持一致。如果不一致,可以通过@RequestParam(“xxx”)来指定。
3、pojo类型接收,需要保持参数名称和pojo中属性名保持一致。
4、时间Date类型转换,自定义数据类型转换器进行转换。

public class DateConverter implements Converter<String, Date> {
    @Override
    public Date convert(String s) {
        return null;
    }
}

xml中定义

<!--自动注册最合适的处理器映射器,处理器适配器-->
    <mvc:annotation-driven conversion-service="conversionService2" />

    <!--注册自定义类型转换器-->
    <bean id="conversionService2" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters" >
            <set>
                <bean class="com.lagou.edu.convert.DateConverter"></bean>
            </set>
        </property>
    </bean>

以上是关于springMVC学习笔记初识springmvc的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC学习笔记-01初识

SpringMVC学习笔记6:Ajax初识

初识SpringMVC

SpringMVC学习系列 之 初识SpringMVC

springmvc学习笔记(14)-springmvc校验

springmvc学习笔记-springmvc整合mybatis之controller