1.Spring MVC的设计是围绕DispatcherServlet展开的:
- 约定大于配置的契约式编程支持
- 支持灵活的URL到页面控制器的映射、支持Restful风格
- 模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)
2.Spring MVC工作原理
1、客户端发送请求
2、客户端发送的请求到达服务器控制器
服务器控制器由Servlet(DispatcherServlet)实现的,来完成请求的转发
3、该控制器(DispatcherServlet)调用了一个用于映射的类HandlerMapping,
该类用于将请求映射到对应的处理器来处理请求。
4、HandlerMapping将请求映射到对应的处理器Controller(相当于Action)
在Spring当中如果写一些处理器组件,一般实现Controller接口
5、在Controller中就可以调用一些Service或DAO来进行数据操作
6、ModelAndView用于存放从DAO中取出的数据,还可以存放响应视图的一些数据
7、如果想将处理结果返回给用户,那么在Spring框架中还提供一个视图组件ViewResolver,
该组件根据Controller返回的标示,找到对应的视图并传递数据信息,将响应response返回给用户
3.开发流程
XML配置文件方式:
A.添加依赖包
spring-context-4.2.8(其它spring依赖包会依赖导入)、spring-webmvc-4.2.8
B.添加xml配置文件
C.在web.xml中配置DispatcherServlet前端控制器组件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 5 id="WebApp_ID" version="3.0"> 6 <display-name>day</display-name> 7 <welcome-file-list> 8 <welcome-file>index.html</welcome-file> 9 <welcome-file>index.htm</welcome-file> 10 <welcome-file>index.jsp</welcome-file> 11 <welcome-file>default.html</welcome-file> 12 <welcome-file>default.htm</welcome-file> 13 <welcome-file>default.jsp</welcome-file> 14 </welcome-file-list> 15 <!-- spring的核心控制器 当tomcat容器启动的时候,会自动加载配置在web.xml的servlet,从而创建核心控制器 该核心控制器是处理所有的请求的匹配,并且调用其他的组件来处理请求 16 当前匹配逻辑是做后缀匹配 spring的核心控制器有一个属性是用来设置启动的时候加载哪些xml配置文件的 --> 17 <servlet> 18 <servlet-name>springmvc</servlet-name> 19 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 20 <!-- 当该对象初始化的时候会调用当前的信息来给bean赋初始化值 --> 21 <init-param> 22 <!-- 该参数是用来指定加载spring的主配置文件的 --> 23 <param-name>contextConfigLocation</param-name> 24 <param-value>classpath:application.xml</param-value> 25 </init-param> 26 </servlet> 27 28 <servlet-mapping> 29 <servlet-name>springmvc</servlet-name> 30 <!-- 匹配以 .do结尾的url --> 31 <url-pattern>*.do</url-pattern> 32 </servlet-mapping> 33 34 </web-app>
D.配置Spring HandlerMapping组件(分发web请求到Controller的映射)
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" 5 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" 7 xmlns:jpa="http://www.springframework.org/schema/data/jpa" 8 xsi:schemaLocation=" 9 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 10 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd 11 http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd 12 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd 13 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd 14 http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd 15 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 16 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd 17 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd"> 18 19 <!-- handelMapping 配置 该组件可以通过url找到对应的Controller组件 并且调用Controller对应的方法执行程序 --> 20 <bean id="handelMapping" 21 class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 22 <property name="mappings" ref="urlMaps"></property> 23 </bean> 24 25 <util:properties id="urlMaps"> 26 <prop key="/hello.do">helloController</prop> 27 <!-- 可以设置其他多个的请求和对应的Controller关系 --> 28 <prop key="/rjl.do">rjlController</prop> 29 </util:properties> 30 <!-- ################################### --> 31 <!-- 设置Controller组件的配置 必须与前面对应!!!--> 32 <bean id="helloController" class="com.rong.controller.HelloController"> 33 </bean> 34 <bean id="rjlController" class="com.rong.controller.RjlController"></bean> 35 <!-- 视图解析器设置 36 该视图解析器是由spring提供 37 prefix:前缀 38 suffix:后缀 39 视图解析器会根据Controller响应回来的视图字符串数据hello,再通过前面拼接前缀"/WEB-INF/view/"和后缀".jsp" 40 生成新字符串:/WEB-INF/view/hello.jsp 41 --> 42 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 43 <property name="prefix" value="/WEB-INF/view/"></property> 44 <property name="suffix" value=".jsp"></property> 45 </bean> 46 </beans>
E.新建Controller类并实现spring提供的Controller接口,配置该bean
1 package com.rong.controller; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.springframework.web.servlet.ModelAndView; 7 import org.springframework.web.servlet.mvc.Controller; 8 9 public class HelloController implements Controller { 10 /** 11 * 该方法类似servlet里面的service方法,会自动被调用执行 12 * ModelAndView:是模型和视图对象,里面封装了模型层数据和响应视图数据 13 * ModelAndView("hello"):该方法可以根据"hello"设置响应视图的数据,该字符串数据会由视图解析器来处理 14 * hello是viewName:视图的名字 15 */ 16 @Override 17 public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 18 System.out.println("Hello springmvc...HelloController!"); 19 ModelAndView modelAndView = new ModelAndView("hello"); 20 return modelAndView; 21 } 22 }
配置该bean到xml:id要与前面的prop的值对应
<bean id="helloController" class="com.rong.controller.HelloController"> </bean> <bean id="rjlController" class="com.rong.controller.RjlController"></bean>
F.添加ViewResolver组件配置
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/view/"></property> <property name="suffix" value=".jsp"></property> </bean>
G.新建hello.jsp页面视图组件
注解方式:
web.xml配置
<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:application.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
新建控制器类
1 package com.rong.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 /**Controller 6 * spring会将当前组件作为controller来使用 7 * 8 * RequestMapping 9 * 可以写在类或方法上面 10 * 写在类上面的匹配字符串代表模块 11 * 写在方法上面的匹配字符串代表具体哪个方法来执行请求 12 * 13 * @author Administrator 14 * 15 */ 16 17 @Controller 18 @RequestMapping("/abc") 19 public class RJLController { 20 @RequestMapping("/rjl.action") 21 //对应请求为 /项目名/abc/rjl.action 22 public String toRjl(){ 23 return "rjl"; 24 } 25 }
spring xml配置文件
<!-- 开启IOC注解扫描 --> <context:component-scan base-package="com.rong"></context:component-scan> <!-- 开启springmvc注解扫描 --> <mvc:annotation-driven></mvc:annotation-driven> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".jsp"></property> </bean>
新建网页视图。。。