在Dynamic Web Project中,web.xml可谓是最重要的文件之一,它的配置包括:1)请求地址(url-pattern)与处理类(servlet-class)之间通过servlet-name来进行的映射(servlet-mapping)。因此,此文件的配置也关乎到我们访问网站的请求能否正常的处理。
(1)在Spring MVC项目中通过配置web.xml来拦截所有的url请求,配置如下:
mvc-dispatcher
/
(2)DispatcherServlet是Spring MVC的核心,因此我们不需要通过web.xml来拦截并分配url请求,而是将所有请求都交给Spring中的DispatcherServlet,让DispatcherServlet来进行处理,配置如下:
mvc-dispatcher
org.springframework.web.servlet.DispatcherServlet
1
(3)这里需要在“
contextConfigLocation
/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml
因此
mvc-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml
1
(4)web.xml的完整配置如下
Archetype Created WebApplication
mvc-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/configs/spring/mvc-dispatcher-servlet.xml
1
mvc-dispatcher
/
DispatcherServlet的配置文件MVC_Dispatcher_Servlet.xml(此名字可变,与上面web.xml配置文件中的
(1)启用Spring基于注释(annotation )的依赖注入(dependencyinjection,DI,关于依赖注入的讲解见小知识点),配置如下:
(2)配置Dispatcher的上下文环境,包括控制器(Controller)所在的包名,配置如下:
(3)HandlerMapping配置。这里无需配置,因为Spring MVC可以默认启动。
(4)注解驱动配置。此配置可扩充注解驱动,用于将请求参数绑定到控制器参数,即将请求的地址绑定到注解了控制器的某个类的某个方法上,详细请见控制器的编写部分。配置如下:
(5)配置加载的静态资源的路径,静态资源包括 CSS,JavaScript, images 等资源文件,配置如下:
(6)配置处理 ViewResolver 的类,可以用多个ViewResolver,使用order属性排序。配置如下:
(7)配置Spring MVC 内部的ViewResolver。因为InternalResourceViewResolver是Spring 内部的ViewResolver,所以应将其放在最后,并应配置其前缀(prefix)和后缀(suffix)属性,以便控制器返回字符串时能找到对应的视图(View)。比如这里配置了prefix 为 /WEB-INF/jsps/,suffix为 .jsp,则若方法返回一个字符串home 时,ViewResolver 会自动拼接成 /WEB-INF/jsps/home.jsp。此配置如下:
(8)配置 ResolveLazily为200*1024*1024,即200M,用于捕获文件异常,此配置我还未弄懂??
(9)完整配置如下:
编写控制器类和控制器方法时,由于需要基于注解的控制器和扩充了注解驱动,因此需要导入org.springframework.stereotype 包和org.springframework.web.bind.annotation.RequestMapping 包。
(1)编写控制器类
因为在MVCDispatcherServlet.xml配置文件中启用了基于注解(annotation)依赖注入,因此控制器类前应加上注解 @Controller。又因为在MVCDispatcherServlet.xml配置文件中扩充了注解驱动,即可以将请求参数绑定到控制器参数,因此控制器类前应加上注解@RequestMapping ,如:@RequestMapping("/hello"),则访问 localhost:8080/项目名/hello ,就会访问本类
(2)编写控制器方法
在控制器类中编写控制器方法前,只需加上注解@RequestMapping()即可,如:@RequestMapping("/mvc"),则访问 localhost:8080/项目名/hello/mvc ,就会访问本方法。然后ViewResolver根据本方法返回的参数,依据4.(7),拼接视图地址,如:本方法返回字符串 home ,则依据4.(7),拼接出/WEB-INF/jsps/home.jsp的视图(View)地址。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("hello")
public class HelloSpringMVC
{
@RequestMapping("mvc")
public String hello()
{
return "home";
}
}
(1)需要在项目的Project Facets 添加 Dynamic Web Module ,否则项目将无法添加到Tomcat容器中。
右击项目 --> 属性 -->Project Facets --> 勾选 Dynamic WebModule
(2)需要在 Deployment Assembly 中添加 Maven Dependencies ,否则项目编译时会缺失通过Maven下载的依赖包。
右击项目 --> 属性 -->Deployment Assembly --> Add --> Java Build Path Entries --> MavenDependencies --> 完成。
(3)需要在Java 构建路径中添加Server Runtime库,否则会报错。
右击项目 --> 属性 --> JavaBuild Path--> --> Library -->Add Library --> Server Runtime -->Apache Tomcat v7.0 --> 完成。
(1)依赖注入:依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者因此也称为依赖注入。