spring MVC之开发简单的web应用程序(一)
----------
添加依赖,创建配置文件
Spring MVC的重要组成部分是DispatcherServlet。顾名思义,它主要负责将请求分发到相应的处理程序,让他们处理这些请求。这是唯一需要在web部署描述符中配置的Servlet。它充当Spring MVC框架的前端控制器,每个Web请求都必须通过它,因此它可以管理整个请求处理流程。
当web请求被发送到Spring MVC应用程序时,DispatcherSerlvet会先接收请求,然后组织Spring的Web应用程序上下文中所配置的不同组件来处理这个请求。
1.添加依赖
为了用Spring MVC开发web应用程序,必须将spring-webmvc.jar复制到WEB-INF/lib目录下。如果是maven工程,我们
可以添加依赖,如:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.0.5.RELEASE</version> </dependency>
2.创建配置文件
对于Spring MVC应用程序而言,只需定义一个充当Spring MVC前端控制器的DispatcherServlet实例就可以了。
<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/xmlns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Court Reservation System</display-name> <servlet> <servlet-name>court</servlet-name> <servlet-class> org.springframewrok.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>court</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> </web-app>
请注意,URL的扩展名是任意的,但是为了避免将实现技术透露给web应用程序的用户,通常选择用htm,html或者类似的名称作为扩展名。
Servlet的名称有一个重要的用途,为DispatcherServlet确定要加载的Spring MVC配置文件。默认情况下,它会查找用Servlet名称加上-servlet.xml后缀作为文件名的配置文件。你也可以在contextConfigLocation这个Servlet参数中显式指定配置文件。通过上述的设置,court Servlet默认将会加载Spring MVC配置文件court-servlet.xml。这个文件应该是一个标准的Spring Bean配置文件。
为了让Spring加载court-servlet.xml之外的配置文件,必须在web.xml中定义Servlet监听ContextLoaderListener。
默认情况下,它会加载Bean配置文件/WEB-INF/applicationContext.xml,但是你可以在上下文参数contextConfigLocation中指定自己的配置文件。这里还可以指定多个配置文件,用逗号或者空格作为分隔符。
<web-app...> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/court-service.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> ... </web-app>
请注意,ContextLoaderListener将指定的Bean配置文件加载到了根应用程序上下文里,而每个DispatcherServlet
实例则将其配置文件都加载到它自己的应用程序上下文中,并引用根应用程序上下文作为它的父上下文。因此,每个DispatcherSerlvet实例加载的上下文都可以访问甚至覆盖根应用程序上下文中声明的Bean(但反过来不可以的)。然而,DispatcherServlet实例加载的上下文则无法互相访问。