Sprig Web MVC 基础

1、MVC模式简介

  M-Model模型  

  模型(Model)的职责是负责业务逻辑。包含两层:业务数据和业务处理逻辑。比如实体类、DAO、Service都属于模型层。

  V-View视图

  视图(View)的职责是负责显示界面和用户交互(收集用户信息)。属于视图的组件是不包含业务逻辑和控制逻辑的JSP

  C-Controller控制器

  控制器是模型层M和视图层V之间的桥梁,用于控制流程

  比如:在Servlet项目中的单一控制器ActionServlet。

2、什么是Spring Web MVC

  Spring web MVC 是Spring框架一个非常重要的功能模块。实现了MVC结构,便于简单、快速开发MVC结构的Web程序。Spring web MVC 提供的API封装了web开发中常用的功能,简化了Web过程。

3、Spring Web MVC的核心组件

  Spring Web MVC提供了M、V和C相关的主要实现组件,具体如下

    DispatcherServlet(控制器,请求入口)

    HandlerMapping(控制器,请求派发)

    Controller(控制器,请求处理流程)

    ModelAndView(模型,封装业务处理结果和视图)

    ViewResolver(视图,视图显示处理器)

4、Spring Web MVC的处理流程

  • 浏览器向Spring发送请求,请求交给前端控制器DispatcherServlet处理
  • 控制器通过HandlerMapping找到相应的Controller组件处理请求
  • 执行Controller组件约定方法处理请求,在约定方法调用模型组件完成业务处理。约定方法可以返回一个ModelAndView对象,封装了处理结果数据和视图名称信息
  • 控制器接收ModelAndView之后,调用ViewResolver组件,定位View(JSP)并传递数据信息,生成响应界面结果

5、搭建Spring Web MVC 环境

  搭建Spring Web MVC开发环境的主要步骤下

    创建Web工程导入Spring web mvc 相关开发包

      Spring API、web、webmvc等开发包

    在src下添加Spring的XML配置文件

      名称可以自定义,例如spring-mvc.xml

    在web.xml中配置DispatcherServlet前端控制器组件

      DispatchherServlet组件在spring mvc中以提供,只需要配置即可

      配置DispatcherServlet时,同时指定XML的配置文件

6、DispatcherServlet控制器配置

    <!-- Spring前端控制器 -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath:applicationContext.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

7、HandlerMapping组件

  通过HandlerMapping组件,DispatcherServlet控制器可以将客户HTTP请求映射到Controller组件上。

  SimpleUrlHandlerMapping

    维护一个HTTP请求和Controller映射关系列表(map),根据列表对应关系调用Controller

8、HandlerMapping组件

  SimpleUrlHandlerMapping使用定义如下

    <!--HandlerMapping组件-->
    <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/login.form" >loginController</prop>
                <prop key="/hello.form" >helloController</prop>
            </props>
        </property>
    </bean>
    <bean id="helloController" class="org.tarena.web.HelloController"/>
//或

<!--HandlerMapping组件 -->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 指定请求和Controller对应关系 -->
<property name="mappings" ref="urlMappings" />
</bean>
<!-- 定义请求映射表map -->
<util:properties id="urlMapping">
<prop key="/hello.form">helloController</prop>
</util:properties>

 

  RequestMappingHandlerMapping

  RequestMappingHandlerAdapter

    在Controller类和方法上使用@RequestMapping注解指定对应的客户HTTP请求

9、Controller组件

  Controller组件负责执行具体的业务处理,可调用DAO等组件,编写时需要实现Controller接口及约定方法

10、ModelAndView组件

  Controller组件约定的handlerRequest方法执行后返回一个ModelAndView对象,该对象可封装模型数据和视图名响应信息。ModelAndView构造器如下:

    ModelAndView(String viewName)

    ModelAndView(String viewName,Map model)

  viewName是jsp页面的名字

  model的数据存储到request的attribute中

11、ViewResoler组件

  所有Controller组件都返回一个ModelAndView实例,封装了视图名。Spring中的视图以名字为标识,视图解析器ViewResolver通过名字来解析视图。

    Spring提供了多种视图解析器,具体如图示;

  InternalResourceViewResolver使用示例如下

    <!-- 处理请求转发 -->
    <!--ViewResolver-->
    <bean id="viewResoler" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

  如:视图名hello通过以上配置可以映射到

    /WEB-INF/jsp/hello.jsp

你可能感兴趣的:(Web)