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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/mht123hhh/p/11240560.html