Spring MVC的简介
基于java的实现MVC设计模式的请求驱动类型的轻量级Web框架,通过注解,无需实现任何接口,来处理浏览器或者客户端发出的请求
M 表示model 模型层(dao接口 entity实体类 service层)
V 表示 view 视图层 用于把结果展示给用户(比如jsp页面 html页面)
C 表示 controller 控制器 相当我们jdbc的servlet
SpringMvc九大组件
HandlerMapping(处理器映射器)、
HandlerAdapter(处理器适配器)、
HandlerExceptionResolver(异常处理)、
ViewResolver(视图解析器)、
RequestToViewNameTranslator(请求在查找视图名称)
LocaleResolver(区域化解析,表示所在地)、ThemeResolver(主题解析)
MultipartResolver(多部件解析器文件上传处理)、FlashMapManager(flash属性管理组件 重定向参数传递)
Spring MVC的优点和缺点
优点
1.表示层,业务逻辑层,数据访问层 三层相互独立,是松耦合架构
2.多个视图可以共享一个模型,大大的提高了代码的可重用性
3.控制器(Controller)提高了应用程序的灵活性和可配性
4.更有利于软件工程化管理
缺点
1.增加了系统结构和实现的复杂性,不适合小型的规模项目
2.视图层(view)和模型层(model)之间需要控制器做中间的连接控制,所以效率更低
如何部署第一个Spring MVC程序
导jar包
第一步就是导入spring mvc所需要的jar包 如果是maven项目的话直接引入下面所提供的依赖就ok
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<!--spring统一版本-->
<spring-version>5.2.2.RELEASE</spring-version>
<!--mybatis和spring的整合版本-->
<mybatis-spring-version>2.0.3</mybatis-spring-version>
<!--mybatis版本-->
<mybatis-version>3.5.1</mybatis-version>
</properties>
<dependencies>
<!--spring-webmvc框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- spring框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<!--spring-jdbc框架 数据源 放到spring整合-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<!--spring-oxm框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- AOP依赖-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>
<!--aopalliance依赖-->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!--mybatis框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis-version}</version>
</dependency>
<!--mybatis-spring整合-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring-version}</version>
</dependency>
<!-- mysql的驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!--dbcp的数据源-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--加载通用的日志-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- 加载log4j日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--jstl的依赖-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- standard依赖-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!--commons-fileupload依赖-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<!--commons-io依赖-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- fastjson依赖 阿里巴巴开源的json解析工具-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.2.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.2.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>classmate</artifactId>
<version>1.3.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<!--javax.servlet-api依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
编写spring mvc的配置文件
下面代码就是我们spring mvc完整的配置文件啦
<mvc:annotation-driven/> 基于注解的处理器
此处的 <context:component-scan base-package="controller"/> controller表示的是控制器的包名
=====================================================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描包 会自动扫描到@Component-->
<context:component-scan base-package="controller"/>
<!--自动注册defaultAnnotationHandlerMapping 和AnnotationMethodHandlerAdapter两个bean 自动注册controller类中的映射器 适配器-->
<mvc:annotation-driven/>
<!--2.配置视图-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/student/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
发布项目 部署tomcat
开始发布tomcat
接下来就是配置web.xml中的配置文件了
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_4_0.xsd"
version="4.0">
<!--servlet servletMapping-->
<!--DispatcherServlet表示中央处理器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 加载ApplicationContext.xml文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:ApplicationContext.xml</param-value>
</context-param>
<!--加载spring的配置文件(监听器)-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
所有的配置都ok了开始代码展示 最后我们在运行的时候只要访问的路径就可以将结果输出在我们的控制台
@Controller:将该类注入到Spring容器并将其定义为一个控制器
@RequestMapping:通过请求URL进行映射
面试常问
1.Spring MVC框架是基于哪个核心的Servlet
DispatcherServlet 负责协调整个请求的处理流程,将请求映射到相应的处理器进行处理,并最终返回响应结果给用户。
2.Spring Web MVC工作流程
SpringMvc请求处理流程:
1. 前端用户发送请求到前端控制器DispatcherServlet
2. DispatcherServlet收到请求之后调用处理映射器HandlerMapping
3. 处理映射器根据url找到对应的后端控制器handler,生成处理器对象和处理器拦截器返回前端控制器
4. 前端控制器再去调用处理适配器HandlerAdapter去调用具体的后端控制器
5. 后端控制器执行完毕之后,把ModelAndView返回给处理适配器
6. 处理适配器把ModelAndView返回给前端控制器。
7. 前端控制器调用视图解析器ViewResolver进行解析,解析完毕返回视图view
8. 前端控制器进行视图渲染,就是数据填充
9. 前端控制器向用户响应结果
3.Spring MVC体系结构
Spring MVC框架特点
1.角色划分清晰
2.配置功能灵活
3.大量的控制器接口和实现类
4.可灵活选择view层的实现技术
5.支持国际化
6.面向接口编程
7.功能丰富