SpringMVC --01.2023Idea搭建全注解式开发的SpringMVC

2023-05-16

1. 创建项目

  1. 打开Idea,并点击新建项目

注:使用的是2022.2的商业版,该版本跟2021.2的商业版创建Maven项目不一样

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

Snipaste_2023-03-10_19-13-23.png

  1. 这样我们就创建了一个空依赖的Maven项目
  2. 打开项目 -> 右键项目名 -> 点击添加框架支持

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

Snipaste_2023-03-10_19-16-30.png

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

这创建的是传统的Java Web项目:带Web目录的,该目录下存在WEB-INF目录

Snipaste_2023-03-10_19-17-37.png

  1. 补全目录
  • 创建完的目录结构如下, 缺失了一些目录,需要自己在test目录下创建resource目录

Snipaste_2023-03-10_20-21-42.png

  • web目录:该目录的文件能被外界访问
  • WEB-INF目录:该目录的文件不对外展示
  • web.xml:主要用来配置FilterListenerServlet
  1. pom.xml文件里加入如下代码,然后刷新Maven,这样会在target里生成war文件

不这样做的话,工件中就没有我们通过Maven引入的Jar包,会导致项目中用到引入Jar包的地方出错,如下所示
如: 使用@Controller注解设置请求时,会报404

Snipaste_2023-03-21_18-25-14.png

<!--设置打包方式为war-->
<packaging>war</packaging>
  1. 或者项目结构->工件->创建lib目录->添加Jar

2. 配置Tomcat

  • 点击当前文件

Snipaste_2023-03-10_20-32-32.png

  • 点击编辑配置

Snipaste_2023-03-10_20-33-12.png

  • 点击+

Snipaste_2023-03-10_20-33-49.png

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

Snipaste_2023-03-10_20-33-58.png

  • 点击配置

Snipaste_2023-03-10_20-36-17.png

  • 点击Tomcat主目录旁的文件图标,选择你Tomcat安装到的文件夹所对应的路径,点击确定
    • 这个文件夹应该是bin目录的父目录

如果是正确的话,idea会自动帮你填写Tomcat基目录

Snipaste_2023-03-10_20-36-26.png

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

Snipaste_2023-03-10_20-45-47.png
Snipaste_2023-03-10_20-43-55.png

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

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>

  1. 创建Controller
  2. 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";
        }
    }

  1. 创建Config
  2. Config包下创建一个专用于SpringMVC的配置类-----SpringMvcConfig
    • 该配置类将@ComponentScan注解只用于扫描Controller

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

@Configuration
@ComponentScan("org.example.Controller")
//扫描Controller包
public class SpringMvcConfig {
}
  1. Config包下创建Tomcat启动类SpringMvcInit

    1. 该类要继承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[]{"/"};
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC --01.2023Idea搭建全注解式开发的SpringMVC 的相关文章

随机推荐

  • ToTensor() takes no arguments

    在写深度学习网络的时候如果出现如上错误 xff1a ToTensor takes no arguments 我当时的情况是transform 61 torchvision transforms ToTensor 这句代码 由于刚开始ToTe
  • 2022CANN训练营进阶班大作业1调试分享

    题目 xff1a 也就是输入一张JPEG图片 xff0c 经过DVPP解码 43 缩放 43 编码后将结果输出 xff0c 由于gitee代码仓中没有直接可以实现的代码 xff0c 不过提供了jpege xff0c resize xff0c
  • b660和b660m的区别 b660和b660m差多少

    1 xff1a B660M K D4 CPU供电部分有散热片 xff0c 有利于高负载供电的稳定性 2 xff1a B660M K D4具有2个M 2硬盘插槽 xff0c 而B660M P D4是1个M 2硬盘插槽 3 xff1a B660
  • OpenCV4遇到的报错及解决办法

    刚开始学习OpenCV4 xff0c 遇到一些错 xff0c 网上搜索错误原因和解决办法 xff0c 做个记录吧 报错 xff1a CV LOAD IMAGE COLOR 解决办法 xff1a 加入头文件 include opencv2 i
  • nginx的配置和详解

    nginx简介 nginx xff08 发音同engine x xff09 是一款轻量级的Web服务器 反向代理服务器及电子邮件 xff08 IMAP POP3 xff09 代理服务器 xff0c 并在一个BSD like协议下发行 ngi
  • The following packages have unmet dependencies问题解决

    当出现这些问题时一直追加安装即可
  • Python下载网易云音乐(云音乐飙升榜)

    最近突然想用python写一个自动下载的工具 xff0c 于是就先拿网易云来练练手 xff0c 并把过程中的心得写下来便于后面有想玩这个的童鞋们参考 首先我们分析网页源码 xff0c 找到我们想要的获取数据位置 xff1a 每一个标签对应着
  • ubuntu20.04 桌面图标显示异常及解决方法

    前言 更新至ubuntu20 04后 xff0c 出现了一些以前没有的问题 桌面上有些图标不显示 文章目录 前言一 具体表现二 原因三 解决方法总结 一 具体表现 例如有一次我在做备忘录时 我习惯地打开终端 span class token
  • Java类名的命名规则

    1 类名必须使用有意义的名字 xff1b 2 类名的每个单词的首字母必须大写 帕斯卡命名法 xff1b 3 类名不能使用数字 除了 和 之外的任何符号 xff0c 中间不能添加空格 xff0c 不能使用java关键字 xff1b 如 xff
  • firewalld高级配置

    1 IP地址伪装 masquerade xff1a 伪装 通过地址伪装 xff0c NAT设备将经过设备的包转发到指定接收方 xff0c 同时将通过的数据包的原地址更改为NAT的接口地址转发到不同步目的地 当是返回数据包是 xff0c 会将
  • Java中关于JSON格式数据的操作

    对于java格式数据的处理 xff1a 1 xff1a 先创建java实体类 xff0c 例如 xff1a public class Brand private String id private String brandName publ
  • 线程常用调度方法

    目录 一 线程等待 二 线程通知 三 线程休眠 四 请求让出CPU执行权 五 线程中断 一 线程等待 1 wait xff08 xff09 xff1a 当一个线程调用了wait xff08 xff09 方法后 xff0c 这个线程会被阻塞挂
  • centos7 安装jdk详细教程

    一 前言 本文主要介绍的是Centos7 Linux环境下安装jdk 8u333的详细图文教程 xff0c 用过linux服务器的开发人员都知道 xff0c JDK是作为日常开发常用的基础环境 xff0c 所以安装jdk是必要的 xff0c
  • KDE 美化(Manjaro)-记录

    KDE 美化 Manjaro 要想在不同的工具包之间获得相似的外观 xff0c 你很可能需要修改以下内容 xff1a 主题 包含一套风格 图标主题和颜色主题 风格 图形布置 xff0c 观感 图标主题 一套整体的图标 颜色主题 一套连接风格
  • spring容器对Bean组件的管理

    spring容器对Bean组件的管理 1 Bean对象创建时机 默认是随着容器创建 xff0c 可以使用lazy init 61 true xff08 在调用getBean创建 xff09 延迟创建 xff0c 也可以使用 lt beans
  • nginx平滑升级(添加echo功能)配置和状态监控

    添加echo模块 配置 1 先去github或者gitee中找到nginx module echo master zip包 2 将原来的ngin 1 20 1删除 重新编译安装 span class token punctuation sp
  • 字节对齐的原理和方法

    Pragma是什么 小发猫的博客 CSDN博客 pragma是什么 Pragma是什么 Pragma是什么 翻译 SkyJacker后附英文原文 译者注 一句话 xff0c pragma就是为了让编译器编译出的C或C 43 43 程序与机器
  • 【Android】Banner2.1的使用

    com youth banner Banner 2 1的使用 与前版本不同的是 xff0c 2 1版本是用的适配器 设置适配器和点击事件 banner span class token punctuation span span class
  • linux系统中安装Java环境

    Ubuntu安装Java环境 步骤1 xff1a 下载jdk 我选择的jdk版本文件 xff1a jdk 8u131 linux x64 tar gz 步骤2 xff1a 创建单独的目录 sudo mkdir usr local java
  • SpringMVC --01.2023Idea搭建全注解式开发的SpringMVC

    1 创建项目 打开Idea xff0c 并点击新建项目 注 xff1a 使用的是2022 2的商业版 xff0c 该版本跟2021 2的商业版创建Maven项目不一样 点击右侧的新建项目 gt 取名 gt 创建 这样我们就创建了一个空依赖的