概述
Spring MVC是Spring Framework的一部分,是基于java实现的轻量级的框架
架构
-
model
:数据模型,提供要展示的数据,包括数据和行为,与数据库打交道 -
view
:用户视图,呈现给用户的界面 -
controller
:控制器,接收用户请求并将请求委托给Model
执行,并将结果返回给view
建立第一个Spring MVC项目
1.建立一个maven项目
此项目作为父项目,依赖添加放在此项目中,删除掉src目录,成为一个干净的项目,在此项目基础上建立module,module也是建立maven项目,添加web框架
2.在web.xml中配置Spring MVC的核心
<!-- 配置DispatcherServlet:这个是SpringMVC的核心:请求分发器(前端控制器)-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- DispatcherServlet要绑定Spring的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 启动级别:1 服务器启动他便启动-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 在SpringMVC中 / /*
/:只去匹配所有请求,不会去匹配jsp页面
/*:匹配所有请求,包括jsp页面
-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.创建spring的配置文件
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描包,让指定包下的注解生效,统一由IOC管理-->
<context:component-scan base-package="com.cheng.controller"/>
<!-- 让Spring MVC不处理静态资源 .css .js .html .mp3....-->
<mvc:default-servlet-handler/>
<!--
支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想是@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理
而annotation-driven配置帮助我们自动完成上述两个实例的注入
-->
<mvc:annotation-driven/>
<!--视图解析器:模板引擎 Thymeleaf Freemarker-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!-- 前缀和后缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
4.创建继承与Controller的类,添加注解
package com.cheng.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
//如果在这里加入@@RequestMapping("/project"),则真实访问路径是真实访问地址:项目名/project/HelloController/hello
public class HelloController {
//真实访问地址:项目名/HelloController/hello
@RequestMapping("/hello")
public String hello(Model model){
//封装数据
model.addAttribute("msg","hello,SpringMVCAnnotation");
return "hello";//返回值会被视图解析器处理,即最终转发的页面名
}
}
5.创建转发的jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
6.配置tomcat
7.测试
当启动tomcat,并请求hello时,就会转发到一个hello.jsp
页面下,使用Spring MVC
,我们不需要再写servlet
并转发到某个页面,而是使用Spring的Controller来实现转发,减少了代码量,原因是SpringMVC
再底层帮助我们做了很多看不见的事情。
原理
1.用户发起的请求,被web.xml中
的DispatcherServlet
所获得,
2.DispatcherServlet
调用HandlerMapping
得到一个映射,就是该请求应该交给谁来执行并将这个结果交给HandlerAdapter
3.HandlerAdapter
根据结果交给具体的Controller
处理,Controller
根据此请求,寻找对应的方法执行,此方法里面实现我们需要的业务,比如添加数据,并传递给HandlerAdapter
4.HandlerAdapter将视图模型传递给DispatcherServlet
5.DispatcherServlet
调用视图解析器InternalResourceViewResolver
来解析传递回的模型,视图解析器将模型解析结果传递给DispatcherServlet
6.DispatcherServlet
将结果视图调研,并呈现给用户,在此视图中我们使用各种方法来把用户需要的数据呈现