maven项目与普通dynamic web project的本质区别在于依赖管理、构建流程和目录结构的控制权归属:前者由pom.xml统一管控,后者由eclipse ide内部元数据(.settings等)硬编码控制。

用 Eclipse 创建 JSP 项目时,Maven 项目和普通 Dynamic Web Project 的本质区别
根本不在“能不能写 JSP”,而在于依赖管理、构建流程和目录结构由谁控制。Maven 项目把 pom.xml 当作唯一权威,Eclipse 只是展示层;普通项目则靠 Eclipse 自己维护 .settings、.project 和部署描述符(web.xml),所有配置都藏在 IDE 里。
创建 Maven 版 JSP 项目的实操要点
不能直接选 “Maven Project” 然后一路 Next——那样建出来是纯 Java 项目,缺 Web 容器支持。必须显式指定 Web Archetype:
- 新建 → Maven Project → 勾选 “Create a simple project (skip archetype selection)” 先取消(否则会漏掉关键步骤)
- 点击 “Next”,在 “Archetype” 页面点 “Add Archetype”,填入:
GroupId:org.apache.maven.archetypesArtifactId:maven-archetype-webappVersion:1.4(推荐,兼容 Servlet 3.0+) - 后续填写
GroupId(如com.example)、ArtifactId(如myweb),生成后手动补上src/main/webapp/WEB-INF/web.xml(Maven Archetype 默认不带,但某些容器如 Tomcat 9+ 要求存在) - 右键项目 → Properties → Project Facets → 勾选
Dynamic Web Module(版本选 3.1 或 4.0)和Java,再点 “Further configuration available…” 补全web.xml和Deployment Descriptor路径
普通 Dynamic Web Project 创建时的隐含约束
它默认绑定 Eclipse 的 WTP(Web Tools Platform),所有路径硬编码进元数据:
-
WebContent是默认 Web 根目录(不是src/main/webapp),JSP 文件放这儿才被自动识别 -
Java Build Path → Source里看不到src/main/java这类 Maven 标准路径,源码目录是src(且不可改名,改了会导致部署失败) - 添加 JSTL 依赖不能只改
pom.xml(因为没这文件),得手动下载jstl.jar和standard.jar(或jakarta.servlet.jsp.jstl),丢进WebContent/WEB-INF/lib - 修改
web.xml后,Eclipse 会立刻触发发布(哪怕没开 Auto-publish),而 Maven 项目必须执行mvn clean package才生成新 WAR
运行时常见报错与对应检查点
两者都报 HTTP Status 404 – Not Found?别急着重配 Server,先看三处:
- URL 路径是否匹配:Maven 项目部署名 =
ArtifactId(除非在pom.xml的<finalname></finalname>改过),普通项目 = 项目名(右键项目 → Properties → Web Project Settings → Context root 可改) - JSP 文件是否在正确位置:
src/main/webapp/index.jsp(Maven) vsWebContent/index.jsp(普通) - Servlet 容器是否识别到 Web 模块:右键 Server → Add and Remove… → 左侧列表必须出现项目名(灰色表示未部署成功,常因
Dynamic Web ModuleFacet 版本与 Tomcat 不匹配)
真正麻烦的是混合使用——比如在 Maven 项目里手动改 .project 文件加 WTP 配置,或者给普通项目强行塞 pom.xml。这时候 Eclipse 的构建状态、部署行为、甚至 Ctrl+Click 跳转都会错乱,修复成本远高于重头建一个符合范式的项目。










