首先使用maven创建多bundle的一个工程demo-parent。
。。。。暂略
在自定义的springMVC-dispatcher-servlet.xml下,有
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<!-- 配置jsp路径前缀 -->
<property name="prefix" value="/WEB-INF/pages/"></property>
<!-- 配置URl后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
针对这块标签配置,在视图ViewResolver解析中,属性"prefix" 和"suffix"负责组装呈现视图的前缀和后缀,再配合指定的controller中的return "result";语句,那么对应关系如下:
[prefix]+[controller return]+[stuffix]="/WEB-INF/pages/"+"result"+".jsp"=/WEB-INF/pages/result.jsp;
在web.xml文件下,截取部分代码片段如下做解释说明:
<display-name>Archetype Created Web Application</display-name>
<!-- Spring应用上下文, 理解层次化的ApplicationContext -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:configs/spring/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- spring MVC的核心就是DispatcherServlet,使用springMVC的第一步就是将下面的servlet放入web.xml
servlet-name属性非常重要,默认情况下,DispatchServlet会加载这个名字-servlet.xml的文件,如下,就会加载
dispather-servlet.xml,也是在WEN-INF目录下。
-->
<servlet>
<servlet-name>springMVC-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:configs/spring/springMVC-dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 设置dispatchservlet的匹配模式,通过把dispatchservlet映射到/,默认servlet会处理所有的请求,包括静态资源 -->
<servlet-mapping>
<servlet-name>springMVC-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置说明:
使用Spring MVC,配置DispatcherServlet是第一步。DispatcherServlet是一个Servlet(这个Servlet从HttpServlet继承而来),所以可以配置多个DispatcherServlet。DispatcherServlet是前置控制器,配置在web.xml文件中的。负责拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据“指定规则”分发到目标Controller来处理。“指定规则”:是根据你使用了哪个HandlerMapping接口的实现类的不同而不同。
<servlet-name>springMVC-dispatcher</servlet-name>这个Servlet的名字是springMVC-dispatcher,可以有多个DispatcherServlet,是通过名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext上下文对象(称之为层次化的ApplicationContext)。同时保存的ServletContext中和Request对象中。
上边的web.xml为例
1.<servlet>定义了一个名字为springMVC-dispatcher的servlet,其中<load-on-startup>1</load-on-startup>是启动顺序,让这个Servlet随Servlet容器一起启动。
2.<servlet-mapping>定义了哪个servlet应该处理什么样的url匹配,上例中定义mvc-dispatcher这个servlet来处理所有匹配“/”的url,
<url-pattern>/</url-pattern>,会匹配到类似“/welcome”这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url”。(URL匹配参见我URL文章)
3.<context-param>元素含有一对参数名和参数值,用作应用的ServletContext上下文初始化参数。参数名在整个Web应用中必须是惟一的。
这里contextConfigLocation这个参数名,是被spring定义好的,会去加载spring的配置文件
在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean,此处就会寻找mvc-dispatcher-servlet.xml文件来加载spring的配置。