spring相应jar包即源码下载地址:http://maven.springframework.org/release/org/springframework/spring/
这是手工下载,当然也可使用maven下载,如何使用spring官网上也有实例,大家可参考下。
最简入门的完整实例下载:myspring3.0.5.rar
一、搭建最简实例
步骤1、引入springmvc 需要的jar包
以上是必须要引入的jar包,当然你也可以把所有jar包都引入进去也没关系。另外commons-logging-1.1.jar、commons-lang-2.1.jar是apache的俩个工具包,需要单独下载,不过我提供的实例中已经有了,可直接用就行。
步骤2、配置主控制器(web.xml)
打开web.xml 添加mvc的主控制器servlet: org.springframework.web.servlet.DispatcherServlet
<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>spring3</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring3</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
DispatcherServlet 是spring mvc的总入口,所有请求都由它处理,由它在调度其他模块工作。<load-on-startup>设置为1表示tomcat(假设使用的是tomcat作为web服务器)容器启动时就加载并实例化DispatcherServlet 。
<url-pattern>设置为*.do,表示只处理以".do"结尾的http请求,当然你也可以设成".html"、".jsp"、或者所有请求"/"。
步骤3、配置spring的配置文件spring3-servlet.xml
在WebRoot/WEB-INF下建个spring3-servlet.xml的xml文件,注意这个xml文件的文件名是有命名规则的,其中spring3就是web.xml中配置的DispatcherServlet 的servlet-name值,后面再加上"-servlet.xml"。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 把标记了@Controller注解的类转换为bean -->
<context:component-scan base-package="com.controller" />
</beans>
该xml配置需要由spring mvc管理的bean、以及常量。<context:component-scan>标记设置了我们自己写的控制器(controller)的路径。spring启动时会将com.controller包名下的所有带有@Controller注解的类作为控制器,并把它纳入上下文的管理中。
步骤4、写控制器
根据<context:component-scan>的配置,需要建个com.controller包,在该包下任意写个控制器,如AdminController,但需要加@Controller注解.
代码
package com.controller;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class AdminController {
@RequestMapping("/toAdmin.do")
public ModelAndView toAdmin(){
Map<String,String> modal = new HashMap<String,String>();
modal.put("helloWorld", "hello 老左!");
return new ModelAndView("sayHello.jsp",modal);
}
}
注解 @RequestMapping 配置了请求路径,也就是说当http请求为/toAdmin.do时,由toAdmin()方法处理,如:http://localhost:8080/myspring3.0.5/toAdmin.do
方法最后返回个new ModelAndView("sayHello.jsp",modal);"sayHello.jsp"是返回的页面(视图),modal 存放返回给sayHello.jsp的值,在sayHello.jsp中可获取这些值。
步骤5、创建视图sayHello.jsp
<%@ 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>打招呼</title>
</head>
<body>
<%=request.getAttribute("helloWorld") %>
</body>
</html>
处理控制器返回的数据,并展示给用户,比较简单。
ok,整个搭建就完成了,在地址栏输入 http://localhost:8080/myspring3.0.5/toAdmin.do 即可。
二、不配置不等于最简配置
在步骤3中,spring3-servlet.xml文件中除了配置个控制器的搜索路径,其他的都没配置,也可以说是零配置或最简配置。但这并不等于说spring mvc在实际工作时所用到的配置也是最简配置。
正常情况下我们至少需要配置如:HandlerAdapter、HandlerMapping以及ViewResolver一些核心组件。如:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/view/" p:suffix=".jsp" />
这些核心组件都是spring工作时必须的。 但是,当我们不配置时,spring会使用自己默认的配置,默认配置可到 DispatcherServlet.properties文件找到,如下:
DispatcherServlet.properties内容:
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
HandlerMapping组件配置了俩个处理类BeanNameUrlHandlerMapping、DefaultAnnotationHandlerMapping 。HandlerAdapter组件配置了三个:HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter、AnnotationMethodHandlerAdapter。
所以默认配置并非最简配置,如果你只需要使用到注解来配置控制器,可以将spring3-servlet.xml改成如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 把标记了@Controller注解的类转换为bean -->
<context:component-scan base-package="com.controller" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
</beans>
上面的配置即可是最简配置。
当然,我们并不是一味追求最简配置,只是为了说明他的原理,使用默认的也完全没问题。
三、如何组织视图
通过ViewResolver组建可以设置视图的基础路径以及文件的前缀后缀,可以将spring3-servlet.xml改成如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 把标记了@Controller注解的类转换为bean -->
<context:component-scan base-package="com.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/view/" p:suffix=".jsp" />
</beans>
p:prefix="/view/" p:suffix=".jsp" 属性分别配置了视图文件的前缀和后缀,这样控制器AdminController就可以简写如下:
@RequestMapping("/toAdmin.do")
public ModelAndView toAdmin(){
Map<String,String> modal = new HashMap<String,String>();
modal.put("helloWorld", "hello 老左!");
return new ModelAndView("sayHello",modal);
}
去掉了sayHello.jsp的后缀。
同时还需要在WebRoot下建个view文件夹,将sayHello.jsp移到view下:

这样就将所有视图统一管理到view下。