上篇博文,我们简单的介绍了什么是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项目,并选择服务器,并导入上面列出的jar 包。
  2. 步骤二、编写web.xml 配置文件,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
</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的文件。它的主要代码如下:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "><bean id="helloControl" class="com.tgb.controller.HelloWorld"></bean><!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 HandlerMapping接口。--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><!--简单url映射  --><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><!-- 对helloControl进行url映射,url是/helloworld.do --><prop key="/helloworld.do">helloControl</prop></props></property></bean><!-- 处理器适配器 所有处理器适配器都实现 HandlerAdapter接口 --><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /></beans>

说明: helloworld.do的请求将被名为helloControl的bean 进行转发处理。
4. 步骤四、创建一个SpringMVC的控制类,并处理请求,完成HelloWord.java 的编写,代码如下:

package com.tgb.controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;public class HelloWorld implements Controller{@Overridepublic ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception {ModelAndView mav = new ModelAndView("hello.jsp");mav.addObject("message", "Hello World!");return mav;}
}

说明:ModelAndView 对象是包含视图和业务数据的混合对象,即通过此对象,我们可以知道所返回的相应页面(比如这里返回hello.jsp页面),也可以在相应的页面中获取此对象所包含的业务数据(比如这里message-Hello World!)。
5.步骤五、创建jsp,在当前项目web根目录下编写index.jsp,用于发送请求,hello.jsp用于显示消息,主要代码如下:
用index.jsp里面的超链接发出一个请求到HelloWorldController,并返回到hello.jsp 显示message的信息。

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

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

简析springmvc 工作原理

  1. 启动服务器,根据web.xml的配置加载前端控制器(也称总控制器) DispatcherServlet 。在加载时会完成一系列的初始化动作。
  2. 根据servlet的映射请求(上面的HelloWorld实例中针对.do 请求),并参照“控制器配置文件”(即springMVC-servlet.xml 这样的配置文件),把具体的请求分发给特定的后端控制器进行处理(比如上例会分发给HelloWorld 控制器进行处理)
  3. 后端控制器调用相应的逻辑层代码,完成处理并返回视图对象( ModelAndView )给前端处理器。
  4. 前端控制器根据后端控制器返回的ModelAndView 对象,前端控器器根据视图对象返回具体页面给客户端。

总结

SpringMVC框架的核心是DispatcherServlet,它的作用是将请求分发给不同的后端处理器。Spring的Controller层使用了后端控制器来映射处理器和视图解析器来共同完成Controller层的主要工作。并且spring的Controller层还真正地把业务层处理的数据结果和相应的视图封装成一个对象,即我们后面会经常用到的ModelAndView 对象。

一句话总结springMVC

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

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

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)相关推荐

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

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

  2. 以太网及网络工作原理二

    以太网及网络工作原理二 2.以太网工作原理 2.2.以太网数据帧 2.3.数据帧传输 2.4.交换机的工作原理 2.5.网线的分类 2.6.千兆以太网 2.6.1.千兆位以太网标准主要四种类型的传输介 ...

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

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

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

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

  5. SpringMVC架构---SpringMVC学习笔记(一)

    什么是SpringMVC? springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合.(struts2与Spring整合的时候需要借助单独的jar包) ...

  6. 网络知识入门,路由器工作原理(十)

    路由器工作原理       路由器的转发的工作原理和交换机类似,也是通过查表判断包转发的目标.不过在具体的操作过程上,路由器和交换机是有区别的.因为路由器是基于 IP 设计的,而交换机是基于以太网设计 ...

  7. wincc报表日报表实例_工作系统二次开发二Python加工原膜切割日报表数据实例

    #工作系统二次开发二Python加工原膜切割日报表数据实例 #当查询一个或多个工作令后在表格展示数据前按要求对数据进行二次处理,处理要求看如下 #1.加工单号和母卷物料编号相同则把除第一行外的领料有关 ...

  8. Step-by-step to Transformer:深入解析工作原理(以Pytorch机器翻译为例)

    大家好,我是青青山螺应如是,大家可以叫我青青,工作之余是一名独立摄影师.喜欢美食.旅行.看展,偶尔整理下NLP学习笔记,不管技术文还是生活随感,都会分享本人摄影作品,希望文艺的技术青年能够喜欢~~如果 ...

  9. php memcached 例子,php下Memcached入门实例解析

    本文较为详细的讲述了php下Memcached的入门知识与实例.分享给大家供大家参考.具体如下: memcache 在什么情况下被使用,什么情况下不要使用? 你在何时应该使用 memcache,又要在 ...

最新文章

  1. 清华博士找工作7个月没着落,本科学历影响几时休?
  2. 高品质摄影作图台式计算机推荐,浅谈高质量摄影照片后期输出的打印机选择
  3. Windows/Linux下引用jar包,并用javac/java编译运行
  4. 小程序之图片懒加载[完美方案,你不来看看?]
  5. java内部类写法_Java学习-内部类
  6. (实战项目三)新浪网分类资讯爬虫
  7. 做了 5 年运维,靠着这份监控知识体系,我从 3K 变成了40K | 原力计划
  8. 根据需求进行批量新增
  9. 当前串口号不可以或被占用_原来团建是可以不占用私人时间当然,还可以拿加班费|不一样的团建...
  10. web.xml 加载顺序
  11. SQL Server 2005 无法连接服务器(error:10061)
  12. 计算机管理 网络连接服务,WZC服务未开启无法连接网络 解决方法及步骤
  13. PG性能调校(二):数据库硬件及基准评测
  14. Pure Strategy Game
  15. 云计算与大数据技术应用2020.10.15
  16. 阿里天池:Airbnb短租房数据集分析
  17. 2021-2027全球与中国低轨道卫星市场现状及未来发展趋势
  18. 申请阿里云服务器并配置SSL证书(附带微信公众号配置服务器)
  19. 【教程】browsermob-proxy 基于Java的代理服务 配合selenium使用
  20. Linux之关于文本编辑器

热门文章

  1. 基于Android的天气预报APP
  2. matlab uint8转uint16,MATLAB图像uint8,uint16,double, rgb转灰度解释
  3. C语言小球滚动程序,关于小球滚动与滑动问题的处理方法
  4. OpenVINO基于人脸landmark检测实现眼睛疲劳/睡意检测
  5. FFmpeg的H.264解码器源代码简单分析:宏块解码(Decode)部分-帧间宏块(Inter)...
  6. 自由的SSL证书 要不要
  7. 小型超声波PCB电路板设计
  8. matlab图片序列生成视频(亲测可用)
  9. 测试光照软件,太阳能电池IV测试软件
  10. 注册表常用命令大全 通向程序的快捷途径