SpringMvc的概述
- SpringMvc是一套完整的MVC框架
- SpringMvc有一套全面的MVC注解
- SpringMvc支持REST风格的URL请求
- SpringMvc采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性(基于组件开发)
SpringMvc的执行流程
SpringMvc案例
项目架构
maven依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring.versions>5.1.0.RELEASE</spring.versions>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.versions}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.versions}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.versions}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.versions}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<!-- 指定springmvc配置文件的位置 -->
<servlet-name>dispatcherServlet</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>
<!-- load-on-startup服务器启动的时候创建对象,值越小 优先级越高-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- / 拦截所有请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
index.jsp ( 首页 )
<html>
<head>
<title></title>
</head>
<body>
<a href="springmvc1">Hello Springmvc1</a>
</body>
</html>
success.jsp (跳转页)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>SpringMvc跳转成功</h2>
</body>
</html>
springmvc.xml
<?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:aop="http://www.springframework.org/schema/aop"
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-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:component-scan base-package="com.stone.mvc"/>
<!-- 配置视图解析器 InternalResourceViewResolver-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- prefix配置前置 -->
<property name="prefix" value="/WEB-INF/pages/"></property>
<!-- suffix配置后置 -->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
MyController 类 (控制类)
@Controller // 表示这个类是控制器类 必须要同这个注解,其他三个均无效
public class MyController
{
@RequestMapping("/springmvc1") // 请求映射
public String helloMvc01(){
System.out.println("helloMvc01 收到请求");
return "success"; // return当前请求映射跳转的路径
}
}
运行结果
跳转
案例运行流程 :
- 用户点击链接发送请求到tomcat服务器
- springmvc的拦截器DispatcherServlet拦截指定请求
- 查看请求路径和标有@Controller注解类中的带有@RequestMapping此注解的value值是否一致。
- 前端控制器找到了对应的@RequestMapping注解,直接利用反射执行该方法
- 执行匹配方法后会有一个返回值,该返回值被springmvc认为是需要跳转的地址
- 在进行跳转之前springmvc检查是否配置了视图解析器,如果配置了视图解析器就进行拼接,如果没有进行视图解析器直接按照返回值查找跳转地址
- 拿到页面地址,springmvc默认给我们转发到该地址。
补充点 :
在web.xml中我们通过了init-param标签中的param-value属性指定的指名springmvc配置文件得到所在位置,那么他有没有默认位置,默认的约束是什么。 如果不指定springmvc的配置文件的位置,默认配置文件的位置在WEB-INF下 ,并且文件名必须为init-param标签中param-name标签值-servlet.xml的形式。