web.xml中配置的DispatcherServlet。
该servelt会在服务启动的时候立即加载,并且在加载时需要一个springMVC配置文件,默认情况下,会去应用程序文件夹的web-info下找[servlet-name].xml文件,也可以把springMVC配置文件放到程序文件夹的任何地方,用init-param描述,contextConfigLocation描述的就是配置文件所在位置,这样DispatcherServlet会去加载springmvc-config.xml文件,并根据该文件信息创建一个WebApplicationContext容器对象,也成为上下文环境。这个对象继承与ApplicationContext容器,他的初始化与BeanFactory、ApplicationContext有所区别,因为WebApplicationcontext需要ServletContext实例,也就是说他必须在拥有Web容器的前提下才能完成启动SpringWeb应用上下文的工作。有了WebApplicationcontext,就可以使用spring的IOC和AOP等其他功能了。
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 定义springMvc的前端控制器 -->
<servlet>
<!-- 这段配置就是在启动服务加载springmvc的disservlet ,初始化了参数,就我画那部分-->
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
</servlet>
<!-- 让springMVC的前端控制器拦截所请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
DispatcherSerlet是前端控制器,核心功能是分发请求,分发给对应的java类,在springMVC中称为Handle
spring2.5之前控制器唯一的方法就是实现org.springframework.web.servlet.mvc.Controller接口,并且只能只处理单一动作的单一请求spring2.5之后控制器可以支持注解的方式,并且无需实现任何接口,可以支持同时处理多个请求.
基于实现Controller接口的控制器的web应用,配置springmvc-config.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置Handel,映射"/hello"请求 -->
<bean name="/hello" class="org.fkit.controller.HelloController"/>
<!-- 处理映射器将bean的name作为url进行查找,需要在配置Handel时指定name(即url) -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!-- SimpleControllerHandlerAdapter是一个处理器适配器,所有处理器适配器都要实现HandlerAdapter接口,-->
<!--通过适配器实现对handlReqeust的调用 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
</beans>
基于注解的控制器的web应用,配置springmvc-config.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!-- spring 可以自动扫描base-pack下面的包或者子包下面的java文件,如果扫描到spring的相关注解类,则把这些类注册为spring的bean -->
<context:component-scan base-package="org.fkit.controller" />
<!-- 配置annotation类型的处理器映射 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<!-- 配置annotation类型的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
</beans>
视图解析器如果配置前缀和后缀,调用视图时会自动拼接前缀和后缀
<!-- 视图解析器 -->
<bean id = "viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<!-- 前缀 -->
<property name="prefix">
<value>/WEB-INF/content/</value>
</property>
<!-- 后缀 -->
<property name="suffix">
<value>.jsp</value>
</property>
</bean>