SpringMVC使用入门

本来打算过段时间再来总结一下SpringMVC的用法,然而感觉不总结一下,可能很快自己就会把学到的知识点给忘了。

一、调用图

先从SpringMVC的调用图开始说起。
这里写图片描述
下面文字叙述各个流程:
1、用户发送请求至前端控制器DispatcherServlet;
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器;
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet。
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器。
5、执行处理器(或者Controller)。
6、Controller执行完成返回ModelAndView。
7、HandlerAdapter将Controller执行结果ModelAndView返回。
8、DispatcherServlet将ModelAndView传给ViewResolver视图解析器。
9、ViewResolver解析后返回具体的View。
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至图中)。
11、DispatcherServlet响应用户。

二、重要对象

对照流程图可以看出,DispatcherServlet可以说是SpringMVC的心脏,具有控制整个流程的作用。另外,重点掌握DispatcherServlet、HandlerMapping、Handler(Controller)、ModelAndView、HandlerAdapter、ViewResolver。
1、DispatcherServlet:前端控制器,用户请求到达前端控制器,相当于MVC模式中的C,它是整个流程控制的中心,由他调用其它组件处理用户的请求。
2、HandlerMapping:处理器映射器。负责根据用户请求找到Handler即处理器。springMVC提供了不同的映射器实现不同的映射方式,如:配置文件方式、实现接口方式、注解方式等。
3、Handler:处理器。这个是一般情况下,开发需要完成的类,需要根据业务需求编写的类。它用于对具体的用户请求进行处理。
4、HandlerAdapter:处理器适配器。通过HandlerAdapter对处理器进行执行,适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
5、ViewResolver:视图解析器。ViewResolver负责将处理器结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象。

三、使用SpringMVC大致步骤

经过上面的流程图,我们大致就可以梳理出SpringMVC的使用步骤。按照流程进行配置就不会错,大致需要有DispatcherServlet、处理器、处理器映射器、处理器适配器、视图解析器。剩下的拦截器等再根据需要进行配置即可。

3.1 配置DispatcherServlet

首先,我们需要有一个DispatchServlet。既然是Servlet,那我们自然就到web.xml文件中注册一个,因此,第一步,到 web.xml中,配置DispatcherServlet,即相应的servlet-mapping。

<servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 加载springmvc配置文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>springmvc.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!--不能配置/*,如果配置/*,则项目中的
            jsp文件也由springmvc解析,就不对了。
            配置*.action,则所有URL请求扩展名为.action
            由springmvc解析.
        -->
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>

3.2 配置springmvc.xml文件

DispatcherServlet有了,但其他的处理器映射器、处理器、处理器适配器、视图解析器等都还没有,那么,自然下一步我们就得将这些东西配置给DispatchServlet。于是,我们生成一个springmvc.xml文件,在里面加入处理器映射器、适配器等各个bean,然后将这个xml文件作为初始化内容传给DispatcherServlet的<init-param>
springmvc.xml示例:

<!-- 配置处理器映射器HandlerMapping -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <!-- 配置处理器适配器HandlerAdapter
        springmvc框架根据HandlerAdapter接口判断是否是处理器适配器
     -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--对应是HttpRequestHandler接口,即定义的Handler需要实现
        HttpRequestHandler接口,才能被这个适配器找到
    -->
    <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
    <!--配置Handler
        由于使用了BeanNameUrlHandlerMapping处理器映射器,所以name要配置成url
    -->
    <bean id="itemController" name="/itemsList.action" class="com.zhuanget.controller.ItemController"/>

    <bean id="itemController2" class="com.zhuanget.controller.ItemController2"/>
    <!--配置视图解析器
        要求将jstl的包加到classpath中
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

    <!--简单Url映射SimpleHandlerMapping
        key:用户请求的url
        标签内容:程序员编写的Handler在此配置文件中的id
    -->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/items1.action">itemController</prop>
                <prop key="/items2.action">itemController2</prop>
            </props>
        </property>
    </bean>

需要说明的是,在spring-webmvc.jar包中有一个DispatcherServlet.properties文件,里面包含一些默认的组件例如处理器映射器、处理器适配器等,当程序启动时,DispatcherServlet会自动加载DispatcherServlet.properties配置文件,从而默认加载各个组件。而如果我们在springmvc.xml中配置了处理器映射器和处理器适配器,那程序就会以我们自己配置的为主。

四、总结

本篇介绍SpringMVC的使用入门,主要是进行梳理,方便自己记住SpringMVC的使用流程和调用过程。文章参考博客:Spring MVC快速入门。后面会再梳理介绍MyBatis与Spring的整合搭建Web项目,以便自己能够更好地记住SSM框架的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值