1、SpringMVC的概述
Spring MVC框架是一个开源的Java平台,为开发强大的基于JavaWeb应用程序提供全面的基础架构支持,并且使用起来非常简单容易。
 Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构,用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式使应用程序的不同组件(输入逻辑,业务逻辑和UI逻辑)合理有效的分离,同时又有效的将各组件组合一起完成功能。
**模型(Model):**封装了应用程序数据,通常它们将由POJO类组成。
**视图(View):**负责渲染模型数据,一般来说它负责生成客户端浏览器可以解释HTML输出。
**控制器(Controller):**负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。
2、SpringMVC的核心DispatcherServlet程序
在SpringMVC中有一个非常非常重要的核心组件.叫前端控制器 类名是: DispatcherServlet .
 DispatcherServlet 是一个Servlet程序. 用于接收 客户端发送过来全部的请求.然后分发给不同的资源去处理请求。
 
3、SpringMVC的第一个Hello示例程序
3.1、SpringMVC——Hello world程序的步骤:
1、创建一个动态的web工程:

2、导入需要的jar包:
spring-aop-5.2.5.RELEASE.jar
spring-beans-5.2.5.RELEASE.jar
spring-context-5.2.5.RELEASE.jar
spring-core-5.2.5.RELEASE.jar
spring-expression-5.2.5.RELEASE.jar
spring-jcl-5.2.5.RELEASE.jar
spring-web-5.2.5.RELEASE.jar
spring-webmvc-5.2.5.RELEASE.jar
3、在web.xml 中配置前端控制器:
<!--
    DispatcherServlet 是前端控制器.用于接收全部的请求.然后分发给不同资源处理.<br/>
    SpringMVC框架也需要一个 Spring 容器
-->
<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--
        配置 SpringMVC 框架 的 Spring 容器配置文件路径
    -->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
	<!--
    让前端控制器在web工程启动的时候创建,并创建Spring容器.
	-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <!--
        表示接收全部请求
    -->
    <url-pattern>/</url-pattern>
</servlet-mapping>
4、编写Controller控制器:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 *@Controller 注解作用相当于 : <br/>
 *  <bean id="helloController" class="com.atguigu.controller.HelloController" /> <br/>
 *  @Controller 表示Controller控制器 <br/>
 */
@Controller
public class HelloController {
    /**
     * @RequestMapping 可以配置一个请求地址给当前方法 <br/>
     * / 表示请求地址为: http://ip:port/工程路径/   *映射*   到web目录    <br/>
     * /hello 表示地址为: http://ip:port/工程路径/hello <br/>
     */
    @RequestMapping(value = "/hello")
    public String hello(){
        System.out.println("SpringMVC Hello 程序");
        // 返回值表示跳转的路径   ===  SpringMVC底层默认是以 请求转发 来进行页面的跳转
        return "/pages/ok.jsp";
    }
}
5、在src 源码目录下创建SpringMVC.xml配置文件
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--配置包扫描-->
    <context:component-scan base-package="com"></context:component-scan>
</beans>
6、准备页面:

Hello 程序的访问地址是: http://localhost:8080/20_springmvc_hello/hello
3.2、SpringMVC的配置文件的另一种存放方式:
SpringMVC的 配置文件 可以存放两个位置:
第一种: 放在源码目录下
需要在web.xml中去配置 配置文件的路径 , 也就是以下的配置内容:
<!--
    配置 SpringMVC 框架 的 Spring 容器配置文件路径
-->
<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springmvc.xml</param-value>
</init-param>
第二种: 放在WEB-INF目录下 ( 不需要到web.xml中去配置路径 )
规则如下: 如果SpringMVC的配置文件 放到WEB-INF目录下.则它的配置文件名必须遵守规则如下:
 SpringMVC配置文件名: <servlet-name> + -servlet.xml
前端控制器的 名称是 :
 
在WEB-INF目录下的配置文件名是 : dispatcher-servlet.xml
 
4、视图解析器
视图解析器是SpringMVC框架中一个组件 , 它可以用来解析 Controller类中 业务方法返回字符串 为 请求的视图( 视图就是页面 )。
 也就是说. 可以有一个组件用于解析 return "/pages/ok.jsp";
 有视图解析器 和 没有视图解析器的时候 , 在Controller控制器 业务 方法中返回的路径是有不同的.。
 没有视图解析器的时候:
 在业务方法中 需要返回完整的路径 ===>>>> return "/pages/ok.jsp";
 有视图解析器的时候 :
<!--
    视图解析器
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--
        完整的返回值: /pages/ok.jsp
        /pages/ 是前缀
       .jsp 是后缀
       在有前缀,后缀的情况下.我们又管文件名叫 : 视图名 ok
     -->
    <!-- prefix 表示前缀 -->
    <property name="prefix" value="/pages/" />
    <!-- suffix 表示前缀 -->
    <property name="suffix" value=".jsp" />
</bean>
那么在 Controller 控制器的业务方法中 返回值 只需要写 视图名即可。
 当有了视图解析器之后 , Controller 控制器中的业务方法的返回值 都会和 视图解析器中的前缀和后缀做 字符串拼接操作,再得到完整的路径。
@RequestMapping(value = "/hello")
public String hello(){
    System.out.println("SpringMVC Hello 程序");
    // 返回值表示跳转的路径   ===  SpringMVC底层默认是以 请求转发 来进行页面的跳转
    return "ok";
}
ok就会和前缀后缀做拼接 ====>>>> 前缀+视图名+后缀 得到完整的请求地址.
 视图名是 : ok
 前缀是 : /pages/
 后缀是 : .jsp
 完整的路径是 : /pages/ok.jsp



















