`
56553655
  • 浏览: 204219 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

黄晓童SPRING学习笔记:Spring MVC

阅读更多

Spring的定义
对DI的初步理解
对AOP的初步理解
对DI的深入探究
对AOP的深入探究
Spring的事务管理
Spring MVC

 先来谈谈一个web请求在Spring MVC中的流程。首先,第一个停留点是Spring的DispatcherServlet,它的工作就是查找每一个处理器(HandlerMapping)得到应该把该请求分发给哪一个控制器(controller);然后,它将会把请求分派给这个控制器,在该控制器中,完成业务逻辑;然后将model和视图等信息打包成一个ModelAndView对象并返回给DispatcherServlet;一旦DispatcherServlet得到ModelAndView,它就会要求一个视图解析器来查找实际的JSP文件;最后,找到实际的JSP之后,将模型提交给该页面执行渲染,流程结束。下面,我们将结合一个再简单不过的例子进行说明。首先就是配置DispatcherServlet,在web.xml文件中需要加入如下代码段:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      classpath:roadrantz-services.xml
      classpath:roadrantz-data.xml
    </param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>roadrantz</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:roadrantz-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>roadrantz</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>

 
 上面这一段中,首先定义一个名字为roadrantz的servlet。该servlet会从xml文件中载入spring的应用上下文,xml文件的名字默认是servletName加上“-servlet.xml”,因此在本例中,它是“roadrantz-servlet.xml”。但是这里我们给出了显示的定义,这样更加清晰。并且我们声明了servlet-mapping,以处理一切以htm结尾的请求。
 然而,在实际中,我们的应用都是分层的,各层有各层的配置文件。因此,为了载入其他各层的配置文件,我们需要定义一个“ContextLoaderListener”类型的listener。这个listener默认会去/WEB-INF/applicationContext.xml去寻找。但这样无法实现配置文件分层的目的,因此,我们需要显式的方式去替代它。这时就有了“context-param”标签下的内容。配置的过程大概就是这样,接下来我们要做的就是完成后台的代码。

public class HomePageController extends AbstractController {
    
  protected ModelAndView handleRequestInternal(
      HttpServletRequest request, HttpServletResponse response)  throws Exception {
    
    List recentRants = rantService.getRecentRants();
    return new ModelAndView("home", "rants", recentRants);
  }
  
  // injected
  private RantService rantService;
  public void setRantService(RantService rantService) {
    this.rantService = rantService;
  }
}

 

 这里的rantService是一个业务逻辑层的类,要依赖spring的注入。new ModelAndView("home", "rants", recentRants);这行代码中,第一个参数告诉视图解析器实际的view对象,第二个和第三个参数是一个键值对,即返回值。定义了该控制器之后,还要在DispatcherServlet(roadrantz-servlet.xml)中加入该控制器的配置,如下:

<bean  name="/home.htm"  class="com.roadrantz.mvc.HomePageController">
    <property  name="rantService"  ref="rantService" />
</bean>

 

 这里有几个地方需要说明。第一,这个bean没有id属性,只有name属性,是因为这里含有id属性的非法字符,即斜杠。第二,为什么使用这样的字符串作为name属性的值,因为这么做省去了上面说到的流程中的处理器查找控制器的这一环节。因为这个name属性值定义了URL的样式,即以“/home.htm”结尾的url请求都交由“HomePageController”来处理。之所以name属性值写成url样式的原因,是因为spring默认使用“BeanNameUrlHandlerMapping”这种处理器的方式进行映射。然而,现在控制器完成业务逻辑之后,还要显示出来才行,这就还需要一个视图解析器(更多种类型的视图解析器和处理器、控制器将在后面提到,这里只给出一个最基本流程的概况)。因此,我们需要在“roadrantz-servlet.xml”文件中追加这样一个bean的定义:

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="prefix" value="/WEB-INF/jsp/ " />
 <property name="suffix" value=".jsp" />
</bean>

 

 InternalResourceViewResolver类型的视图解析器是最简单的类型了。还记得上面代码返回的ModelAndView的第一个参数吗?是“home”,这个视图解析器就会在该值前面加上“/WEB-INF/jsp/”,后面加上“.jsp”,因此,经过该视图解析器之后,该视图解析器就会在这个路径下“/WEB-INF/jsp/home.jsp”查找视图,并返回客户端给予显示。
 这样,一个最简单的spring  MVC请求的流程就结束了。下面,我们将介绍流程中的每一个环节的部件。我们以处理器、控制器、视图解析器的顺序进行。在spring MVC中,常用的处理器一共有四种:BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping、
ControllerClassNameHandlerMapping、CommonsPathMapHandlerMapping。其中,
BeanNameUrlHandlerMapping在前面已经提到了。剩下三种,这里只着重讲一下SimpleUrlHandlerMapping这一种。

<bean id="urlMapping"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
      <props>
        <prop key="/login.htm">loginController</prop>
        <prop key="/home.htm">homePageController</prop>
        <prop key="/error.htm">errorController</prop>
        <prop key="/addRant.htm">addRantController</prop>
      </props>
    </property>
</bean>

 

 这就是SimpleUrlHandlerMapping处理器的配置方式,相信读过之后大家就已经明白了。其中每一个prop标签的值都是一个bean的id。然而,在实际当中,只使用一种处理器是很难满足现状的。如果要使用多种处理器的话,又会有冲突,因为spring不知道要用哪一种处理器去解析,这时就需要在配置当中设置每个处理器的优先级。配置方法是在每个处理器的bean当中加入(其中,0代表的处理器的优先级最高):

<property name="order" value="0" />

 
 至于控制器,也就是spring MVC的核心。在上面的例子当中的控制器是继承了AbstractController类的。而一般情况下,如果你需要的控制器比较简单,功能上类似一个servlet的话,用这个类就够了。当然你也可以重写一个控制器,但是要实现controller接口。spring内置的控制器有大约十种,这里就不一一举例了,大家用到时候可以去现学。
 视图解析器,在spring当中就是一个实现了ViewResolver接口的bean。常用的视图解析器有前面提到的InternalResourceViewResolver,还有BeanNameViewResolver,如果你的项目的页面渲染是基于velocity实现的,还可以用VelocityViewResolver。这里也不详细举例了。

分享到:
评论

相关推荐

    学习笔记:尚硅谷Spring6基础篇

    ### 学习笔记:尚硅谷Spring6基础篇 #### 一、Spring框架概述 ##### 1.1 Spring是什么? Spring是一款主流的Java EE轻量级开源框架,由“Spring之父”Rod Johnson提出并创立。Spring的主要目标是简化Java企业级...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    Spring MVC 学习笔记

    以下是对Spring MVC学习笔记的详细解释: 1. **创建项目**: 创建Spring MVC项目通常从构建一个Maven工程开始。在命令行中使用Maven的`archetype:generate`命令创建一个JEE5的Web工程。在提供的例子中,使用了特定...

    Spring学习笔记.zip

    根据提供的压缩包文件名,我们可以推测这是一个逐步学习Spring的系列笔记。从"Spring_day1"开始,可能涵盖了Spring的基础概念、环境搭建和基本配置。"Spring_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3...

    spring mvc学习笔记

    ### Spring MVC 学习笔记 #### 一、Spring MVC 核心组件与工作流程 **Spring MVC** 是 **Spring Framework** 的一个重要模块,主要用于构建基于 Web 的应用程序。它提供了简化 Web 开发的一系列功能,包括但不限于...

    Spring MVC 学习笔记 一 创建项目

    **Spring MVC 学习笔记 一 创建项目** 在IT领域,Spring MVC是Java Web开发中的一个强大框架,它简化了构建交互式Web应用程序的过程。本笔记将深入探讨如何创建一个基本的Spring MVC项目,让我们开始吧。 首先,...

    Spring MVC 学习笔记 十二 PDF/Excel格式输出

    本学习笔记主要围绕Spring MVC的使用、配置和核心组件进行深入探讨,旨在帮助开发者更好地理解和掌握这一框架。 在Spring MVC中,Model代表业务逻辑和数据,View负责数据的展示,而Controller处理用户请求,协调...

    Spring MVC学习笔记MD.7z

    这个压缩包“Spring MVC学习笔记MD.7z”包含了作者在学习Spring MVC过程中的笔记、源代码以及相关文档,非常适合初学者或希望深入理解Spring MVC的开发者。 首先,`SpringMVC-Study.7z` 可能是作者整理的Spring MVC...

    Spring MVC 学习笔记 九 json格式的输入和输出

    在这个学习笔记中,我们将深入探讨如何在Spring MVC中处理JSON格式的数据,包括输入和输出。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后端数据传输。 1. **JSON格式简介** ...

    spring MVC学习笔记

    在学习Spring MVC的过程中,我们首先需要了解的是控制器(Controller)的基本概念。控制器是处理用户请求并返回响应给用户的组件。在Spring MVC中,通过@Controller注解标记一个类为控制器。一个控制器类中可以包含...

    javaSpring学习笔记

    在“Java Spring学习笔记”中,你将找到对Spring框架的全面介绍,包括IoC(控制反转)和DI(依赖注入)原理、AOP(面向切面编程)、Spring MVC、Spring Boot等核心内容。每个主题都结合了理论知识和实际示例,帮助你...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    javaSSM 学习笔记spring spring MVC mybatis

    【Java SSM 学习笔记:Spring、Spring MVC、MyBatis】 SSM 是 Java Web 开发中常用的三大框架,即 Spring、Spring MVC 和 MyBatis。它们各自负责不同的职责,共同构建了一个高效、灵活的 web 应用程序。 1. **...

    spring_mvc学习笔记

    在Spring MVC的学习过程中,了解和掌握其核心概念与机制至关重要。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序。在Spring 3.0.x版本中,Spring MVC进行了大量的改进,引入了许多新特性和优化,使其...

Global site tag (gtag.js) - Google Analytics