前段时间的工作中一直使用spring boot开发,spring boot本身确实开发很快,自动配置确实帮我们省去了不少的麻烦,但是这也是一把双刃剑,如果你不是从spring mvc转过来的,很多的细节就无从了解,真正出问题的时候也会无从下手,因此我打算从零开始用maven建一个spring mvc的工程,这篇文字就记录了操作的过程。

新建maven工程

打开idea, 新建一个maven工程,工程名为SpringMvcDemo

工程建好后,在maven的pom.xml文件加入spring mvc的jar包依赖,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.liuzhijian</groupId>
    <artifactId>springmvc</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>
    </dependencies>
</project>

 

 

新增配置文件

在src/main目录下新建一个web的目录,并在web目录下再建一个WEB-INF的目录,并在该目录下新建web.xml,dispatcher-servlet.xml,  结构如下:

在idea中选择项目的module模块,新增一个web模块配置如下,注意配置好下面2个红框的选项,web.xml,dispatcher-servlet.xml具体配置见文末的附件

 

添加controller

在src/main/java后新建一个package(com.liuzhijian), 在其中新建一个controller叫AppController,代码如下:

@RestController
public class AppController {

    @PostConstruct
    public void AppController(){
        System.out.println("Initial");
    }

    @RequestMapping("/index")
    public String test(){
        return "ok";
    }
}

 

启动项目

配置用本地tomcat启动之前,现在项目配置中新增一个打包如下,记住把右边所有的jar包都加入到最后的包中

 在IDEA上面工具栏里的Run/Debug Configuration中新增Local, 选择tomcat,并在Deployment中新增Artifact,配置如下:

点击启动,访问localhost:port/index, 如果一切配置正确的话,结果返回的是ok, 完事!!

常见问题总结

  1. 打包后的WEB-INF文件夹下没有spring的配置文件,这个要注意在新建web module时对上面提到的2个红框标记的配置。
  2. 启动后报某些类找不到,这个要注意在配置项目的Artifact选项时,要记得把右边项目所有的引用包都加到左边的打包中,这样才能保证不少jar包。
  3. 遇到启动后404,后端的日志也没有报错的情况,这个其实可以在对应的bean类新增一个无参数构造函数或者@PostContruct标记的方法,启动后看看这个函数是否执行,如果没有执行,说明spring容器没有启动或者spring容器没有扫到这个包。如果要确定是不是spring容器没有启动,只需在debug模式种往DispatcherServlet类的构造函数中设置一个断点,看看断点是否执行。如果是包没有被扫到,很简单,只需要检查一下dispatcher-servlet.xml中的配置是否包括你的包路径
    <context:component-scan base-package="com.liuzhijian"/>

 

欢迎关注我的个人的博客www.zhijianliu.cn, 虚心求教,有错误还请指正轻拍,谢谢

版权声明:本文出自志健的原创文章,未经博主允许不得转载

发表评论

电子邮件地址不会被公开。