SpringMVC是Spring的一个后续产品,是Spring的一个子项目。
SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC 作为 Java EE 项目表述层开发的首选方案。
SpringMVC的特点:
Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器。
DispatcherServlet前置控制器,它是一个实际的Servlet (它继承自HttpServlet 基类)。
这里用 狂神SSM教程的一张图来详细展开DispatcherServlet的执行流程(springMVC的执行流程)。

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
file–>new—>project,选择maven,next即可


右键项目名,然后选择add framework support

接着在弹出的框中勾选,然后ok即可

<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.1version>
dependency>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.3version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>

点击edit configutations配置本地的tomcat服务器

点击添加,然后找到local tomcat

默认端口号为8080,如果有相同的抢占端口号,可以进行修改(我修改为了8084)

添点击deployment然后添加,ok即可

为web项目添加lib导入项目相关jar包:
file–>project structue–>artifacts,创建lib目录,然后将项目所有的依赖jar包导入。(这里如果不导入的话,后面服务器启动会404)

好嘞项目准备结束,可以开始编写springMVC相关配置了!
编写DispatcherServelt配置文件:
<servlet>
<servlet-name>springmvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc-servlet.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>springmvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
第一个例子~~~helloWorld
package com.gothic.sunset;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView modelAndView = new ModelAndView();
String str = "HelloWorld!";
//这里和之前的session request基本一样
modelAndView.addObject("msg",str);
//页面跳转 hello即为视图名
// 被视图解析器后,会加上对应的前缀及后缀 /WEB-INF/jsp/hello.jsp 然后访问web项目的对应路径
modelAndView.setViewName("hello");
return modelAndView;
}
}
在WEB-INF下新建一个包jsp,然后新建hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
嗯哼
${msg}
在resources目录下面新建一个spirngmvc-servlet.xml文件。(根据之前的springMVC执行流程思考一下。)
配置处理映射器,处理适配器,以及视图解析器:
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
bean>
(这里因为这个例子都是根据xml配置来写的,所以需要手动配置)编写helloContorler的Bean:
<bean id="/hello" class="com.gothic.sunset.HelloController"/>
在导航栏后面手动添加hello,正确显示!

重点理解springMVC的执行流程(底层机制)(以下内容来自链接: 狂神SSM教程笔记总结)
简要分析执行流程:
DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
我们假设请求的url为 : http://localhost:8084/SpringMVC/hello
如上url拆分成三部分:
通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。
HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
Handler让具体的Controller执行。
Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
视图解析器将解析的逻辑视图名传给DispatcherServlet。
DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
最终视图呈现给用户。