IDEA+Maven构建SpringMVC Web项目:从零到部署的完整指南 📅 2026/7/15 8:43:09 1. 环境准备与项目创建第一次用IDEA搭建SpringMVC项目时我对着空白的界面发呆了半小时。现在回想起来其实只要搞定几个关键步骤整个过程就像搭积木一样简单。我们先从最基础的开发环境配置说起。开发工具准备IntelliJ IDEA建议使用2023.3以上版本JDK 1.8或更高版本我用的是JDK 17Maven 3.6.3Tomcat 9.0安装完这些基础工具后记得配置环境变量。特别是Maven的settings.xml文件建议配置阿里云镜像加速依赖下载mirror idaliyunmaven/id mirrorOf*/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror创建Maven项目打开IDEA选择New Project左侧选择Maven右侧勾选Create from archetype找到maven-archetype-webapp模板找不到可以直接搜索填写GroupId如com.example和ArtifactId如demo-web确认项目路径后点击Finish这里有个新手容易踩的坑如果网络不好可能导致archetype下载失败。遇到这种情况可以直接选择不使用archetype创建完手动添加webapp目录。2. 项目结构配置刚创建好的项目结构可能不太完整我们需要手动调整。标准的SpringMVC项目应该包含以下目录src ├── main │ ├── java # 源代码目录 │ ├── resources # 配置文件目录 │ └── webapp # web资源目录 │ ├── WEB-INF │ └── index.jsp └── test # 测试代码修复目录结构右键main文件夹 → New → Directory分别创建java、resources目录右键java目录 → Mark Directory as → Sources Root右键resources目录 → Mark Directory as → Resources Root配置pom.xml 这是项目的核心配置文件我们需要添加SpringMVC相关依赖。以下是我的常用配置模板packagingwar/packaging properties spring.version5.3.23/spring.version thymeleaf.version3.1.1.RELEASE/thymeleaf.version /properties dependencies !-- Spring MVC -- dependency groupIdorg.springframework/groupId artifactIdspring-webmvc/artifactId version${spring.version}/version /dependency !-- Thymeleaf模板引擎 -- dependency groupIdorg.thymeleaf/groupId artifactIdthymeleaf-spring5/artifactId version${thymeleaf.version}/version /dependency !-- Servlet API -- dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency !-- 其他常用工具包 -- dependency groupIdcom.fasterxml.jackson.core/groupId artifactIdjackson-databind/artifactId version2.14.1/version /dependency /dependencies配置完成后记得点击右上角的Maven Reload按钮。如果依赖下载慢可以尝试关闭IDEA的Work offline模式File → Settings → Build → Maven。3. 核心配置文件编写web.xml配置 这是Java Web项目的入口文件需要放在webapp/WEB-INF目录下。主要配置两个东西字符编码过滤器解决中文乱码问题Spring MVC的前端控制器DispatcherServlet?xml version1.0 encodingUTF-8? web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd version4.0 !-- 字符编码过滤器 -- filter filter-nameencodingFilter/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value /init-param init-param param-nameforceEncoding/param-name param-valuetrue/param-value /init-param /filter filter-mapping filter-nameencodingFilter/filter-name url-pattern/*/url-pattern /filter-mapping !-- DispatcherServlet配置 -- servlet servlet-namedispatcherServlet/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 /servlet servlet-mapping servlet-namedispatcherServlet/servlet-name url-pattern//url-pattern /servlet-mapping /web-appSpring MVC配置 在resources目录下创建spring-mvc.xml文件这是Spring的核心配置文件?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xmlns:mvchttp://www.springframework.org/schema/mvc xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd !-- 组件扫描 -- context:component-scan base-packagecom.example.controller/ !-- 注解驱动 -- mvc:annotation-driven/ !-- 静态资源处理 -- mvc:resources mapping/static/** location/static// !-- Thymeleaf视图解析器 -- bean idtemplateResolver classorg.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver property nameprefix value/WEB-INF/views// property namesuffix value.html/ property nametemplateMode valueHTML/ property namecharacterEncoding valueUTF-8/ /bean bean idtemplateEngine classorg.thymeleaf.spring5.SpringTemplateEngine property nametemplateResolver reftemplateResolver/ /bean bean classorg.thymeleaf.spring5.view.ThymeleafViewResolver property nametemplateEngine reftemplateEngine/ property namecharacterEncoding valueUTF-8/ /bean /beans4. 编写业务代码创建Controller 在java目录下创建com.example.controller包然后新建HomeControllerpackage com.example.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; Controller public class HomeController { GetMapping(/) public String home(Model model) { model.addAttribute(message, 欢迎来到Spring MVC世界); return index; } }创建视图页面 在webapp/WEB-INF下创建views目录新建index.html!DOCTYPE html html xmlns:thhttp://www.thymeleaf.org head meta charsetUTF-8 titleSpring MVC Demo/title /head body h1 th:text${message}默认消息/h1 p当前时间span th:text${#dates.format(#dates.createNow(), yyyy-MM-dd HH:mm:ss)}/span/p /body /html静态资源处理 在webapp下创建static目录可以放CSS/JS/图片等资源。比如创建一个style.cssbody { font-family: Arial, sans-serif; margin: 40px; color: #333; } h1 { color: #0066cc; }5. 服务器配置与项目部署配置Tomcat点击IDEA右上角的Add Configuration点击 → Tomcat Server → Local在Deployment标签页点击 → Artifact → 选择你的war包设置Application context为/可以根据需要修改在Server标签页设置HTTP端口默认8080解决常见问题端口冲突修改server.xml中的Connector端口404错误检查Application context路径是否正确静态资源无法加载确认spring-mvc.xml中配置了 mvc:resources热部署技巧在pom.xml中添加spring-boot-devtools依赖即使不是Spring Boot项目IDEA设置Build → Compiler → 勾选Build project automatically按CtrlShiftA → 搜索Registry → 勾选compiler.automake.allow.when.app.running6. 项目优化与扩展日志配置 在resources目录下添加logback.xml?xml version1.0 encodingUTF-8? configuration appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender logger nameorg.springframework levelINFO/ logger namecom.example levelDEBUG/ root levelINFO appender-ref refCONSOLE/ /root /configuration多环境配置创建application-dev.properties和application-prod.properties在spring-mvc.xml中添加context:property-placeholder locationclasspath:application-${spring.profiles.active}.properties/在Tomcat配置的VM options中添加-Dspring.profiles.activedevRESTful API支持 在Controller中添加API方法RestController RequestMapping(/api) public class ApiController { GetMapping(/users) public ListUser getUsers() { // 实际项目中这里应该从数据库获取数据 return Arrays.asList( new User(1, 张三), new User(2, 李四) ); } PostMapping(/users) public ResponseEntityString createUser(RequestBody User user) { // 处理用户创建逻辑 return ResponseEntity.ok(用户创建成功); } }7. 实际开发中的经验分享目录结构规范 我习惯按功能模块划分包结构例如com.example ├── config # 配置类 ├── controller # 控制器 ├── service # 业务逻辑 ├── repository # 数据访问 ├── model # 数据模型 └── util # 工具类性能优化建议启用Gzip压缩在Tomcat的server.xml中配置compression静态资源缓存配置Cache-Control头使用连接池配置DBCP或HikariCP启用Spring缓存添加EnableCaching注解调试技巧使用ControllerAdvice统一处理异常配置拦截器记录请求日志使用Postman测试API接口开启Spring的debug日志查看请求处理流程第一次启动项目时我建议在DispatcherServlet的初始化方法上加个断点观察整个Spring容器的加载过程。这能帮你更好地理解Spring MVC的工作原理。8. 项目打包与部署Maven打包命令行执行mvn clean package生成的war包在target目录下如果需要排除测试mvn package -DskipTests部署到外部Tomcat将war包复制到Tomcat的webapps目录启动Tomcatbin/startup.sh或startup.bat访问http://localhost:8080/你的项目名/Docker部署 创建DockerfileFROM tomcat:9.0 COPY target/demo-web.war /usr/local/tomcat/webapps/ EXPOSE 8080 CMD [catalina.sh, run]构建并运行docker build -t demo-web . docker run -p 8080:8080 demo-web在实际项目中我通常会配置CI/CD流水线自动完成这些部署步骤。Jenkins或GitHub Actions都是不错的选择。