吴裕雄--天生自然--SPRING--Spring MVC的工作原理

Spring MVC框架主要由DispatcherServlet、处理器映射、控制器、视图解析器、视图组成,其工作原理,如图所示。

吴裕雄--天生自然--SPRING--Spring MVC的工作原理

 

 

Spring MVC的工作流程如下:

1.客户端请求提交到DispatcherServlet;
2.由DispatcherServlet控制器寻找一个或多个HandlerMapping,找到处理请求的Controller;
3.DispatcherServlet将请求提交到Controller;
4.Controller调用业务逻辑处理后,返回ModelAndView;
5.DispatcherServlet寻找一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图;
6.视图负责将结果显示到客户端。
Spring MVC所有的请求都经过DispatcherServlet来统一分发。DispatcherServlet将请求分发给Controller之前,需要借助于Spring MVC提供的HandlerMapping定位到具体的Controller。       HandlerMapping接口负责完成客户请求到Controller映射。
Controller接口将处理用户请求,一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。
ViewResolver接口(视图解析器)在Web应用中负责查找View对象,从而将相应结果渲染给客户。
使用Eclipse开发Spring MVC的Web应用

1.创建Web应用ch2_1并导入JAR包

2.在web.xml文件中部署DispatcherServlet

3.创建Web应用首页

4.创建Controller类

5.创建Spring MVC的配置文件

6.应用的其他页面

7.发布并运行Spring MVC应用
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    登录页面!
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    注册页面!
</body>
</html>
<?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:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 
    <!-- 使用扫描机制,扫描控制器类 -->
    <context:component-scan base-package="controller"/>  
    <mvc:annotation-driven />
    <!-- 使用resources过滤掉不需要dispatcher servlet的资源(即静态资源,如css、js、html、images)。
    使用resources时,必须使用annotation-driven,不然resources元素会阻止任意控制器被调用。
    -->  
    <!-- 允许css目录下所有文件可见 -->
    <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>                
      <!-- 配置视图解析器 -->
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
            id="internalResourceViewResolver">
       <!-- 前缀 -->
       <property name="prefix" value="/WEB-INF/jsp/" />
       <!-- 后缀 -->
       <property name="suffix" value=".jsp" />
  </bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<web-app 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
id="WebApp_ID" 
version="4.0">
<!--配置springmvcDispatcherServlet-->
<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet> 
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    没注册的用户,请<a href="index/register">注册</a>!<br>
    已注册的用户,去<a href="index/login">登录</a>!
</body>
</html>
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * “@Controller”表示IndexController的实例是一个控制器
 * 
 * @Controller相当于@Controller("indexController") 或@Controller(value =
 *                                              "indexController")
 */
@Controller
@RequestMapping("/index")
public class IndexController {
    @RequestMapping("/login")
    public String login() {
        /**
         * login代表逻辑视图名称,需要根据Spring MVC配置 文件中internalResourceViewResolver的前缀和后缀找到对应的物理视图
         */
        return "login";
    }

    @RequestMapping("/register")
    public String register() {
        return "register";
    }
}
发布并运行Spring MVC应用

吴裕雄--天生自然--SPRING--Spring MVC的工作原理

 

 吴裕雄--天生自然--SPRING--Spring MVC的工作原理

 

 吴裕雄--天生自然--SPRING--Spring MVC的工作原理

 

 吴裕雄--天生自然--SPRING--Spring MVC的工作原理

吴裕雄--天生自然--SPRING--Spring MVC的工作原理

 

上一篇:在idea中创建maven工程,搭建springMVC框架,完成和servlet相似的操作


下一篇:SpringMVC 的工作原理