资讯动态

IDEA 2021 搭建 SSM 环境完整指南:JDK、Maven、Tomcat 配置与避坑

发布时间:2026/10/21 6:03:49 来源:尧图企业网站定制
简介这份源码资源面向Java Web初学者与需要从零搭建SSM框架的开发者基于IDEA2021环境整合Spring、SpringMVC与MyBatis三大框架配套Tomcat9.0与MySQL8.0.25帮助读者理解传统SSM项目的分层结构与配置流程。压缩包共105个文件约22.34MB其中52个jar包提供框架与数据库驱动依赖28个xml文件承载Spring、MyBatis及Web配置另有java源码、jsp页面、properties配置、class编译文件等覆盖控制层、业务层、数据层与视图层的完整代码。内容预览可见BookController、BookService、BookDao等类围绕图书管理场景演示了实体、接口与实现类的组织方式便于对照学习依赖注入、事务管理与请求映射。目前已有3136人学习下载适合作为课程设计、毕业设计或框架入门的参考模板也可用于排查配置错误与理解SSM整合思路。1. 从一台刚重装系统的开发机说起IDEA 2021 搭 SSM 到底要装什么上周帮同事处理一台刚重装系统的开发机装完 IDEA 2021 就急着拉 SSM 项目跑结果 Maven 依赖飘红、Tomcat 起不来、JDK 版本对不上折腾一下午连登录页都没跑通。SSMSpring SpringMVC MyBatis这套组合在国内 JavaWeb 教学和中小项目里太常见了但 IDEA 2021 这个版本卡在一个微妙的位置它自带 Maven 3.6.3、对 JDK 8 支持最稳、对 Tomcat 9 的集成也刚好成熟可一旦你顺手装了 JDK 17 或者用了 IDEA 自带的 Maven 却不改镜像后面全是玄学报错。这篇笔记面向的是手里已经有一份 SSM 源码、准备在 IDEA 2021 里从零把环境跑起来的人——不管你是第一次搭 JavaWeb 环境的新手还是换机器重新配环境的老手下面这套顺序和参数取舍都能直接抄。我一般会先把 JDK、Maven、Tomcat 三样东西的版本锁死再动 IDEA 的任何配置顺序反了就是给自己挖坑。2. 环境准备JDK、Maven、Tomcat 的版本锁定与安装2.1 为什么 IDEA 2021 建议锁 JDK 8 而不是更高版本IDEA 2021 系列对 JDK 8 的兼容性是最完整的尤其是它内置的 Maven 和 Tomcat 集成插件在 JDK 8 下几乎不会出现模块化相关的报错。如果你装 JDK 11 或 17Spring 5.x 虽然能跑但 MyBatis 的部分旧版本在反射生成代理类时会碰到InaccessibleObjectException报错信息里带java.base/java.lang这种模块名新手根本看不懂。常见做法是直接装 JDK 8u301 或 8u311 这类后期更新版本别用 8u45 那种太老的老版本在 TLS 和证书链上会出问题。安装完 JDK 后环境变量里JAVA_HOME指向 JDK 根目录Path里加%JAVA_HOME%\bin。验证命令java -version javac -version两条命令输出的版本号必须一致如果java -version显示 1.8 而javac显示 17说明 Path 里混进了别的 JDK后面 IDEA 编译时用的编译器和运行时不匹配会出现Unsupported class file major version这种让人一头雾水的错误。2.2 Maven 3.6.3 的安装与本地仓库路径修改IDEA 2021 自带 Maven 3.6.3但我不建议直接用自带的因为它的settings.xml在 IDEA 安装目录里改镜像和本地仓库路径都不方便。自己下一个 apache-maven-3.6.3 的二进制包解压到没有中文和空格的路径比如D:\dev\apache-maven-3.6.3。解压后改conf/settings.xml两处必改!-- 本地仓库路径默认在 C 盘用户目录下重装系统就没了 -- localRepositoryD:\dev\maven-repo/localRepository !-- 阿里云镜像不配的话中央仓库拉依赖能等到你怀疑人生 -- mirror idaliyunmaven/id mirrorOf*/mirrorOf namealiyun maven/name urlhttps://maven.aliyun.com/repository/public/url /mirrorlocalRepository改到 D 盘是为了重装系统时依赖不丢mirrorOf写*表示所有仓库请求都走镜像包括插件仓库。配完在命令行跑mvn -v确认输出的 Maven home 是你解压的那个路径而不是 IDEA 自带的。2.3 Tomcat 9 的下载与端口、编码预配置SSM 项目用 Tomcat 9 就够了Tomcat 10 把javax.servlet改成了jakarta.servletSpring 5.x 的web.xml里写的还是javax命名空间直接部署会报ClassNotFoundException。下载 Tomcat 9 的 zip 包解压到D:\dev\apache-tomcat-9.0.56这类路径。解压后先改conf/server.xml里的两个地方!-- 端口改成 8081避免和本机其他服务冲突 -- Connector port8081 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 URIEncodingUTF-8 /URIEncodingUTF-8是必须加的不加的话 GET 请求里的中文参数到后台就是乱码POST 请求反而正常这种一半乱码一半正常的情况最容易让人误判成数据库编码问题。改完端口和编码Tomcat 这边的基础配置就算锁死了。3. IDEA 2021 导入 SSM 源码从项目结构到依赖拉取3.1 用 Open 而不是 Import 打开 Maven 项目IDEA 2021 里打开一个已有的 SSM 源码选File → Open直接定位到源码根目录下的pom.xmlIDEA 会自动识别成 Maven 项目。不要用Import Project那个入口是给 Eclipse 项目迁移用的走错了会生成.iml和.idea之外的多余文件后面改配置容易冲突。打开后右下角会弹一个提示问你是否自动导入 Maven 依赖选Auto Import。如果没弹手动点右侧 Maven 面板的刷新按钮。这时候观察底部进度条如果卡在Resolving dependencies不动八成是镜像没配或者settings.xml路径指错了。3.2 在 IDEA 里指定自己的 Maven 和 settings.xmlFile → Settings → Build, Execution, Deployment → Build Tools → Maven三个路径都要改配置项改成什么不改的后果Maven home path自己解压的 Maven 目录用自带 Mavensettings.xml 改了不生效User settings file自己 Maven 的 conf/settings.xml镜像和本地仓库路径不生效Local repository自动读取 settings.xml 里的路径依赖散落在 C 盘用户目录改完点Apply然后去 Maven 面板点刷新。这时候依赖会重新从阿里云镜像拉速度比默认中央仓库快一个数量级。如果之前已经用默认仓库拉过一部分本地仓库里会有.lastUpdated文件这些文件会导致 Maven 不再尝试重新下载需要手动删掉maven-repo下所有.lastUpdated后缀的文件再刷新。3.3 检查 pom.xml 里的 JDK 编译版本和依赖范围SSM 源码的pom.xml里通常有maven-compiler-plugin配置看source和target是不是 1.8plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source1.8/source target1.8/target encodingUTF-8/encoding /configuration /plugin如果这里写的是 1.7 或者 11而你的 JDK 是 8编译时会报invalid target release。encoding写 UTF-8 是为了防止源码里有中文注释时编译乱码。另外检查spring-webmvc、mybatis-spring这些核心依赖的版本Spring 5.3.x 配 MyBatis 3.5.x 是经过大量项目验证的组合如果源码里写的是 Spring 4.x 配 MyBatis 3.2.x也能跑但别混搭 Spring 6 和 MyBatis 3.4 以下的版本。4. 配置 Tomcat 运行环境部署方式与上下文路径4.1 在 IDEA 里添加 Tomcat Server 并指定部署包Run → Edit Configurations → → Tomcat Server → Local在Server标签页里点Configure指定你解压的 Tomcat 目录。然后切到Deployment标签页点 → Artifact选项目名:war exploded。选war exploded而不是war是因为 exploded 模式支持热更新改了 JSP 或静态资源不用重启 Tomcat直接刷新浏览器就能看到效果。war模式每次都要重新打包部署开发阶段效率太低。Application context默认是/${项目名}如果你想访问时不带项目名改成/但要注意这样静态资源路径和后台重定向路径都要跟着调新手建议先保持默认。4.2 解决端口占用和 JMX 端口冲突Tomcat 默认用 8080 和 8005shutdown 端口如果本机已经跑了别的 Tomcat 或者服务占了这两个端口启动时会报Address already in use。除了改server.xml里的Connector port还要在 IDEA 的 Tomcat 配置里改JMX port默认是 1099如果被占用也会启动失败。排查端口占用的命令netstat -ano | findstr 8080 tasklist | findstr PID找到占用进程的 PID 后用tasklist确认是什么程序如果是无关服务就换端口如果是之前没关干净的 Tomcat 进程就直接taskkill /F /PID PID杀掉。4.3 配置 Artifact 输出目录和热部署开关在Project Structure → Artifacts里确认war exploded的输出目录指向项目名/target/项目名这个目录是 Tomcat 实际加载的路径。如果这里指向了别的地方IDEA 编译的 class 文件和 Tomcat 加载的路径对不上改了代码不生效。On Update action和On frame deactivation两个选项我一般设成Update classes and resources这样切出 IDEA 窗口时自动同步 class 和 JSP。但注意改了 Spring 的 XML 配置文件或者web.xml之后热部署不生效必须手动重启 Tomcat因为 Spring 容器启动时就把这些配置读进内存了。5. 避坑排查SSM 在 IDEA 2021 里最常见的五类翻车5.1 现象启动报ClassNotFoundException: org.springframework.web.context.ContextLoaderListener原因pom.xml里 Spring 依赖的scope写成了provided或者war exploded的 Artifact 里没有把 Maven 依赖放进WEB-INF/lib。解决检查Project Structure → Artifacts → war exploded → WEB-INF/lib下有没有 Spring 的 jar 包。如果没有在 Artifacts 配置里右键Available Elements下的 Maven 依赖选Put into /WEB-INF/lib。同时确认pom.xml里spring-web和spring-webmvc的scope是compile或者没写 scope。5.2 现象MyBatis 的 Mapper 接口注入失败报NoSuchBeanDefinitionException原因Spring 的applicationContext.xml里没有配 Mapper 扫描或者MapperScannerConfigurer的basePackage写错了。解决确认配置文件里有这段bean classorg.mybatis.spring.mapper.MapperScannerConfigurer property namebasePackage valuecom.example.dao / property namesqlSessionFactoryBeanName valuesqlSessionFactory / /beanbasePackage要精确到 Mapper 接口所在的包不能只写父包。sqlSessionFactoryBeanName的值要和上面定义的sqlSessionFactorybean 的 id 一致不一致的话 Mapper 扫描不到 SqlSessionFactory启动就报错。5.3 现象页面 404Controller 里的方法没被映射原因spring-mvc.xml里的组件扫描路径没覆盖到 Controller 所在的包或者web.xml里DispatcherServlet的contextConfigLocation指向了错误的配置文件。解决检查spring-mvc.xml里context:component-scan base-packagecom.example.controller /的路径以及web.xml里servlet servlet-namedispatcher/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class init-param param-namecontextConfigLocation/param-name param-valueclasspath:spring-mvc.xml/param-value /init-param load-on-startup1/load-on-startup /servletclasspath:spring-mvc.xml表示从src/main/resources下加载如果文件放在WEB-INF下要改成/WEB-INF/spring-mvc.xml。5.4 现象数据库连接池启动时报Access denied for user原因jdbc.properties里的用户名密码和本机 MySQL 不一致或者 MySQL 8 的驱动类名写成了旧版的com.mysql.jdbc.Driver。解决MySQL 8 的驱动类名是com.mysql.cj.jdbc.DriverURL 里要加时区参数jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/ssm_db?useUnicodetruecharacterEncodingUTF-8serverTimezoneAsia/Shanghai jdbc.usernameroot jdbc.passwordyour_passwordserverTimezone不配的话MySQL 8 驱动会报时区错误useUnicode和characterEncoding是防止中文乱码的标配。5.5 现象IDEA 编译报Error: java: 无效的源发行版: 1.8原因Project Structure → Project里的Project language level和Modules里的Language level不一致或者Settings → Build → Compiler → Java Compiler里的Target bytecode version被改成了别的值。解决三处都检查一遍Project language level选 8Modules里每个模块的Language level也选 8Java Compiler里Target bytecode version填 1.8。三处只要有一处不对编译就报这个错。6. 装完怎么验证跑通从登录页到数据库查询的完整链路环境装完、配置改完别急着写业务代码先按下面这条链路走一遍确认每一环都通。第一步启动 Tomcat看控制台有没有Server startup in xxx ms这行日志有的话说明 Tomcat 和 Spring 容器都起来了。第二步浏览器访问http://localhost:8081/项目名/如果看到登录页或者首页说明DispatcherServlet映射和视图解析器配置正确。第三步在登录页输入一个数据库里真实存在的用户名密码点登录如果跳转到成功页面说明 Controller、Service、Mapper、数据库这条链路全通了。如果登录失败按这个顺序排查先看 IDEA 控制台有没有 SQL 打印没有的话是 MyBatis 的日志级别没开或者 Mapper 没扫描到有 SQL 但查不到数据把 SQL 复制到数据库客户端里手动执行确认表名、字段名、参数都对SQL 能查到但页面还是报错看是不是返回的 JSON 格式和前端解析对不上或者视图解析器的前后缀配错了。我一般会在mybatis-config.xml里把日志实现设成STDOUT_LOGGING这样控制台能直接看到执行的 SQL 和参数settings setting namelogImpl valueSTDOUT_LOGGING / /settings验证通过后把logImpl改回SLF4J或者LOG4J避免生产环境控制台刷太多日志。从那以后我每次搭完 SSM 环境都强制走一遍「启动日志 → 首页访问 → 登录查询」这三步不跳过任何一步因为跳过的那一步往往就是后面花两小时排查的坑。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑