梳理注解版Spring MVC原理

本文详细介绍了如何从一个普通的Maven项目转变为war包结构,深入解析了Spring MVC注解版驱动的原理,包括Servlet3.0的启动过程、SpringServletContainerInitializer在Servlet容器初始化中的作用,以及WebApplicationInitializer如何配置Spring MVC。
摘要由CSDN通过智能技术生成


了解war包文件结构

我们都知道war包是放在Tomcat webapp目录下的,放进去我们的web项目就会被Tomcat认识,就可以运行在服务器了。

war包本质上和jar包、压缩文件没有什么太大区别,但是要让Tomcat认识我们的war包,我们必须遵循war包的文件结构。如下图:

在这里插入图片描述

  • META-INF:不用管
  • WEB-INF:主要看这里面
    • classes:这里面放的是项目中java目录编译好的class文件和项目中resources目录下的配置文件,java目录先编译为class复制到这里,resources直接复制进去,如不理解往下看
    • lib:项目中用到的jar包
    • *.jsp:如果用到JSP就直接放在WEB-INF下,记得没错的话,对classes是有保护的,对外是不可见的,毕竟是放源码和配置文件的,所以不能放在classes里面

创建Maven项目

在这我用了一个普通的java Maven项目,我将它一步步改为war项目,这样可以帮助理解项目到war包的映射关系

直接建立一个普通Maven项目,不用archetype
在这里插入图片描述
这里有java和resources文件,也就是会被放到WEB-INF\classes
在这里插入图片描述
其实这两个文件是可以指定的
然后我们可以手动添加一个webapp文件夹,该文件夹里所有的东西都会被放到war包根目录下
在这里插入图片描述
我们要将jps文件放在WEB-INF
在这里插入图片描述
在这里插入图片描述
当然也可以在这里创建webapp
可以看到上面明确将项目文件中的src\main\webapp映射到war包的根目录下

Maven打包war包流程

所以打包流程就很简单咯:

  • src\main\webapp复制到war包根目录下
  • src\main\java中的java文件编译,将编译好的文件放到war包\WEB-INF\classes
  • src\main\resources中的配置文件等,直接复制到\WEB-INF\classes
  • 将项目用到的jar包打包到\WEB-INF\lib

Spring MVC注解版驱动

pom文件配置

    <packaging>war</packaging>
    <properties>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
            </plugin>
        </plugins>
    </build>

在这个pom文件里做了这么几件事情:

  • 指定maven打包为war
  • 配置war打包插件的属性failOnMissingWebXml,指定即使没有web.xml也可以正常打包
  • 引入Spring MVC的依赖
  • 构建工具里引入了内嵌Tomcat 7(方便不用自己下载Tomcat咯)

Servlet3.0

Servlet容器启动之ServletContainerInitializer

为了实现Shared libraries & Runtimes pluggability
Servlet会在启动应用的时候会扫描每一个jar包META-INF/services/javax.servlet.ServletContainerInitializer里的内容
面指定了一个ServletContainerInitializer的实现类,Servlet会在初始化的时候运行它。

public interface ServletContainerInitializer {
   
    void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值