SpringMVC简介
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。是一款面向web层的基于java实现MVC模型的轻量级web框架。
SpringMVC的优点
- 使用简单
- 性能突出
- 灵活性强
- 很好的与Spring框架整合。
三层架构
- M:数据模型层
- V:视图层
- C:控制层
使用XML方法配置SpringMVC
-
配置步骤
- 使用Maven构建web项目
- 配置web.xml文件,在文件中配置由Spring提供的
DispatcherServlet
分发器,过滤器,并且加载Spring的配置文件 - 编写Spring的配置文件。
- 使用
@Controller
与@ReuqestMapper
-
具体配置
-
配置依赖,完成项目的构建
pom.xml
<dependencies> <!-- servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!--jsp--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency> <!--spring web--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.9.RELEASE</version> </dependency> <!--spring-mvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.9.RELEASE</version> </dependency> </dependencies>
-
配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <!--配置servlet--> <servlet> <!--指定servlet的名字,一个文件中,servlet的名字不能重复--> <servlet-name>DispatcherServlet</servlet-name> <!--配置由spring提供的简介实现了HttpServlet接口的类--> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--加载springMVC配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param> </servlet> <!--配置servlet的映射路径--> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--配置过滤器解决中文乱码问题--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <!--过滤器的全限定类名--> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--设置字符编码--> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <!--设置拦截的映射路径--> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
-
编写Spring配置文件
<?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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--配置组件扫描器--> <context:component-scan base-package="com.itheima"/> <!--启用spring-mvc注解驱动--> <mvc:annotation-driven/> <!--配置默认servlet处理器,过滤静态资源不处理--> <mvc:default-servlet-handler/> </beans>
-
使用
/** * 将此类配置到Spring容器 */ @Controller public class Demo { /** * @RequestMapping:配置请求路径 * * @return:返回的字符串就是要请求的页面地址 */ @RequestMapping("/success") public String demo01() { return "/WEB-INF/page/success.jsp"; } }
-
使用注解解释
-
@Controller
:Spirng的注解,表示将此类交由Spring容器管理。 -
@RequestMapping
:是用来处理游览器发出的请求地址映射的注解,当游览器发出请求,SpinrgMVC会根据请求的地址,去寻找@RequestMapping
注解中设定的映射地址,并执行匹配注解所作用的方法。 -
服务器启动,创建Spring容器的流程
-
当服务器启动的时候会加载web.xml配置文件。
-
加载web.xml时,会读取到Spring配置文件,就会创建Spirng容器
-
在Spring配置文件中,根据配置的组件扫描
<context:component-scan base-package="com.itheima"/>
扫描对应的包。 -
读取包中所有标记为bean的类,加载为bean到Spring容器中管理。
-
读取bean中方法上标注
@RequestMapping
注解的内容
-
-
获取请求,处理请求的流程。
- 当客户端发起请求时,会被
DispatcherServlet
配置拦截所有的请求 - 将拦截到的请求路径与所有加载的
@RequestMapper
注解中配置的请求路径比较。 - 找到相匹配的路径时,执行注解对应的方法。
- 根据方法的返回值,在webapp目录中查找对应的页面,并展示。
- 当客户端发起请求时,会被