一、Spring-MVC简介
(一)Spring-mvc的流程
(二)主要结构:红色需要自己实现。
1、DispatcherServlet:中央控制器。
1)把请求给转发到具体的控制类(即具体的Controller)。
2)需要在web.xml 中配置,类似于struts2需要配置的 StrutsPrepareAndExecuteFilter 。
2、Controller:具体处理请求的控制器。
1)类似于struts2的action ,处理具体请求与返回的信息。
2)日常功能都在Controller 中处理。可以使用xml实现(继承AbstractController),或者直接使用注解(@Controller )。
3、handlerMapping:映射处理器。
1)负责映射中央处理器转发给 Controller时的映射策略,即DispatcherServlet按什么规则去寻找需要访问的Controller。需要在spring-mvc的配置文件中配置。
2)主要有三种类型,分别为为按Controller控制器的名称、类型和简单url隐射。默认为按Controller的名称(可省略),并且可以配置多种类型,多种类型之间不会冲突。
4、ModelAndView:服务层返回的数据和视图层的封装类。
1)用来封装 Controller 需要访问的视图(view)和传输的数据(model),一般在控制器Controller 中自己实现处理。
5、ViewResolver & View:视图解析器,解析具体的视图。一般为配置为 InternalResourceViewResolver 类。
1)定义视图解析的规则,即Controller 按照怎样的规则去访问视图。
2)需要在spring-mvc的配置文件中配置,一般分为前缀与后缀。前缀:webroot到某一指定的文件夹的路径;后缀:视图名称的后缀。然后和 ModelAndView 中的view结合使用,确认具体的访问视图。
3)如访问控制器Controller 需要访问 /WEB-INF/jsp/Hello.jsp文件视图,则配置为
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"> <!-- 前缀+ viewName +后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀:webroot到某一指定的文件夹的路径 --> <property name="prefix" value="/WEB-INF/jsp/"></property> <!-- 后缀:视图名称的后缀 --> <property name="suffix" value=".jsp"></property> </bean> </span></span>
在控制器(Controller )中的ModelAndView的view可以定为 Hello 。即可成功让Controller 访问到 /WEB-INF/jsp/Hello.jsp视图。
6、Interceptors :拦截器,负责拦截我们定义的请求然后做处理工作。
1、spring-mvc的配置文件中 ,需要实现 HandlerInterceptor 接口。
2、可以实现三个方法,分别代表三个不同时机执行。
(二)需要的jar包
二、SpringMVC的实现
(一)创建spring-mvc的配置文件
1、配置中央控制器:DispatcherServlet。在web.xml中配置
2、创建spring-mvc的核心配置文件
1)文件的命名规则:中央控制器(servlet的名称)的名称+“-servlet.xml”。如 springmvc-servlet.xml ,默认位置:在WEB-INF 下,不能修改位置。
2)使用初始化参数 init-param ,灵活定义核心配置如定义配置文件位于:classpath:springmvc_annotation.xml
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"> <!-- 中央控制器 这边的name 需要与配置文件的名字保持一致--> <!-- 使用初始化参数,灵活定义核心配置 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!-- <param-value>classpath:springmvc_xml.xml</param-value> --> <param-value>classpath:springmvc_annotation.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- struts习惯使用/*,在springmvc不管用 --> <url-pattern>*.do</url-pattern> </servlet-mapping> </span></span></span></span>
(二)配置spring-mvc核心配置文件。
1、控制器:Controller 。xml方式需要,注解不需要。
2、映射处理器-handlerMapping 。可以同时配置多个映射处理器,他们之间是独立的,不相互影响。
1)按 Controller 名称映射,默认的配置,可以省略。
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> </span></span>
2)简单url的映射处理器
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello.do">firstController</prop> </props> </property> </bean> </span></span>
3)控制器的类名映射处理器
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"> <!-- 控制器的类名映射处理器 如firstController.do--> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"></bean> </span></span>
3、ViewResolver(视图解析器):
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"> <!-- 配置视图解析器 --> <!-- 前缀+ viewName +后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前缀:WebContent到某一指定的文件夹的路径 --> <property name="prefix" value="/WEB-INF/jsp/"></property> <!-- 后缀:视图名称的后缀 --> <property name="suffix" value=".jsp"></property> </bean> </span></span>
(二)XML配置实现:
1、核心配置文件:classpath:springmvc_xml.xml
2、需要的配置:controller(控制器),handlerMapping(映射处理器),ViewResolver(视图解析器)。
3、Controller (控制器):配置了一个name=hello.do的Controller(类似于struts的action)
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;"> <bean id="firstController" name="/hello.do" class="com.springmvc.xml.controller.FirstController"> </bean> </span></span></span>
2、控制器FirstController 代码实现 。
<span style="font-size:18px;"><span style="font-family:Arial;font-size:18px;"><span style="font-size:18px;">package com.springmvc.xml.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; /** * * @Title: 第一个springmvc的 Controller * @Description: * @Copyright: Copyright (c) 2015 * @Company: * * @author: SAM-SHO * @version: 1.0 * @CreateDate:Jan 22, 2015 */ public class FirstController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("hello springmvc"); //这边是前缀与后缀之间的路径,即访问 /WEB-INF/jsp/myJsp.jsp return new ModelAndView("myJsp"); } }</span></span></span>
1)继承自AbstractController类,实现handleRequestInternal()方法。
2)返回 ModelAndView 对象。
3)myJsp:是和配置好的 视图解析器 同时使用的。前置(/WEB-INF/jsp/)+ myJsp +后置(.jsp)
3、访问实现:
1)http://localhost:8080/JavaSpringMvc/hello.do。即可简单实现springmvc的访问。
(三)注解实现
1、核心配置文件:classpath:springmvc_annotation.xml
2、需要的配置:注解驱动,自动扫描、handlerMapping(映射处理器),ViewResolver(视图解析器)。
3、配置注解驱动与自动扫描。
<span style="font-size:18px;"> <!-- mvc的注解驱动 --> <mvc:annotation-driven/> <!-- 一旦有扫描器的定义mvc:annotation-driven不需要,扫描器已经有了注解驱动的功能 --> <context:component-scan base-package="com.springmvc.annotation"/> </span>
4、控制器 AnnotationController 代码:@Controller 和 @RequestMapping
<span style="font-size:18px;">@Controller @RequestMapping(value="/annotationController") public class AnnotationController { /** * 注解实现的Controller * 1、value:一般为方法名 * 2、方法的返回值,代表ModelAndView中的 view * @return */ @RequestMapping(value="/firstController.do",method=RequestMethod.GET) public String firstController() { System.out.println("使用注解开发springmvc,hello,springmvc"); return "myJsp"; //和配置的 “视图解析器” 结合为 /WEB-INF/jsp/myJsp.jsp } }</span>
1)@Controller:控制器注解。用过spring都知道。
2)@RequestMapping(value="/annotationController"): 访问路径,类似于package的功能,用于映射处理器区分不同的控制器。
①、value:表示需要匹配的url的格式。
②、 method:表示所需处理请求的http
协议(如get,post,put,delete等),可选值为RequestMethod这个enum的值。③、params:格式为”paramname=paramvalue” 或 “paramname!=paramvalue”。不带参数则表示paramvalue可以为任意值。如params
= {"param1=1","param2!=2","param3"},表示对应的url必须包括param1,param2,param3三个参数,其中param1的值必须为1,param2的值不能为2,param3的值可以为任意值。④、 headers:用来限定对应的reqeust请求的headers中必须包括的内容,例如
headers={"Connection=keep-alive"}, 表示请求头中的connection的值必须为keep-alive。
5、访问:http://localhost:8080/JavaSpringMvc/annotationController/firstController.do。需要加入类级别的@RequestMapping + 方法级别的@RequestMapping