1.采用Spring MVC的好处
Dispatcher servlet必须能够做如下事情:
(1)根据URI调用相应的action
(2)实例化正确的控制器类
(3)根据请求参数值来构造表单bean
(4)调用控制器对象的相应方法
(5)转向到一个视图(JSP页面)
Spring MVC是一个包含了Dispatcher servlet的MVC框架。它调用控制器方法并转发到视图。
2.Spring MVC的DispatcherServlet
Spring MVC中自带了一个开箱即用的DispatcherServlet,该Servlet的全名是org.springframework.web.servlet.DispatcherServlet。
要使用这个servlet,需要把它配置在部署描述符(web.xml文件),应用servlet和servlet-mapping元素
<servlet>
<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/config/simple-config.xml</param-value>
</init-param>
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- map all requests to the DispatcherServlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
servlet元素内的on-startup元素是可选的。如果它存在,则它将在应用程序启动时装载servlet并调用它的init方法。若它不存在,则在该servlet的第一个请求时加载。
Dispatcher servlet将使用Spring MVC诸多默认的组件。此外,初始化时,它会寻找一个在应用程序的WEB-INF目录下的配置文件,该配置文件的命名规则如下:servletName-servlet.xml。其中,servletName是在部署描述符中的Dispatcher servlet的名称。
此外,也可以把Spring MVC的配置文件放在应用程序目录中的任何地方,用servlet定义的init-param元素,以便Dispatcher servlet加载到该文件。
3.Controller接口
在Spring2.5版本前,开发一个控制器的唯一方法是实现org.springframework.web.servlet.mvc.Controller接口。这个接口公开了一个handleRequest方法。下面是该方法的签名:
ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response)
Controller接口的实现类只能处理一个单一动作(Action),而一个基于注解的控制器可以同时支持多个请求处理动作,并且无需实现任何接口。
4.第一个Spring MVC应用
部署描述符文件和Spring MVC配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>app03a</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<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/config/simple-config.xml</param-value>
</init-param>
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- map all requests to the DispatcherServlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
springmvc-servlet.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-3.0.xsd">
<bean name="/product_input.action" class="app03a.controller.InputProductController" />
<bean name="/product_save.action" class="app03a.controller.SaveProductController" />
</beans>
5.View Resolver
仅需要提供“myPage”,而不必再设置视图路径为/WEB-INF/jsp/myPage.jsp,视图解析器将会自动增加前缀和后缀。
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>