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下。