dubbo源码深度解析_Spring源码深度解析:快速体验SpringMVC

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的配置是必需的。

  1. Springmvc
  2. contextConfigLocation
  3. classpath:applicationContext.xml
  4. Springmvc
  5. org.Springframework.web.servlet.DispatcherServlet
  6. 1
  7. Springmvc
  8. *.htm
  9. org.Springframework.web.context.ContextLoaderListener

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

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

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

  1. <beans xmlns="http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;beans" xmlns&#58;tx="http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;tx" xmlns&#58;xsi="http&#58;&#47;&#47;www&#46;w3&#46;org&#47;2001&#47;XMLSchema&#45;instance" xsi&#58;schemalocation="http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;beans
  2. http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;beans&#47;Spring&#45;beans&#45;2&#46;5&#46;xsd
  3. http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;tx
  4. http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;tx&#47;Spring&#45;tx&#45;2&#46;5&#46;xsd">
  5. <bean class="org&#46;Springframework&#46;web&#46;servlet&#46;view&#46; Internal Resource
  6. ViewResolver" id="viewResolver">
  7. </bean>
  8. </beans>

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

3.创建model

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

  1. public class User {
  2. private String username;
  3. private Integer age;
  4. public String getUsername() {
  5. return username;
  6. }
  7. public void setUsername(String username) {
  8. this.username = username;
  9. }
  10. public Integer getAge() {
  11. return age;
  12. }
  13. public void setAge(Integer age) {
  14. this.age = age;
  15. }
  16. }

4.创建controller

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

  1. public class UserController extends AbstractController {
  2. @Override
  3. protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
  4. List<user> userList = new ArrayList<user>();
  5. User userA = new User();
  6. User userB = new User();
  7. userA.setUsername("张三");
  8. userA.setAge(27);
  9. userB.setUsername("李四");
  10. userB.setAge(37);
  11. userList.add(userA);
  12. userList.add(userB);
  13. return new ModelAndView("userlist", "users", userList);
  14. }
  15. }

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

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

5.创建视图文件userlist.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3. <h2>This is SpringMVC demo page</h2>
  4. <c:foreach items="&#36;&#123;users&#125;" var="user">
  5. <br />
  6. <br />
  7. </c:foreach>

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

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

  1. <beans xmlns="http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;beans" xmlns&#58;tx="http&#58;&#47;&#47;www&#46; Spring
  2. framework&#46; org&#47;schema&#47;tx" xmlns&#58;xsi="http&#58;&#47;&#47;www&#46;w3&#46;org&#47;2001&#47;XMLSchema&#45;instance" xsi&#58;schemalocation="http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;beans
  3. http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;beans&#47;Spring&#45;beans&#45;2&#46;5&#46;xsd
  4. http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;tx
  5. http&#58;&#47;&#47;www&#46;Springframework&#46;org&#47;schema&#47;tx&#47;Spring&#45;tx&#45;2&#46;5&#46;xsd">
  6. <bean class="org&#46;Springframework&#46;web&#46;servlet&#46;handler&#46;SimpleUrlHandlerMapping" id="simpleUrlMapping">
  7. <property name="mappings">
  8. <props>
  9. <prop key="&#47;userlist&#46;htm">userController</prop>
  10. </props>
  11. </property>
  12. </bean>
  13. </beans>

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

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

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

ad7560f4656db61f162aa0ec7d3c6fd3.png

图11-1 SpringMVC快速体验

本文摘自:《Spring源码深度解析》(第2版)

《Spring源码深度解析》(第2版)

cd2fafe00832dbea0e738dc79b9be7b4.png
《Spring源码深度解析 第2版》(郝佳)【摘要 书评 试读】- 京东图书​item.jd.com
22d5fd55ed824f70684a86842e393f0d.png
    • 全面剖析Spring源码,方便读者根据业务需求进行更改或扩展
    • 所有知识点秉承由浅入深、由易到难的讲解架构
    • 采用抽丝剥茧的方式来阐述复杂的逻辑,降低理解难度

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值