MVC 設計不只限於 Java Web 應用,還包括許多應用,好比前端、PHP、.NET 等語言。之因此那麼作的根本緣由在於解耦各個模塊。
MVC 是 Model、View 和 Controller 的縮寫,分別表明 Web 應用程序中的 3 種職責。
php
基於 Servlet 的 MVC 模式的具體實現以下。
html
Spring MVC 框架主要由 DispatcherServlet、處理器映射、控制器、視圖解析器、視圖組成,其工做原理如圖 1 所示。
前端
從圖 1 可總結出 Spring MVC 的工做流程以下:java
在圖 1 中包含 4 個 Spring MVC 接口,即 DispatcherServlet、HandlerMapping、Controller 和 ViewResolver。
Spring MVC 全部的請求都通過 DispatcherServlet 來統一分發,在 DispatcherServlet 將請求分發給 Controller 以前須要藉助 Spring MVC 提供的 HandlerMapping 定位到具體的 Controller。
HandlerMapping 接口負責完成客戶請求到 Controller 映射。
Controller 接口將處理用戶請求,這和 Java Servlet 扮演的角色是一致的。一旦 Controller 處理完用戶請求,將返回 ModelAndView 對象給 DispatcherServlet 前端控制器,ModelAndView 中包含了模型(Model)和視圖(View)。
從宏觀角度考慮,DispatcherServlet 是整個 Web 應用的控制器;從微觀考慮,Controller 是單個 Http 請求處理過程當中的控制器,而 ModelAndView 是 Http 請求過程當中返回的模型(Model)和視圖(View)。
ViewResolver 接口(視圖解析器)在 Web 應用中負責查找 View 對象,從而將相應結果渲染給客戶。web
5、Spring MVC使用spring
1.導入依賴api
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>javaee</groupId> <artifactId>javaee-api</artifactId> <version>5</version> </dependency>
2.建立配置文件spring-mvc
配置版:mvc
<?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"> <bean id="/first" class="com.mvc.controller.FirstController"></bean> <!--視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
註解版:app
<!--視圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> <!--包掃描儀--> <context:component-scan base-package="com.mvc"></context:component-scan> <!--開啓mvc配置--> <mvc:annotation-driven></mvc:annotation-driven>
3.配置web
<!--配置前端控制器--> <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:applicationContext-mvc.xml</param-value> </init-param> <!--初始化時機--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
4.建立控制器
配置版:
public class FirstController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView mv=new ModelAndView(); mv.addObject("user","hehe"); mv.setViewName("index"); return mv; } }
註解版:
@Controller @RequestMapping("/second") public class SecondController { @RequestMapping("/method1") public ModelAndView method1(){ ModelAndView mv=new ModelAndView(); mv.addObject("user","hehe"); mv.setViewName("index"); return mv; } @RequestMapping("/method2") public ModelAndView method2(){ ModelAndView mv=new ModelAndView(); mv.addObject("user","haha"); mv.setViewName("index"); return mv; } }
5.測試
<%@page language="java" pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %> <html> <body> <img src="/img/pro.jpg"> <h2>Hello World!</h2> ${user} </body> </html>