«

怎么使用Idea搭建全注解式开发的SpringMVC项目

时间:2024-7-24 11:46     作者:韩俊     分类: Java


这篇“怎么使用Idea搭建全注解式开发的SpringMVC项目”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Idea搭建全注解式开发的SpringMVC项目”文章吧。

1. 创建项目

1.打开

Idea
,并点击新建项目

注:使用的是

2022.2
的商业版,该版本跟
2021.2
的商业版创建
Maven
项目不一样

2.点击右侧的新建项目 -> 取名 -> 创建

3.这样我们就创建了一个空依赖的

Maven
项目

4.打开项目 -> 右键项目名 -> 点击添加框架支持

有时会找不到,重复这个过程即可

5.勾选

Web
应用程序,然后点击确定,若出现
Web
目录,则加载完毕

这创建的是传统的

Java Web
项目:带
Web
目录的,该目录下存在
WEB-INF
目录

6.补全目录

创建完的目录结构如下, 缺失了一些目录,需要自己在

test
目录下创建
resource
目录

    web
    目录:该目录的文件能被外界访问

    WEB-INF
    目录:该目录的文件不对外展示

    web.xml
    :主要用来配置
    Filter
    Listener
    Servlet

7.在

pom.xml
文件里加入如下代码,然后刷新
Maven
,这样会在
target
里生成
war
文件

不这样做的话,工件中就没有我们通过

Maven
引入的
Jar
包,会导致项目中用到引入
Jar
包的地方出错,如下所示
如: 使用
@Controller
注解设置请求时,会报
404

<!--设置打包方式为war-->
<packaging>war</packaging>

8.或者项目结构->工件->创建

lib
目录->添加
Jar

2. 配置Tomcat

点击当前文件

点击编辑配置

点击

+

找到

Tomcat
服务器,点击下面的本地

点击配置

    点击

    Tomcat
    主目录旁的文件图标,选择你
    Tomcat
    安装到的文件夹所对应的路径,点击确定

      这个文件夹应该是

      bin
      目录的父目录

如果是正确的话,

idea
会自动帮你填写
Tomcat
基目录

配置工件:点击修复 -> 会进入一个新页面 -> 修改应用程序上下文,保留一个

即可

我们添加框架支持的时候就会创建一个相关的工件

3. 示例

1.在

pom.xml
文件中引入相关依赖

<!-- 添加springmvc依赖 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.18</version>
</dependency>
<!-- 添加servlet 依赖 -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
  <scope>provided</scope>
</dependency>

2.创建

Controller

3.在

Controller
包下创建
UserController.java
文件, 复制下面代码到该文件中

package org.example.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
    public class UserController {

        @RequestMapping("/save")
        @ResponseBody
        public String index() {
            return "index";
        }
    }

4.创建

Config

5.在

Config
包下创建一个专用于
SpringMVC
的配置类-----
SpringMvcConfig

该配置类将

@ComponentScan
注解只用于扫描
Controller

为什么要有

SpringMVC
专门的配置类, 就是为了
bean
管理起来更清晰
就是将
controller
层放在
springmvc
容器中管理, 其他如
service
层放在父容器
Spring
中管理

@Configuration
@ComponentScan("org.example.Controller")
//扫描Controller包
public class SpringMvcConfig {
}

6.在

Config
包下创建
Tomcat
启动类
SpringMvcInit

    该类要继承

    AbstractDispatcherServletInitializer

      AbstractDispatcherServletInitializer
      类:用于
      Tomcat
      启动

package org.example.Config;

import org.example.Config.SpringMvcConfig;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

//定义一个servelt容器启动的配置类,用于加载spring的配置类
public class SpringMvcInit  extends AbstractDispatcherServletInitializer {

    //1. 将controller层放在springmvc容器中,其他如service层放在父容器,bean管理起来更清晰
    //2. 也可以没有父容器,将所有bean都放在springmvc容器中
    @Override
    //加载springMVC容器的配置类
    protected WebApplicationContext createServletApplicationContext() {
        //创建SpringMVC容器
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        //加载配置类--SpringMvcConfig
        ctx.register(SpringConfig.class);
        return ctx;

    }

    @Override
    //配置哪些请求要被拦截,归属SpringMVC处理
    // /: 拦截所有请求
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    //加载Spring容器的配置类
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

2. 该类要继承`AbstractAnnotationConfigDispatcherServletInitializer`类, 用于简化开发

public class SpringMvcInit  extends AbstractAnnotationConfigDispatcherServletInitializer {

    //1. 将controller层放在springmvc容器中,其他如service层放在父容器,bean管理起来更清晰
    //2. 也可以没有父容器,将所有bean都放在springmvc容器中
    // === 上面的createRootApplicationContext()做的事
    //用来加载  springmvc容器的父容器spring的配置类
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    //加载springMVC的配置类
    //=== 上面的createServletApplicationContext()做的事
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    //配置哪些请求要被拦截,归属SpringMVC处理
    // /: 拦截所有请求
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

}

标签: java spring

热门推荐