Spring mvc是一个类似于struts的mvc框架。那么有程序猿会说,我学了struts,为啥还要学spring mvc?请看下面一组比较:
运行性能上:
Jsp+servlet>struts1>springmvc>struts2+freemarker>>struts2,ognl,值栈。

开拓效率上,基本恰好相反。值得强调的是,spring mvc开拓效率和struts2不相上下。
采取spring mvc很随意马虎就能写出性能精良的代码,而采取struts2一欠妥心就会写出糟糕的代码,使程序的性能很低。
Springmvc C层框架的核心是 DispatcherServlet,它的浸染是将要求分发给不同的后端处理器,也即利用了一种被称为Front Controller(前端掌握器)的模式。Springmvc 的C 层框架利用了后端掌握器来、映射处理器和视图解析器来共同完成C 层框架的紧张事情。并且springmvc 的C 层框架还真正地把业务层处理的数据结果和相应的视图拼成一个工具,即我们后面会常常用到的ModelAndView工具。
1.2 开拓环境
开拓工具:myeclipse8.6.1
数据库:mysql5.5.23
做事器: tomcat6.0.37
框架版本: spring3.2.2
1.3 Hello world程序开拓
步骤一:在myeclipse8.6中新建web工程springmvc01,拷贝如下包到lib眼前:
解释:commons-logging-1.1.3.jar这天记包,不才载的struts2官方包里面可以找到。其它的包都在spring3.2.2版本官方包里面找到。
spring-aop-3.2.2.RELEASE.jar:与Aop 编程干系的包
spring-beans-3.2.2.RELEASE.jar:供应了简捷操作bean 的接口
spring-context-3.2.2.RELEASE.jar:构建在beans 包根本上,用来处理资源文件及国际化。
spring-core-3.2.2.RELEASE.jar:spring 核心包
spring-web-3.2.2.RELEASE.jar:web 核心包,供应了web 层接口
spring-webmvc-3.2.2.RELEASE.jar:web 层的一个详细实现包,DispatcherServlet也位于此包中。
把稳:以上包是springmvc开拓所须要的最基本包,不能再精简。
步骤二:编写web.xml 配置文件,代码如下:
=================================web.xml========================
<?xmlversion=\"大众1.0\"大众 encoding=\"大众UTF-8\"大众?>
<web-appversion=\"大众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>
================================================================
解释: org.springframework.web.servlet.DispatcherServlet这里实在是不须要及记住的,在src目录下随便新建一个类,然后输入dispa,按下快捷键,就会涌现这串代码,然后拷贝过来即可。
知识讲解: DispatcherServlet 便是一个Servlet ,也是对要求进行转发的核心Servlet 。在这里即所有.do 的要求将首先被DispatcherServlet 处理,而DispatcherServlet它要作的事情便是对要求进行分发(也即是说把要求转发给详细的Controller )。可以大略地认为,它便是一个总控处理器,但事实上它除了具备总控处理理器对要求进行分发的能力外,还与spring 的IOC 容器完备集成在一起,从而可以更好地利用spring 的其它功能。在这里还需留神
<servlet-name > springmvc </ servlet-name > ,下面会用到。
当然我们也可以多加一个
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>.php</url-pattern>
</servlet-mapping>
拦截后缀是.php的要求
步骤三: 在web-inf目录下建立springmvc-servlet.xml的配置文件,它的命名规则{servlet-name}-servlet.xml ,把稳下划线处。当DispatcherServlet启动的时候,它会默认根据此规则到web-inf目录下去找这个xml配置文件。
=========================springmvc-servlet.xml==========================
<?xmlversion=\"大众1.0\"大众encoding=\"大众UTF-8\"大众?>
<!DOCTYPEbeansPUBLIC\"大众-//SPRING//DTDBEAN//EN\"大众
\"大众http://www.springframework.org/dtd/spring-beans.dtd\"大众>
<beans>
<beanid=\公众simpleUrlHandlerMapping\"大众 class=\"大众org.springframework.web.servlet.handler.SimpleUrlHandlerMapping\"大众>
<propertyname=\"大众mappings\"大众>
<props>
<propkey=\"大众/hello.do\公众>helloControl</prop>
</props>
</property>
</bean>
<bean id=\"大众helloControl\"大众 class=\"大众com.wx.controls.HelloWorld\"大众></bean>
</beans>
==========================================================
把稳:<!DOCTYPEbeansPUBLIC\公众-//SPRING//DTD BEAN//EN\"大众
\"大众http://www.springframework.org/dtd/spring-beans.dtd\"大众>
这段文档类型定义是不须要我们记的,在如图所示的地方可以找到。
知识讲解:[<beanid=\公众simpleUrlHandlerMapping\公众]是配置一个映射处理器,把
/hello.do的要求交给名为helloControl的bean处理,把稳上面画横线处。
步骤四:编写掌握器HelloWord.java,如下所示:
================================== HelloWord.java===================
package com.wx.controls;
import javax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class HelloWorld implements Controller {
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView(\公众hello.jsp\公众);
mav.addObject(\公众message\"大众,\公众HelloWorld!\"大众);
return mav;
}
}
====================================================================
知识讲解:Controller是后端掌握器的接口,springmvc会把对应的要求交给实现它的方法handleRequest去处理。ModelAndView 工具是包含视图和业务数据的稠浊工具,即是说通过此工具,我们可以知道所返回的相应页面(比如这里返回hello.jsp 页面),也可以在相应的页面中获取此工具所包含的业务数据(相称于完成了servlet中的 request.setAttribute()和request.getRequestDispatcher(\公众hello.jsp\"大众)两个事情),当然我们也可以new ModelAndView(\"大众forward:hello.do\"大众)的办法进行转发要求,也可以new ModelAndView(\"大众redirect:hello.jsp\公众)的办法重定向要求。
步骤五:在webroot根目录下编写hello.jsp,如下所示:
================================hello.jsp==========================
<body>
<h1>获取值:${requestScope.message}</h1>
</body>
==================================================================
步骤六: 启动tomcat,发布项目,在地址栏输入 http://localhost:8080/springmvc01/hello.do 进行测试。
Springmvc事情事理简析:
(1 )启动做事器,根据web.xml 的配置加载前端掌握器(也称总掌握器) DispatcherServlet 。加载(包括加载springmvc-servlet.xml)时会完成一系列的初始化动作。
(2 )根据servlet 的映射要求(上面的helloWorld 实例中针对.do 要求),并参照“掌握器配置文件(即springmvc-servlet.xml 这样的配置文件),把详细的要求分发给特定的后端掌握器进行处理(比如上例会分发给HelloWorld 掌握器进行处理)
(3 )后端掌握器调用相应的逻辑层代码,完成处理并返回视图工具(ModelAndView )给前端处理器。
(4 )前端掌握器根据后端掌握器返回的 ModelAndView 工具,并结合一些配置(后续有解释),返回一个相应的页面给客户端。