阿里P 7架构师亲授述Spring源码深度解析,快速学习SpringMVC

黄师傅

曾任职于阿里巴巴、北京拓尔思、北京人人网、北京掌阅科技等多家企业,在阿里解决JVM调优,JVM排错,开源框架NickleScheduler和NickleFeign使用,在Netty上提过PR,曾获得宜信、去哪儿、饿了么、京东、搜狐等大厂Offer,专攻底层原理技术。

精通C、Java、Hotspot JVM、Linux内核、微服务、架构设计、各大开源框架源码,对领域驱动模型有独特见解。

SpringMVC

Spring框架提供了构建Web应用程序的全功能MVC模块。通过策略接口,Spring框架是高度可配置的,而且支持多种视图技术,例如JavaServer Pages(JSP)、Velocity、Tiles、iText和POI。SpringMVC框架并不知道使用的视图,所以不会强迫您只使用JSP技术。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

Spring的MVC是基于Servlet功能实现的,通过实现Servlet接口的DispatcherServlet来封装其核心功能实现,通过将请求分派给处理程序,同时带有可配置的处理程序映射、视图解析、本地语言、主题解析以及上载文件支持。默认的处理程序是非常简单的Controller接口,只有一个方法ModelAndView handleRequest(request, response)。Spring提供了一个控制器层次结构,可以派生子类。如果应用程序需要处理用户输入表单,那么可以继承AbstractFormController。如果需要把多页输入处理到一个表单,那么可以继承AbstractWizardFormController。

对SpringMVC或者其他比较成熟的MVC框架而言,解决的问题无外乎以下几点。

  • 将Web页面的请求传给服务器。根据不同的请求处理不同的逻辑单元。返回处理结果数据并跳转至响应的页面。

我们首先通过一个简单示例来快速回顾SpringMVC的使用。

11.1 SpringMVC快速体验

1.配置web.xml

一个Web中可以没有web.xml文件,也就是说,web.xml文件并不是Web工程必需的。web.xml文件用来初始化配置信息,比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。但是,SpringMVC的实现原理是通过servlet拦截所有URL来达到控制的目的,所以web.xml的配置是必需的。

SpringmvccontextConfigLocationclasspath:applicationContext.xmlSpringmvcorg.Springframework.web.servlet.DispatcherServlet1Springmvc*.htmorg.Springframework.web.context.ContextLoaderListener

Spring的MVC之所以必须要配置web.xml,其实最关键的是要配置两个地方。

  • contextConfigLocation:Spring的核心就是配置文件,可以说配置文件是Spring中必不可少的东西,而这个参数就是使Web与Spring的配置文件相结合的一个关键配置。DispatcherServlet:包含了SpringMVC的请求逻辑,Spring使用此类拦截Web请求并进行相应的逻辑处理。

2.创建Spring配置文件applicationContext.xml

<beansxmlns="http://www.Springframework.org/schema/beans"xmlns:tx="http://www.Springframework.org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemalocation="http://www.Springframework.org/schema/beanshttp://www.Springframework.org/schema/beans/Spring-beans-2.5.xsdhttp://www.Springframework.org/schema/txhttp://www.Springframework.org/schema/tx/Spring-tx-2.5.xsd"><beanclass="org.Springframework.web.servlet.view. Internal ResourceViewResolver"id="viewResolver"></bean></beans>

InternalResourceViewResolver是一个辅助bean,会在ModelAndView返回的视图名前加上prefix指定的前缀,再在最后加上suffix指定的后缀,例如:由于XXController返回的ModelAndView中的视图名是testview,故该视图解析器将在/WEB-INF/jsp/testview.jsp处查找视图。

3.创建model

模型对于SpringMVC来说并不是必不可少,如果处理程序非常简单,完全可以忽略。模型创建主要的目的就是承载数据,使数据传输更加方便。

publicclassUser{privateString username;

privateInteger age;

publicString getUsername(){return username;}

publicvoid setUsername(String username){this.username = username;}

publicInteger getAge(){return age;}

publicvoid setAge(Integer age){this.age = age;}}

4.创建controller

控制器用于处理Web请求,每个控制器都对应着一个逻辑处理。

publicclassUserControllerextendsAbstractController{@OverrideprotectedModelAndView handleRequestInternal(HttpServletRequest arg0,HttpServletResponse arg1)throwsException{List<user> userList =newArrayList<user>();

User userA =newUser();User userB =newUser();

userA.setUsername("张三");

userA.setAge(27);

userB.setUsername("李四");userB.setAge(37);

userList.add(userA);userList.add(userB);

returnnewModelAndView("userlist","users", userList);}}

在请求的最后返回了ModelAndView类型的实例。ModelAndView类在SpringMVC中占有很重要的地位,控制器执行方法都必须返回一个ModelAndView,ModelAndView对象保存了视图以及视图显示的模型数据,例如其中的参数如下。

  • 第1个参数userlist:视图组件的逻辑名称。这里视图的逻辑名称就是userlist,视图解析器会使用该名称查找实际的View对象。第2个参数users:传递给视图的模型对象的名称。第3个参数userList:传递给视图的模型对象的值。

5.创建视图文件userlist.jsp

<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><h2>This is SpringMVC demo page</h2><c:foreachitems="${users}"var="user"><br/><br/></c:foreach>

视图文件用于展现请求处理结果,通过对JSTL的支持,可以很方便地展现在控制器中放入ModelAndView中的处理结果数据。

6.创建Servlet配置文件Spring-servlet.xml

<beansxmlns="http://www.Springframework.org/schema/beans"xmlns:tx="http://www. Springframework. org/schema/tx"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemalocation="http://www.Springframework.org/schema/beanshttp://www.Springframework.org/schema/beans/Spring-beans-2.5.xsdhttp://www.Springframework.org/schema/txhttp://www.Springframework.org/schema/tx/Spring-tx-2.5.xsd"><beanclass="org.Springframework.web.servlet.handler.SimpleUrlHandlerMapping"id="simpleUrlMapping"><propertyname="mappings"><props><propkey="/userlist.htm">userController</prop></props></property></bean></beans>

因为SpringMVC是基于Servlet的实现,所以在Web启动的时候,服务器会首先尝试加载对应于Servlet的配置文件,而为了让项目更加模块化,通常我们将Web部分的配置都存放于此配置文件中。

至此,已经完成了SpringMVC的搭建,启动服务器,输入网址http://localhost:8080/ Springmvc/userlist.htm。

看到了服务器返回界面,如图11-1所示。

阿里P 7架构师亲授述Spring源码深度解析,快速学习SpringMVC

SpringMVC快速体验

  • 面剖析Spring源码,方便读者根据业务需求进行更改或扩展所有知识点秉承由浅入深、由易到难的讲解架构采用抽丝剥茧的方式来阐述复杂的逻辑,降低理解难度

从核心实现、企业应用和Spring Boot这3个方面,由浅入深、由易到难地对Spring源码展开了系统的讲解,包括Spring 整体架构和环境搭建、容器的基本实现、默认标签的解析、自定义标签的解析、bean的加载、容器的功能扩展、AOP、数据库连接JDBC、整合MyBatis、事务、SpringMVC、远程服务、Spring消息、Spring Boot体系原理等内容。

不仅介绍了使用Spring框架开发项目必须掌握的核心概念,还指导读者使用Spring框架编写企业级应用,并针对在编写代码的过程中如何优化代码、如何使得代码高效给出了切实可行的建议,从而帮助读者全面提升实战能力。

语言简洁,示例丰富,可帮助读者迅速掌握使用Spring进行开发所需的各种技能。本书适合于已具有一定Java编程基础的读者,以及在Java平台下进行各类软件开发的开发人员、测试人员等。

想要领取黄老师100集的spring源码解析:

获取方式:1.转发关注小编;2.私信小编“学习”来得到获取方式吧~~

阿里P 7架构师亲授述Spring源码深度解析,快速学习SpringMVC

相关推荐