1.SpringMVC简介
springMVC即Spring Web MVC,是spring web模块的一部分,是spring自己的web框架
springMVC对Servlet API 进行了完善的封装,极大的简化了开发人员的编程工作。同时springMVC也提供了友好简
便的方式让开发人员可以使用Servlet API,十分灵活。
1.1.Servlet的操作方式

1.2.springMVC的操作方式
演示:
1.创建一个maven项目
war包形式
再生成一个web.xml文件
更改一下web配置的版本
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
2.pom.xml 文件中 maven依赖和插件配置
<dependencies>
<!-- spring最基本的环境支持依赖,会传递依赖core、beans、expression、aop等基本组件,以及commons-logging、aopalliance -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- 提供了对其他第三方库的内置支持,如quartz等 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- spring处理对象关系映射的组件,传递依赖了jdbc、tx等数据库操作有关的组件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- spring对面向切面编程的支持,传递依赖了aspectjweaver -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- spring处理前端表现层的组件,即springMVC,传递依赖了web操作有关的组件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!-- 数据校验,springMVC需要用到 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
<!-- json解析,springMVC需要用到 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.0</version>
</dependency>
<!-- 文件上传,springMVC需要用到 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- 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.2</version>
<scope>provided</scope>
</dependency>
<!-- jstl依赖 -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 指定JDK编译版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
注意:springMVC是spring环境的一部分,需要spring环境的支持,需要配置spring依赖
更新maven项目
1.2.1.核心控制器——DispatcherServlet
springMVC提供了一个核心控制器(大总管)--DispatcherServlet,负责统一调用springMVC提供的其他组件,按照固定步骤处理请求,生成响应。
对于springMVC课程,我们学习的主要内容就是DispatcherServlet的调度过程(处理流程)、其他组件的作用、以及如何实现自己的handler(处理器)
在web.xml中配置DispatcherServlet

1.2.2DispatcherServlet结构
@RequestMapping注解:把普通的方法注解为一个处理器(控制器)handler
springMVC支持的注解

1.2.3.springMVC的核心配置文件
springMVC是spring的一部分,需要spring上下文的支持,所以需要一个像beans.xml一样的配置文件,我们把这个配置文件命名为dispatcher-servlet.xml(其他名称也可以)
除了以bean的方式配置、管理springMVC的组件外,springMVC的其他内容也需要在这个文件中配置
resources中配置
dispatcher-servlet.xml文件(相当于beans.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置扫描spring注解时扫描的包,同时也开启了spring注解支持 --> <context:component-scan base-package="com.zyt.web" /> <!-- 开启springMVC相关注解支持 --> <mvc:annotation-driven /> <!-- 视图解析器,视图页面的全路径为 prefix + viewName + suffix --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 文件上传解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--整个请求的最大大小,用来限制上传的文件大小--> <property name="maxUploadSize" value="20971520" /> <property name="defaultEncoding" value="UTF-8" /> <!--延迟解析,以便捕获文件大小超出限制的异常,方便生成错误提示信息--> <property name="resolveLazily" value="true"/> </bean> <!-- 资源映射 --> <mvc:resources location="/css/" mapping="/css/**" /> //这里的路径可以随便配置,webapp下的路径 <mvc:resources location="/js/" mapping="/js/**" /> <mvc:resources location="/images/" mapping="/images/**" /> </beans>
这个文件中配置的都是和web有关的内容,至于项目的其他部分,比如service、dao等也可以配置在这个文件里面。但更一般的,会初始化两个spring上下文,一个用来管理springMVC有关的内容,另一个用来管理项目其他内容(具体到springMVC和spring整合时讲)
1.2.4.额外的字符编码过滤器
springMVC还提供了一个字符编码过滤器,可以对POST请求和响应设置编码(tomcat8会自动对GET请求进行编码):
<!-- 设置post请求编码和响应编码 -->
<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>
<init-param>
<!-- 为true时也对响应进行编码 -->
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
服务器把请求交给dispatcher-servlet处理,dispatcher调用包装器里的组建进行预先的处理
包装器可以从request对象里面,调用request.getParmeter得到url中的参数
最后返回一个success,根据视图解析器,拼接前后缀跳转到相应的jsp页面

1.2.5.DispatcherServlet处理时序图


浙公网安备 33010602011771号