You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Tomcat环境下Java应用的规范目录结构及相关实操问题咨询

嘿,刚学JSP和Tomcat的话,先把规范目录结构搞明白确实很重要,我来逐个解答你的问题:

Tomcat环境下Java Web应用的规范目录结构

首先给你列一下Tomcat认可的标准Web应用目录结构(这是部署到Tomcat上运行时必须遵循的):

你的Web应用部署根目录(比如myapp)
├── META-INF/       # 可选,存放应用元数据(如MANIFEST.MF,用来配置类加载、依赖等)
├── WEB-INF/        # 核心目录,Tomcat会保护这里的内容不被直接访问
│   ├── classes/    # 必须(如果有Java代码的话),存放编译后的.class文件
│   ├── lib/        # 必须(如果有依赖的话),存放应用需要的第三方JAR包
│   └── web.xml     # 可选(Servlet 3.0+支持注解配置),Web应用的部署描述符
└── 静态资源/       # 直接对外访问的资源,比如HTML、CSS、JS、图片、JSP文件等

接下来逐个解决你的疑问:

1. 那些蓝色高亮的文件夹(开发阶段的辅助目录)有什么用?

你提到的“其余文件夹”应该是指开发时项目根目录下的src/build/gradle/.mvn/这类目录吧?这些不是Tomcat运行Web应用必须的,它们是给你开发过程用的辅助目录:

  • src/:用来放你的Java源代码(.java)、JSP源文件、配置文件,编译后会自动输出到WEB-INF/classes或者构建工具的输出目录
  • build/(Gradle)或target/(Maven):构建工具编译、打包后的产物目录,里面会生成可直接部署的WAR包,或者编译好的类文件
  • gradle/.mvn/:构建工具的配置脚本目录,帮你自动化管理依赖下载、代码编译、项目打包这些繁琐的工作
  • 还有像.idea/.vscode/这类是IDE的配置目录,保存你的开发环境设置,和Tomcat运行无关

2. 能不能删除这些文件夹,把"web"作为根目录加载项目?

完全可以,但仅限部署阶段。如果只是想把Web应用部署到Tomcat上运行,你只需要把包含WEB-INF的那个web目录直接放到Tomcat的webapps文件夹下,或者打包成WAR包丢进去,这时候那些开发用的文件夹确实没用,可以删掉。

但如果还要继续开发的话,千万别删!删掉这些目录你就得手动编译Java代码、手动下载依赖JAR包放到WEB-INF/lib,手动复制类文件到WEB-INF/classes,效率极低,而且很容易出错。

3. 如何在Tomcat Web应用中使用Gradle/Maven,pom.xml放哪儿?

首先明确:pom.xml(Maven)或build.gradle(Gradle)必须放在项目的根目录,也就是和你的web目录同级的位置。

给你简单说下步骤:

Maven配置

  1. 在项目根目录打开终端,执行mvn archetype:generate,选择maven-archetype-webapp模板,它会自动生成标准的项目结构,包括pom.xmlsrc/main/webapp(就是你的web目录)
  2. pom.xml里添加<packaging>war</packaging>,这样Maven会帮你打包成WAR包;通过<dependencies>块添加你需要的框架依赖(比如Spring、MyBatis),Maven会自动下载这些依赖并在打包时放到WEB-INF/lib
  3. 部署的话:要么执行mvn package生成WAR包,手动放到Tomcat的webapps;要么添加tomcat7-maven-plugin插件,配置Tomcat地址后执行mvn tomcat7:deploy自动部署

Gradle配置

  1. 在项目根目录执行gradle init,选择"web application"类型,生成build.gradle和对应的目录结构
  2. build.gradle里应用war插件:plugins { id 'war' },然后通过dependencies块添加依赖,构建时Gradle会自动把编译后的类放到WEB-INF/classes,依赖JAR放到WEB-INF/lib
  3. 部署的话:执行gradle war生成WAR包手动部署,或者用org.gretty插件,执行gradle appRun直接启动内嵌Tomcat运行你的应用

内容的提问来源于stack exchange,提问作者Aleksey Gareev

火山引擎 最新活动