news 2026/4/23 19:28:59

从零开始:IntelliJ IDEA搭建SSM框架的JavaWeb项目(超详细步骤+避坑指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始:IntelliJ IDEA搭建SSM框架的JavaWeb项目(超详细步骤+避坑指南)

1. 环境准备与项目创建

第一次用IntelliJ IDEA搭建SSM项目时,我对着空白的界面发呆了半小时——明明跟着教程操作,却总是卡在奇怪的报错上。后来才发现,很多问题都出在环境配置这个最初环节。下面这些细节建议拿小本本记好:

安装JDK时最容易踩的坑是环境变量配置。我遇到过明明JAVA_HOME设置正确,但运行java -version仍然报错的情况。后来发现需要在系统Path变量最前面加上%JAVA_HOME%\bin,否则系统会优先找到其他目录下的java.exe。建议用这个命令验证:

echo %JAVA_HOME%

Maven配置更是重灾区。很多教程只告诉你要修改settings.xml,但没说要先检查IDEA自带的Maven版本。我推荐直接下载官方Maven,然后在IDEA的File -> Settings -> Build -> Maven里指定本地安装路径。特别注意这两个配置项:

  • Local repository:建议改成非系统盘路径
  • User settings file:指定自定义的settings.xml位置

创建项目时有个隐藏技巧:不要直接选Maven模板,而是先选Empty Project,再右键模块选择Add Framework Support添加Maven支持。这样做的好处是项目结构更清晰,后期添加多模块时不会混乱。记得勾选这两个选项:

  • Create from archetype
  • org.apache.maven.archetypes:maven-archetype-webapp

提示:遇到"Unable to import Maven project"错误时,先检查网络代理设置。国内用户建议配置阿里云镜像,在settings.xml中加入:

<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>

2. 目录结构与基础配置

刚创建好的Maven项目就像毛坯房,需要手动改造才能住人。最让人困惑的是为什么没有java和resources文件夹——这其实是Maven的标准设计,需要我们自己搭建框架。

右键main文件夹新建目录时,有四个关键文件夹要创建:

  1. java(存放源代码)
  2. resources(配置文件)
  3. webapp/WEB-INF(前端资源)
  4. test(测试代码)

每个文件夹都要标记正确类型:右键文件夹选择Mark Directory as

  • java文件夹标记为Sources Root
  • resources标记为Resources Root
  • test标记为Test Sources Root

我强烈建议在webapp下创建这样的结构:

webapp ├── resources │ ├── css │ ├── js │ └── images └── WEB-INF └── views

这样分离静态资源和JSP文件,后期维护会轻松很多。有个容易忽略的配置是在pom.xml中加入资源过滤:

<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>

3. 依赖管理与框架整合

SSM框架整合就像组装乐高,每个零件都要严丝合缝。我在pom.xml配置上栽过最惨的跟头是版本冲突——Spring 5和MyBatis 3.4的兼容性问题让我debug了整整两天。

这是经过实战检验的依赖配置方案:

<properties> <spring.version>5.3.18</spring.version> <mybatis.version>3.5.9</mybatis.version> <mybatis.spring.version>2.0.7</mybatis.spring.version> </properties> <dependencies> <!-- Spring核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- MyBatis整合包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> </dependencies>

配置文件加载顺序是另一个关键点。我习惯这样组织:

resources ├── applicationContext.xml(主配置) ├── spring-mvc.xml(MVC配置) ├── mybatis-config.xml(MyBatis配置) └── jdbc.properties(数据库配置)

在web.xml中要特别注意监听器配置顺序:

<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

4. 数据库集成与MyBatis配置

数据库连接池的选择直接影响性能。我对比过HikariCP、Druid和Tomcat JDBC,最终推荐Druid——不仅监控功能强大,而且对国产数据库兼容性更好。配置示例:

<!-- druid数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="maxActive" value="20"/> <property name="initialSize" value="1"/> <property name="maxWait" value="60000"/> </bean>

MyBatis的SQL映射文件存放位置有讲究。我建议在resources下创建与Mapper接口同名的目录结构:

resources └── com └── example └── mapper └── UserMapper.xml

这样配置时就不需要写完整路径:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>

事务管理是SSM项目的安全气囊。Spring的声明式事务要这样配置才稳妥:

<!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 注解驱动 --> <tx:annotation-driven transaction-manager="transactionManager"/>

在Service层使用事务时要注意:

@Service @Transactional(rollbackFor = Exception.class) // 捕获所有异常回滚 public class UserServiceImpl implements UserService { // 方法内容 }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 5:19:00

Proteus仿真实战:基于STM32的波形发生器设计与调试全流程

1. 项目背景与核心功能 很多电子工程师在入门嵌入式开发时&#xff0c;都会遇到硬件调试的难题。传统方式需要购买开发板、示波器等设备&#xff0c;成本高且容易损坏元器件。而Proteus仿真软件恰好解决了这个痛点&#xff0c;它允许我们在电脑上完成从电路设计到程序调试的全过…

作者头像 李华
网站建设 2026/4/17 5:17:41

Qwen3-Reranker-4B一文详解:Qwen3-Reranker-4B在MIRACL多语言检索基准表现

Qwen3-Reranker-4B一文详解&#xff1a;Qwen3-Reranker-4B在MIRACL多语言检索基准表现 1. 引言&#xff1a;重新定义多语言检索排序 在信息爆炸的时代&#xff0c;如何从海量多语言文档中快速准确地找到最相关的内容&#xff0c;成为了一个关键挑战。传统的检索系统往往只能返…

作者头像 李华
网站建设 2026/4/17 5:16:15

从阻抗分析到精准选型:Cs/Cp与Ls/Lp测量模式实战解析

1. 阻抗测量模式的选择逻辑 在电路设计和元器件选型中&#xff0c;正确选择串联&#xff08;Cs/Ls&#xff09;或并联&#xff08;Cp/Lp&#xff09;测量模式直接影响测试结果的准确性。这就像医生给病人开药前需要先诊断病情一样&#xff0c;工程师也需要先"诊断"元…

作者头像 李华