上篇博文,我们简单的介绍了什么是SpringMVC。这篇博文。我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入。

环境准备

我们须要有主要的java环境。以下仅仅是简单的罗列,不再详细的介绍。

  • jdk1.6以上
  • eclipse或者myEclipse
  • tomcat6以上

我们使用SpringMVC的版本号是Spring3.2.0,下图是最主要的jar包:

在Spring的官方API文档中。给出了全部jar包作用的概述。现列举经常使用的包以及相关作用:


  • org.springframework.aop-3.2.0.RELEASE.jar :与Aop 编程相关的包
  • org.springframework.beans-3.2.0.RELEASE.jar :提供了简捷操作bean 的接口
  • org.springframework.context-3.2.0.RELEASE.jar :构建在beans 包基础上。用来处理资源文件及国际化。

  • org.springframework.core-3.2.0.RELEASE.jar :spring 核心包
  • org.springframework.web-3.2.0.RELEASE.jar :web 核心包。提供了web 层接口
  • org.springframework.web.servlet-3.2.0.RELEASE.jar :web 层的一个详细实现包,DispatcherServlet也位于此包中。


后文全部实例都在spring3.2.0版本号中进行,为了方便,建议在搭建好开发环境中导入spring3.2.0 的全部jar 包(全部jar 包位于dist 文件夹下)。

环境准备好了。以下我们開始动手。

编写HelloWorld 实例

  1. 步骤一、建立名为SpringMVC_helloworld 的动态web项目,并选择server,并导入上面列出的jar 包。

  2. 步骤二、编写web.xml 配置文件,代码例如以下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  5. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  6. <servlet>
  7. <servlet-name>springMVC</servlet-name>
  8. <servlet-class>
  9. org.springframework.web.servlet.DispatcherServlet
  10. </servlet-class>
  11. <load-on-startup>1</load-on-startup>
  12. </servlet>
  13. <servlet-mapping>
  14. <servlet-name>springMVC</servlet-name>
  15. <url-pattern>*.do</url-pattern>
  16. </servlet-mapping>
  17. </web-app>

简要说明:其实DispatcherServlet就是一个Servlet,也是对Http请求进行转发的核心Servlet 。

全部.do的请求将首先被DispatcherServlet处理,而DispatcherServlet 它要作的工作就是对请求进行分发(也即是说把请求转发给详细的Controller )。能够简单地觉得,它就是一个总控处理器。但其实它除了具备总控处理理器对请求进行分发的能力外。还与spring 的IOC 容器全然集成在一起,从而能够更好地使用spring 的其他功能。在这里还需留意< servlet-name> springMVC 。以下步骤三会用到。

3. 步骤三、建立Spring的配置文件,注意上一个步骤中的标签在web.xml中的servlet的名称。

DispatcherServlet的初始化后,会在WEB - INF查找一个[servlet-name]-servlet.xml 即springMVC-servlet.xml的文件。

它的主要代码例如以下:

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  7. http://www.springframework.org/schema/mvc
  8. http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-3.2.xsd
  11. http://www.springframework.org/schema/aop
  12. http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
  13. http://www.springframework.org/schema/tx
  14. http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
  15. <bean id="helloControl" class="com.tgb.controller.HelloWorld"></bean>
  16. <!-- 处理器映射器 将bean的name作为url进行查找 ,须要在配置Handler时指定beanname(就是url)
  17. 全部的映射器都实现 HandlerMapping接口。
  18. -->
  19. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
  20. <!--简单url映射 -->
  21. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  22. <property name="mappings">
  23. <props>
  24. <!-- 对helloControl进行url映射,url是/helloworld.do -->
  25. <prop key="/helloworld.do">helloControl</prop>
  26. </props>
  27. </property>
  28. </bean>
  29. <!-- 处理器适配器 全部处理器适配器都实现 HandlerAdapter接口 -->
  30. <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
  31. </beans>

说明: helloworld.do的请求将被名为helloControl的bean 进行转发处理。

4. 步骤四、创建一个SpringMVC的控制类,并处理请求,完毕HelloWord.java 的编写,代码例如以下:

  1. package com.tgb.controller;
  2. import javax.servlet.http.HttpServletRequest;
  3. import javax.servlet.http.HttpServletResponse;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import org.springframework.web.servlet.mvc.Controller;
  6. public class HelloWorld implements Controller{
  7. @Override
  8. public ModelAndView handleRequest(HttpServletRequest request,
  9. HttpServletResponse response) throws Exception {
  10. ModelAndView mav = new ModelAndView("hello.jsp");
  11. mav.addObject("message", "Hello World!");
  12. return mav;
  13. }
  14. }

说明:ModelAndView 对象是包括视图和业务数据的混合对象,即通过此对象。我们能够知道所返回的对应页面(比方这里返回hello.jsp页面)。也能够在对应的页面中获取此对象所包括的业务数据(比方这里message-Hello World!)。

5.步骤五、创建jsp。在当前项目web根文件夹下编写index.jsp,用于发送请求,hello.jsp用于显示消息,主要代码例如以下:

用index.jsp里面的超链接发出一个请求到HelloWorldController,并返回到hello.jsp 显示message的信息。

  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. <a href="helloworld.do">SpringMVC,HelloWorld实例</a>
  11. </body>
  12. </html>
  1. <%@ page language="java" contentType="text/html; charset=utf-8"
  2. pageEncoding="utf-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>Insert title here</title>
  8. </head>
  9. <body>
  10. 世界,你好!
  11. 获取值: ${message }
  12. </body>
  13. </html>

6.步骤六:把项目扔到server中。执行server,在浏览器中输入http://localhost:8080/SpringMVC_HelloWorld/index.jsp 进行測试。

简析springmvc 工作原理

  1. 启动server,依据web.xml的配置载入前端控制器(也称总控制器) DispatcherServlet 。

    在载入时会完毕一系列的初始化动作。

  2. 依据servlet的映射请求(上面的HelloWorld实例中针对.do 请求),并參照“控制器配置文件”(即springMVC-servlet.xml 这种配置文件)。把详细的请求分发给特定的后端控制器进行处理(比方上例会分发给HelloWorld 控制器进行处理)
  3. 后端控制器调用对应的逻辑层代码,完毕处理并返回视图对象( ModelAndView )给前端处理器。
  4. 前端控制器依据后端控制器返回的ModelAndView 对象。前端控器器依据视图对象返回详细页面给client。

总结

SpringMVC框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器。Spring的Controller层使用了后端控制器来映射处理器和视图解析器来共同完毕Controller层的主要工作。

而且spring的Controller层还真正地把业务层处理的数据结果和对应的视图封装成一个对象,即我们后面会经经常使用到的ModelAndView 对象。

一句话总结springMVC

封装web请求为一个数据对象、调用业务逻辑层来处理数据对象、返回处理数据结果及对应的视图给用户。

下篇博文。我们使用注解形式,并改进HelloWorld实例,敬请期待。

【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)的更多相关文章

  1. SoapUI简介和入门实例解析

    SoapUI简介 SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Ecl ...

  2. servlet入门学习之工作原理解析

    从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力 ...

  3. SpringMVC源码之参数解析绑定原理

    摘要 本文从源码层面简单讲解SpringMVC的参数绑定原理 SpringMVC参数绑定相关组件的初始化过程 在理解初始化之前,先来认识一个接口 HandlerMethodArgumentResolv ...

  4. SpringMVC学习(二)——SpringMVC架构及组件(及其运行原理)-转载

    相信大家通过前文的学习,已经对SpringMVC这个框架多少有些理解了.还记得上一篇文章中SpringMVC的处理流程吗?  这个图大致描述了SpringMVC的整个处理流程,这个流程图还是相对来说比 ...

  5. How Javascript works (Javascript工作原理) (二) 引擎,运行时,如何在 V8 引擎中书写最优代码的 5 条小技巧

    个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行. ...

  6. Android 基于Netty的消息推送方案之概念和工作原理(二)

    上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...

  7. Hadoop周边生态软件和简要工作原理(二)

    转自: http://www.it165.net/admin/html/201307/1532.html Sqoop: sqoop在hadoop生态系统中也是应用率比较高的软件,主要是用来做ETL工具 ...

  8. Mybatis入门实例解析

    写在前面:本文全程根据Mybatis官网进行入门讲解.毫无疑问,官方文档是学习这门技术最权威的资料,与此同时我们也知道官方文档对待入门小白基本上不太友好,没有入门demo.开篇就是小白们不懂的内容.有 ...

  9. Nhibernate系列学习之(一) ORM and Nhibernate入门实例解析

    最近框架项目需要,数据层想使用Nhibernate,代替传统的sql语句的写法,更加使用面向对象的思维来维护实体与数据库的这层关系映射(ORM),好在之前接触过Java时学习使用了Hibernate, ...

随机推荐

  1. 2015 多校赛 第三场 1002 (hdu 5317)

    Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more and more i ...

  2. C# Area 双重路由如何写

    在WebApi项目里面 一般除了接口, 还有管理端...一些乱七八糟的,你想展示的东西, 一种做法是分开写: 比如管理后台一个项目, 然后接口一个, 然后页面一个, 其实这样做也可以,但是这么做, 无 ...

  3. 5.12redis

    Window配置Redis环境和简单使用 一.关于Redis Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序 ...

  4. python--5、包

    包 包,即一个包含__init__.py文件的文件夹,创建包的目的也就是为了用文件夹将文件(模块)组织起来.python3中,即使包里没有__init__.py文件,仍能import使用.而pytho ...

  5. CXF-JAX-RS开发(一)入门案例

    一.简介 资源驱动.基于HTTP协议[按照标准指定URL,就可以访问数据]以XML|JSON格式传输数据. 二.quickstart 1.创建maven project[Packaging:jar] ...

  6. 【Web缓存机制系列】2 – Web浏览器的缓存机制-(新鲜度 校验值)

    Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...

  7. Git更新代码

    此次更新,创建新的文件与文件夹,并且删除了原有文件 通过“git status” 命令查看当前变更.通过变更信息可以看出,删除了test_case.py文件.这个删除只是在项目目录下进行删除,Git对 ...

  8. Day 17 time,datetime,random,os,sys,json,pickle

    time模块 1.作用:打印时间,需要时间的地方,暂停程序的功能 时间戳形式 time.time() # 1560129555.4663873(python中从1970年开始计算过去了多少秒) 格式化 ...

  9. Labview学习笔记(一)

    一.概述 Labview是一种工业标准图形化编程工具,主要用于开发测试.测量与控制系统,拥有一个可以完成任何编程任务的庞大函数库,包括数据采集.GPIB.串口控制.数据分析.数据显示及数据存储等. L ...

  10. Mark Zuckberg: A letter to our daughter

    转自:   http://www.fastcompany.com/3054120/fast-feed/read-mark-zuckerbergs-letter-to-his-newborn-daugh ...