再熟悉了Spring MVC的思想之后进行项目的构建,可以更清晰的了解Spring MVC的逻辑,Spring MVC真牛逼!!
对于MVC的思想和Spring MVC的简介我在之前的博客中有介绍,这篇博客简单点,以代码为主,有很详细的注释
一、pom.xml:项目的依赖配置,CV就可以了
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spring.mvc</groupId>
<artifactId>spring</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包类型-->
<packaging>war</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.3.9.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--Spring MVC 框架依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!--Java Servlet API 3.1.0-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- JSON 处理库,让控制器可以处理请求中的JSON内容-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>
</project>
二、web.xml:这个挺重要的,要把前端控制器配好,注释很详细
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-context.xml</param-value>
</context-param>
<!--一般来说,配置文件是有很多个的,除了application-context.xml之外还有一些用户自定义的配置文件,但是Spring默认只有一个
application-context.xml-->
<!--这个监听器的作用是:如果存在用户自定义的配置文件(xxxxx.xml)这个Listener会自动那些自定义的用户文件也加载进来-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--前端控制器,前端控制器是一个Servlet-->
<!--前端控制器的配置有:视图解析器以及查找模型控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<!--Spring 自带的前端控制器-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--前端控制器是需要一个配置文件的,这个文件是用户自定义的,这里面存放的是-->
<!--这个配置文件作为前端控制器的属性文件,所以需要上面的那个ContextLoaderListener发挥作用-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servlet-context.xml</param-value>
</init-param>
</servlet>
<!--把Servlet映射成url-->
<!--这里要注意的是,前端控制器映射的路径一般都设为根路径!-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
三、servlet-context:用户自定义文件,作为前端控制器的配置文件
<?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 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--对视图的名字进行过滤-->
<!--对视图名的前缀和后缀做限定,只会解析特定名字的视图-->
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--前端控制器也需要查找控制器,所以需要包的扫描-->
<!--因为要找的是控制器,所以把所有的控制器实现类都放在一个包下,直接扫描那个包就可以了-->
<context:component-scan base-package="com.springmvc.controller"/>
<!--启动 Spring MVC 的注解功能,主动注册
HandlerMapping,HandlerAdapter,ExceptionResolver的实例-->
<mvc:annotation-driven/>
</beans>
这里面要配置视图装饰器以及后端模型处理器的查找
四、Controller:模型类,持有数据
package com.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping(value = {"/test"})
public class HelloController {
@RequestMapping(value = {"/index"},method = {RequestMethod.GET})
public ModelAndView method(){
ModelAndView modelAndView = new ModelAndView();
Map<String,String> map = new HashMap<>();
map.put("姓名","张三");
//这里的map相当于模型,后端控制器返回给前端的是:模型+视图名
modelAndView.addAllObjects(map);
//模型返回的时候一定要加入视图名,否则视图解析器是找不到视图的
modelAndView.setViewName("ViewOne");
//返回给前端控制器,前端控制器根据视图名来查找视图
return modelAndView;
}
}
这样子就可以直接出结果了
总结一下:
一、当我们在访问模型类所映射到的那个url的时候,就是/test/index的时候,前端控制器根据url查找到了相对应的模型(Controller类),然后让模型的中的方法来处理这个请求
二、模型把数据(是一个map)和视图(就是网页)的名字全部放在ModelAndView(Spring MVC底层对象,就是模型+视图)中,然后返回给前端控制器。
三、前端控制器拿到了模型和视图的名字,然后使用自己内部配置好的视图解析器在程序的目录中查找对应的视图并进行视图渲染,并返回给用户。
就是我们现在看到的这个页面了。
这篇博客代码比较多,文字说明比较少,仅供个人学习使用。