Spring MVC学习(一)

开发步骤:

  1. 在web.xml文件中定义Spring 的前端控制器DispatcherServlet来拦截用户请求.web应用是基于请求/响应架构的应用,不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心控制器Servlet或Filter,这样才能让框架介入web应用中。
  2. 如果需要以post方式提交请求,则需要定义包含表单数据的jsp。如果是以get方式发送请求,则无须。
  3. 定义处理用户请求的handle类,可以实现Controller接口或者使用@Controller注解。这一步也是MVC框架必不可少的,控制器接受请求后将其分发给对应的Handle即是实现了Controller接口的Java类,而该Java类负责调用后台业务逻辑代码来处理请求。
  4. 配置Handle。可以在xml文件中进行配置也可以使用注解进行配置。
  5. 编写视图资源。Handle处理完用户请求之后,通常会返回一个ModelAndView对象,对象中包含了返回的视图名或视图名和模型,这个视图名就代表要显示的物理视图资源。如果Handle需要把一些数据传给视图资源,则可以通过模型对象。
    web.xml中配置核心控制器的代码:
<!-- 定义Spring MVC的前端控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <!-- 配置文件的位置 -->
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/springmvc-config.xml</param-value>
        </init-param>
        <!-- 设置web应用启动时立即加载servlet -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- servlet映射声明,让Spring MVC的前端控制器拦截所有请求 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

Spring MVC 配置文件代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <!-- 配置Handle,映射"/hello请求" -->
    <!-- <bean name="/hello" class="com.xing.controller.HelloController"/> -->
    <!-- 以下是不使用注解时,所需要配置的 -->
    <!-- 处理映射器将bean的name作为URL进行查找,需要在配置Handle时指定name(即URL) -->
    <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> -->
    <!-- SimpleControllerHandlerAdapter是一个处理适配器,所有处理适配器都要实现HandlerAdapter接口 -->
    <!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> --> <!-- 视图解析器 -->
    <!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> -->



    <!-- 以下是使用注解开发时所需要的配置 -->
    <!-- spring自动扫描base-pack下面的包或者子包下面的Java文件,如果如果扫描到有 spring的相关注解的类,则把这些类注册为Spring的bean -->
    <!-- 扫描对应的包 -->
    <context:component-scan base-package="com.xing.controller" />
    <!-- 配置 annotation类型的处理映射器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <!-- 配置annotation类型的处理器适配器 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>

不使用注解的话,对每一个请求都要在配置文件中进行配置,当项目足够大的时候会使配置文件看起来臃肿,还是使用注解的方式比较方便。。


Spring MVC的执行流程:

  1. 用户向服务器发送请求,请求被Spring的前端控制器DispatcherServlet拦截。
  2. 前端控制器DispatcherServlet对请求URL进行解析,得到URL。之后根据该URL调用HandlerMapping获得该Handler配置的所有相关对象,包括Handle对象以及Handle对象对应的拦截器,这些对象会被封装到一个HandlerExecutionChain对象中返回。
  3. DispatcherServlet根据获得的Handler选择一个合适HandlerAdapter(设计符合面向对象的单一职责原则,代码结构清晰便于维护可重用性高)。HandlerAdapter会被用于处理多种Handler调用Handler实际处理请求的方法。
  4. 提取请求中的模型数据,开始执行Handler(Controller),再填充Handler的入参过程中根据配置Spring会做以下工作:
    • 消息转换:将请求消息(如json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
    • 数据转换:对请求消息进行数据转换,如String转换成Integer、Double、Float等。
    • 数据格式化:对请求消息进行数据格式化,如将字符串转化成数字或格式化日期等。
    • 数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。
  5. Handler执行完成后,像DispatcherServlet返回一个ModelAndView对象,该对象中包含视图名或视图名和模型。
  6. 根据返回的ModelAndView对象,选择一个合适的ViewResolver(视图解析器)返回给DispatcherServlet。
  7. ViewResolver结合Model和View来渲染视图。
  8. 将视图渲染结果返回给客户端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值