SpringMVC之DispatcherServlet配置文件应该放在哪里呢
作者:鱼哥
DispatcherServlet配置文件应该放在哪里
DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。
但是,我们在搭建SpringMVC框架时,往往总是把DispatcherServlet的配置文件放错位置。
网上有的说:springDispatcherServletMVC-servlet.xml(暂且命名这么一个springDispatcherServletMVC的dispatchservlet配置文件)应该放在WEB-INF下面(与web.xml放一起);
有的说:应该直接把springDispatcherServletMVC-servlet.xml放在src文件夹下面;
有的说:在java resources下面新建一个config的resource folder,把配置文件都放在这个资源文件夹下面。那么到底哪种是正确的呢?
答案是:这个要根据web.xml中DispatcherServlet的配置声明有关系。
第一种情况
当web.xml中DispatcherServlet配置声明中,没有明确DispatcherServlet前端控制器配置文件的位置时,则系统默认DispatcherServlet前端控制器配置文件放在WEB-INF文件夹下。
例如:
web.xml部分代码如下:
<!--信息转发器,该servlet名为mvc-dispatcher(名称可修改,但必须与mvc-dispatcher-servlert.xml的前缀名相同),用于拦截请求(url-pattern为 / ,说明拦截所有请求),并交由Spring MVC的后台控制器来处理。这一项配置是必须的--> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
上面代码声明了一个命名为mvc-dispatchert的前端控制器(DispatcherServlet),并且没有指定该servlet配置文件的路径,那么系统将以默认名字mvc-dispatcher-servlet.xml在默认路径/WEB-INF下寻找它,位置不正确,名字不正确,都会报错。
第二种情况
当web.xml中DispatcherServlet配置声明中,已经明确DispatcherServlet前端控制器配置文件的位置时,则必须将前端控制器的配置文件放在src下面,不能放在webcontent(webapp)下了,当然,在src的各级子文件夹中也是可以的。
一般放在java resources下面,或者在resources下新建一个config的文件夹专门用来存放配置文件,文件结构如下:
web.xml部分代码如下:
<!--信息转发器,该servlet配置文件存放在/resources/config下,用于拦截请求(url-pattern为 / ,说明拦截所有请求),并交由Spring MVC的 后台控制器来处理。这一项配置是必须的--> <servlet> <servlet-name>mvc-dispatcherhahaha</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/mvc-dispatcher-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcherhahaha</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
上面代码中,明确了contextConfigLocation的地址为:classpath:(即在classes文件夹下面)。
并且请注意,此处我估计将配置文件中的servlet类命名为mvc-dispatcherhahaha,就是为了与配置文件名称mvc-dispatcher-servlet.xml区分开来,因此可以看出,此处命名是任意的,只需再位置参数init-param中体现出来即可。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。