一、SpringMVC概述
1.1 WEB开发的演进
1.1.1 Model1

逻辑与展示,少量JavaBean负责数据库访问。
缺点:JSP职责不单一,View与Controller角色混杂在一起,代码耦合度高、可复用性低
1.1.2 MVC架构

什么是MVC?
MVC是一种软件设计架构。
主要作用是——降低了视图与业务逻辑间的耦合
MVC架构:
- Controller:负责接受客户端请求,并且转发到业务逻辑!由servlet充当
- Model:负责具体的业务逻辑,数据库访问(行为+数据),但是现在一般将数据与行为分离开来——
Servcice层andDao层。由JavaBean与业务类来承担 - View:展示层。页面展示,例如jsp
优点:耦合性更低,利于组件的重用
在工程项目中,往往会对Model进行更加精细化的划分:
- Service:业务逻辑层
- Dao:数据库操作层
1.2 SpringMVC是什么?有什么作用?
SpringMVC是Spring中构建WEB应用的全功能MVC模块。
SpringMVC为何是主流?因为复用Spring的Ioc、Aop等技术,更加强大!
1.3 SpringMVC与Structs2的区别
相同点
- 都是构建WEB应用的MVC框架
- 底层都是基于Servlet
不同点
- SpringMVC是基于方法设计的。Structs2是基于类,每次都会创建一个动作类,执行速度比SpringMVC更慢些
- SpringMVC是Spring的一个模块,能够与Spring无缝整合(无缝融合了Ioc、Aop),体系更加强大。
二、SpringMVC原理
2.1 SpringMVC的工作流程


- 客户端请求发送到
前端控制器(DispatcherServlet) - DispatcherServlet请求
处理器映射器(HandlerMappering)通过XML、注解去查找对应处理器(Controller),并且返回给DispatcherServlet - DispatcherServlet调用HandlerAdapter
处理配适器,来调用具体的处理器(Controller) - Controller调用具体业务逻辑,执行完毕之后,返回ModelAndView【程序员编程部分,设置返回的Model与View即可】
- 返回的ModelAndView通过DispatcherServlet传递给
ViewReslover视图解析器 - ViewReslover视图解析器解析后返回具体的View
- DispatcherServlet根据View渲染视图,并且返回响应给用户!
其中需要程序员开发的仅有:Controller 与 View 与具体 Model(逻辑+数据)。
2.2 SpringMVC重要组件
DispatcherServlet
核心组件,整个工作流程的控制中心,相当于是一个转发器。
- 负责客户端请求的接收,(View渲染),响应
- Controller调用的转发
- View解析的转发
HandlerMapping
通过XML、注解等查找对应的Controller
HandlAdapter
通过配适器模式去调用具体的Controller
ViewResolver
视图解析器,从ModelAndView中解析出具体的View
三、SpringMVC 实战
3.1 SpringMVC常用注解
3.2 SpringMVC Demo
web.xml
注册DispatcherServlet
<?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_4_0.xsd
http://xmlns.jcp.org/xml/ns/javaee "
version="4.0">
<!--1.注册DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件:【servlet-name】-servlet.xml-->
<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>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
springmvc-servlet.xml
SpringMVC配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--处理器配适器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器:DispatcherServlet给他的ModelAndView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean>
<!--配置Controller-->
<bean id="/hello" class="MyController"/>
</beans>
MyController
具体的Controller
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
/**
* @author irvin
* @date 2020/06/05
*/
public class MyController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws Exception {
ModelAndView modelAndView=new ModelAndView();
//调用具体逻辑
String res= method.invoke();
//设置返回的model 与 view
modelAndView.addObject("msg",res);
modelAndView.setViewName("hello");
return modelAndView;
}
}
hello.jsp
前端界面