- Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Controller,将这个请求委派给Controller的某个Handler Method处理,这个Handler Method处理完这个请求,返回一个ModelAndView给Dispatcher Servlet,Dispatcher Servlet利用View Name,请求View Resolver,View Resolver返回相应的view;Dispatcher Servlet拿到View后,将Model传递给View,然后将Response返回;
- 对于每一个Controller里面的Handler Method,它可以接收以下的参数:
- HttpServletRequest或HttpServletResponse类型的对象;
- 任意类型的请求参数,使用@RequestParam标注,这些请求参数的值来自于Url中的request parameter;
- 任意类型的Path Variable,使用@PathVariable来标注,这些参数的值来自于请求Path中的一部分,在使用这个的前提是你必须在这个Handler Method标注的@RequestMapping里面使用占位符;
- Model类型的对象;你可以向这个对象里面添加attributes;
- 任意类型的Cookie属性值,使用@CookieValue标注;
- Map或者ModelMap类型的对象,Handler Method可以用来向Model里面添加属性;
- Errors或者BindingResult类型的对象,Handler Method用来访问Model对象的验证结果;
- SessionStatus类型的对象,Handler Method可以用来设置一个Session的完成;
Handler Method可以有两种类型的返回值:
- 一种是String,表示视图名;
- 另外一种是void,这要取决于Handler Method接收的参数,如果其接收了ModelAndView类型的参数,并在这个参数中设置了视图名,那么这个视图名将被以后的View Resolver所使用,否则Spring会根据在@RequestMapping中配置的URL,将URL最后那部分默认的视图名,如果@RequestMapping中配置的URL最后那部分是一个通配符(*),则会将当前Handler Method的方法名作为View Name;
- 在一个基于SpringMVC的Web应用程序里面,一般有两种配置文件:
- 一个是Web Application的配置文件(web.xml),你需要在里面指定一个或者多个servlet实例以及url到servlet的映射关系:
<servlet> <servlet-name>servlet name</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>servlet name</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
在比较大的应用程序里,指定多个DispatcherServlet实例尤其重要,这样可以让每个DispatcherServlet服务于不同的功能,拥有不同的并完全隔离的Spring Container;
- 另外一个是Spring MVC配置文件,在没指定的情况下,每一个DispatcherServlet都会去WEB-INF目录下加载一个名为{servlet name}-servlet.xml的Spring配置文件;你也可以通过一个名为contextConfigLocation的servlet parameter来指定;
你还可以指定一个Root Application的配置文件,这个配置文件中的bean会被每一个DispatcherServlet的配置文件中的bean访问或者复写,这个配置文件必须通过一个ContextLoaderListener类型的Listener来加载,你可以通过一个名为contextConfigLocation的context parameter来指定这个配置文件名,默认情况下这个文件是/WEB-INF/applicationContext.xml。
- 一个是Web Application的配置文件(web.xml),你需要在里面指定一个或者多个servlet实例以及url到servlet的映射关系:
- 在你在创建Web Application的Controller之前,你需要在Application Context配置文件中添加<context:component-scan base-package="…" />去Scan所有的标记有@Controller和@RequestMapping annotations的类;或者在你的配置类上加上@ComponentScan annotation,并设置basePackages属性;
除此之外,我们需要让Spring MVC能预注册一些Bean,所以我们需要在Application Context配置文件中加上<mvc:annotation-driven />;你也可以在你的配置类上加上@EnableWebMvc annotation达到相同的效果; - 在Handler Method返回视图名之后,你需要在Application Context配置文件中添加一个ViewResolver的Bean,这个Bean负责将一个View name解析为一个View的实现;
- 如果我们要将一个请求映射到Controller中的一个方法,我们必须要将这个方法用@RequestMapping annotation来标注,并在这个annotation中指定映射的路径,这个路径可以是一个明确的路径,也可以包含通配符,也可以包含一些Path Variable的占位符;如果在@RequestMapping annotation中没有指定路径,则默认这个Handler Method将使用其所在Controller上配置的@RequestMapping annotation中指定的路径,你也可以在@RequestMapping中限定Request Type;
时间: 2024-10-05 02:32:08