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处理时序图