尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

IntelliJ IDEA创建Java Web项目:从Maven配置到Tomcat部署全流程

IntelliJ IDEA创建Java Web项目:从Maven配置到Tomcat部署全流程 1. 从“新建项目”到“Hello World”一个Web项目的诞生如果你刚接触Java Web开发或者从Eclipse、MyEclipse这类工具迁移过来第一次在IntelliJ IDEA里创建Web项目可能会觉得有点无从下手。IDEA的界面很现代功能也强大但它的项目创建流程和传统工具不太一样尤其是对于“动态Web项目”这个概念的处理。很多新手会卡在第一步怎么找不到那个熟悉的“Dynamic Web Project”选项或者项目建好了怎么配置Tomcat怎么连个index.jsp都跑不起来别急这种感觉我懂。我刚从Eclipse转过来时也迷糊过一阵子。IDEA的核心理念是基于构建工具如Maven、Gradle来管理项目它把“Web项目”更多地看作是一个具有特定依赖和打包结构的“Java项目”而不是一个IDE内置的特殊模板。这其实是一种更现代、更标准化的做法一旦你理解了它的逻辑会发现比老式方法清晰、高效得多。今天我就以一个从业多年的老码农的身份带你走一遍在IDEA中创建一个“传统”Web项目使用Servlet/JSP不依赖Spring Boot等框架的完整流程并分享一些我踩过的坑和总结的经验让你能快速上手把精力集中在业务逻辑上而不是环境配置。2. 项目创建前的“灵魂三问”你到底需要什么在动手点击“New Project”之前我们先停下来想三个问题。这三个问题决定了你后续的配置路径能帮你避开很多弯路。2.1 问题一你的项目最终要如何构建和打包这是最核心的问题。IDEA支持多种方式纯IDEA项目无构建工具这是最“原始”的方式依赖管理、编译、打包都靠IDEA自己。适合极小的Demo或学习Servlet/JSP基础。但项目结构不标准难以与他人协作或使用CI/CD。Apache Maven项目这是目前Java生态的绝对主流。通过一个pom.xml文件管理依赖、定义项目结构、控制构建生命周期。IDEA对Maven的支持是顶级的。对于绝大多数新项目我都强烈推荐从Maven开始。Gradle项目另一个强大的构建工具配置更简洁灵活使用Groovy或Kotlin DSL在Android和某些新项目中更流行。IDEA同样提供优秀支持。对于新手我的建议是直接选择Maven。它虽然要学一点pom.xml的配置但这是Java工程师的必备技能早学早受益。而且IDEA创建Maven项目时可以很方便地将其标记为Web项目。2.2 问题二你使用哪个版本的Servlet/JSP规范这决定了你项目的基础能力比如是否支持注解式Servlet、EL表达式版本、JSTL库版本等。通常我们选择与目标Tomcat版本相匹配的规范。例如Tomcat 10.x 对应 Servlet 6.0, JSP 3.1, EL 5.0Tomcat 9.x 对应 Servlet 4.0, JSP 2.3, EL 3.0Tomcat 8.5 对应 Servlet 3.1, JSP 2.3, EL 3.0在创建项目时我们可能还不需要精确指定但在后续添加依赖和部署配置时这个信息很重要。对于学习和一般开发选择Servlet 4.0 / JSP 2.3对应Tomcat 9是一个兼容性很好的起点。2.3 问题三你的项目目录结构期望是怎样的传统的Web项目有标准的目录结构项目根目录 ├── src │ └── main │ ├── java // 存放Java源代码Servlet, Filter, Listener等 │ ├── resources // 存放配置文件.properties, .xml等 │ └── webapp // **Web应用根目录这是关键** │ ├── WEB-INF │ │ ├── web.xml // 部署描述符可选Servlet 3.0支持注解后重要性下降 │ │ └── lib // 存放第三方JAR包Maven项目一般不需要 │ └── index.jsp // 首页 └── pom.xml // Maven项目配置文件IDEA配合Maven会自动帮你生成这个标准结构。你需要做的就是确保webapp目录被正确识别。想清楚这三个问题我们就可以开始动手了。下面我将以创建Maven管理的Web项目为主线因为这是最实用、最推荐的方式。3. 步步为营使用Maven创建你的第一个Web项目打开IDEA点击欢迎界面或菜单栏的File - New - Project...。3.1 选择项目类型与SDK在左侧项目类型列表中选择Maven。在右侧不要勾选任何 Archetype项目骨架。对于基础的Web项目我们从一张白纸开始更清晰。勾选Create from archetype通常会生成一些带有样例代码的复杂项目对于初学者理解结构反而不利。确保上方选择了正确的Project SDK。这就是你的JDK。点击下拉框如果列表为空点击Add JDK...定位到你本地安装的JDK目录例如C:\Program Files\Java\jdk-17。建议使用JDK 8、11或17这些LTS版本。点击Next。3.2 填写Maven坐标接下来是填写Maven的GAV坐标这是项目的唯一标识。GroupId 通常填写公司或组织域名的反写例如com.yourcompany。ArtifactId 项目名称例如my-first-webapp。这会成为项目根目录的名称。Version 项目版本默认1.0-SNAPSHOT即可。下面的Name和LocationIDEA会自动根据ArtifactId生成你可以按需修改项目存放路径。 点击FinishIDEA会开始创建项目并初始化Maven环境。这个过程会下载Maven的初始插件需要一点时间确保网络通畅。3.3 关键一步将Maven项目转换为Web模块项目创建完成后你会在左侧项目工具窗口看到一个标准的Maven目录结构但此时它还不是一个Web项目缺少webapp目录也无法配置Tomcat。我们需要告诉IDEA“这是一个Web应用”。在项目工具窗口中右键点击项目根目录不是src文件夹选择Add Framework Support...。在弹出的窗口中找到并勾选Web Application。注意窗口下方的选项Version 选择你需要的Web应用版本如 4.0。这会影响生成的web.xml头信息但实际功能更多由依赖和服务器决定。Create web.xml建议取消勾选。因为Servlet 3.0之后完全可以使用注解WebServlet来配置Servlet无需web.xml。这样项目会更简洁。如果你需要学习或使用web.xml进行复杂配置可以勾选。点击OK。神奇的事情发生了IDEA会自动在src/main目录下创建webapp目录并在其中生成WEB-INF目录如果勾选了创建web.xml里面还会有一个web.xml文件。同时项目结构也被标记为Web模块。实操心得很多教程会教你在创建Maven项目时直接使用maven-archetype-webapp这个骨架。我为什么不推荐因为这个骨架生成的webapp目录直接在项目根目录下不符合Maven标准目录结构src/main/webapp并且会生成一个老旧的web.xml和index.jsp。后续调整起来反而麻烦。我们这种“先建Maven项目再加Web支持”的方法生成的是最标准、最干净的结构。3.4 补全目录结构与编写第一个页面现在我们来手动补全必要的目录这能帮你加深对结构的理解。在src/main下如果还没有java和resources目录请手动创建通常Maven已经创建了java但resources可能需要自己建。创建后分别右键点击它们选择Mark Directory as - Sources Root和Resources Root。这是告诉IDEA哪里放源代码哪里放资源文件。在webapp目录下WEB-INF的同级右键New - JSP/JSPX创建一个名为index.jsp的文件。在index.jsp中写入最简单的代码% page contentTypetext/html; charsetUTF-8 pageEncodingUTF-8 % !DOCTYPE html html head titleMy First Web App/title /head body h1Hello, IDEA Web World!/h1 pServer Time: % new java.util.Date() %/p /body /html至此一个最基础的Web项目结构就准备好了。但它还不能运行因为我们还没有“发动机”——Servlet容器也就是Tomcat。4. 配置“发动机”让Tomcat驱动你的Web应用IDEA集成了对Tomcat、Jetty等服务器的支持配置起来非常直观。4.1 添加本地Tomcat运行配置点击IDEA右上角运行配置下拉框通常显示为当前配置名或Add Configuration...选择Edit Configurations...。点击左上角的号向下滚动找到Tomcat Server选择Local本地Tomcat。在右侧的配置面板中Name 给你的配置起个名字如MyTomcat 9。Application server 点击Configure...在弹出的窗口中点击选择你本地Tomcat的安装目录。你需要提前从Apache官网下载Tomcat如9.0.x版本并解压到某个路径。IDEA会自动检测版本。Warning 如果提示“No artifacts marked for deployment”先别急我们下一步解决。On ‘Update‘ action和On frame deactivation 这两个选项控制着代码更新后IDEA如何同步到Tomcat。对于开发期我习惯都设置为Update classes and resources这样修改Java类或静态资源后热更新比较及时。但修改web.xml或添加新库可能需要重启。4.2 配置部署工件Artifact这是连接项目和Tomcat的关键一步也是新手最容易出错的地方。在上一步的配置面板中切换到Deployment选项卡。点击号选择Artifact。在弹出的列表中你应该能看到你的项目名称后面跟着:war exploded。务必选择这个带exploded的选项war 会打包成一个完整的WAR文件如myapp.war再部署。war exploded 意为“展开的WAR”它直接将你的项目目录结构部署到Tomcat支持热部署和调试是开发阶段的最佳选择。添加后下方Application context可以设置你的Web应用上下文路径。默认可能是/项目名_war_exploded看起来很长。你可以简化为/根路径或/myapp。这里我们先设为/这样访问时直接用http://localhost:8080/即可。4.3 解决潜在的“404”或“无法访问”问题配置好后点击OK保存运行配置。然后点击绿色三角运行按钮启动Tomcat。如果一切顺利IDEA内置的浏览器或你默认的浏览器会自动打开但有时你可能会看到Tomcat的默认首页一只猫或者404错误而不是你的index.jsp。排查步骤检查控制台IDEA的Run工具窗口会输出Tomcat启动日志。确保没有红色的错误信息并且最后能看到类似[Tomcat] Started的信息。检查部署路径在Run配置的Deployment选项卡确认你添加的Artifact是否正确并且Application context设置无误。检查默认欢迎文件Tomcat会按照web.xml中定义的welcome-file-list顺序寻找欢迎页。我们没创建web.xmlTomcat会使用自己的默认配置通常包括index.html,index.htm,index.jsp。所以我们的index.jsp应该能被识别。如果不行你可以在webapp/WEB-INF下创建一个web.xml内容如下?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 welcome-file-list welcome-fileindex.jsp/welcome-file /welcome-file-list /web-app直接访问JSP尝试在浏览器中输入http://localhost:8080/index.jsp。如果能访问说明项目部署成功只是默认页配置问题。如果还是404请回到第2步确认Artifact是否真的部署成功。你可以查看Tomcat启动日志中关于Deploying web application的部分看是否指向了你的项目路径。踩坑记录我曾遇到过一种情况Maven的pom.xml中packaging标签被错误地写成了jar导致IDEA始终无法生成war exploded工件。确保你的pom.xml里是packagingwar/packaging。如果是父子模块项目子模块的打包方式也需要检查。5. 进阶实战添加Servlet并处理请求一个只有静态页面的Web应用是不完整的。我们来添加一个简单的Servlet体验完整的请求-响应流程。5.1 添加Servlet API依赖由于我们使用Maven所有依赖都在pom.xml中声明。打开pom.xml在dependencies标签内添加Servlet API依赖。关键点选择正确的依赖范围scope。Servlet API在运行时由Tomcat这样的服务器提供所以我们编译时需要它但打包时不需要将其打入WAR包否则可能引起版本冲突。这就要用到provided范围。dependencies !-- Servlet API -- dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope !-- 注意这里是 provided -- /dependency !-- 如果需要JSP还需要JSP API (通常Tomcat已包含) -- dependency groupIdjavax.servlet.jsp/groupId artifactIdjavax.servlet.jsp-api/artifactId version2.3.3/version scopeprovided/scope /dependency /dependencies保存pom.xmlIDEA会自动下载依赖右下角有进度提示。5.2 创建第一个Servlet使用注解在src/main/java下新建一个包例如com.example.web然后在该包下新建一个Java类命名为HelloServlet。package com.example.web; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; WebServlet(/hello) // 这就是注解配置映射URL路径为 /hello public class HelloServlet extends HttpServlet { Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置响应内容类型 resp.setContentType(text/html; charsetUTF-8); // 获取响应输出流 PrintWriter out resp.getWriter(); // 生成HTML响应 out.println(!DOCTYPE html); out.println(html); out.println(headtitleHello Servlet/title/head); out.println(body); out.println(h1这是由Servlet动态生成的页面/h1); out.println(p请求方法: req.getMethod() /p); out.println(p当前时间: new java.util.Date() /p); out.println(/body); out.println(/html); } }5.3 运行与测试由于我们使用了war exploded部署和Update classes and resources的更新策略你不需要重启Tomcat。IDEA会自动检测到类文件变化并进行热更新通常会有提示。如果热更新没生效可以点击IDEA工具栏上的“更新”按钮一个带有绿色循环箭头的图标或者直接重启Tomcat。打开浏览器访问http://localhost:8080/hello。你应该能看到Servlet生成的HTML页面。恭喜至此你已经完成了一个从项目创建、结构配置、服务器部署到编写动态Servlet的完整闭环。这比单纯跑通一个页面意义大得多你理解了Maven项目如何组织、IDEA如何与Tomcat协作、以及现代Servlet开发的基本模式。6. 项目结构与配置的深度解析掌握了基本流程后我们来深入看看几个关键配置点理解其背后的原理这样遇到问题你才能自己解决。6.1pom.xml中的打包与构建配置除了依赖pom.xml中的构建配置也至关重要。一个基础的Web项目pom.xml可能长这样?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.yourcompany/groupId artifactIdmy-first-webapp/artifactId version1.0-SNAPSHOT/version packagingwar/packaging !-- 打包方式必须是 war -- properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding maven.compiler.source11/maven.compiler.source !-- 指定Java版本 -- maven.compiler.target11/maven.compiler.target /properties dependencies !-- 你的依赖在这里 -- dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency /dependencies build !-- 插件配置 -- plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source11/source target11/target /configuration /plugin !-- 负责打包WAR的插件 -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-war-plugin/artifactId version3.3.2/version configuration !-- 指定web.xml路径如果使用注解或无web.xml可忽略 -- !-- webXmlsrc\main\webapp\WEB-INF\web.xml/webXml -- !-- 排除一些不必要的文件 -- packagingExcludesWEB-INF/classes/.gitkeep/packagingExcludes /configuration /plugin /plugins !-- 指定Web资源目录通常Maven默认就是src/main/webapp这里可以显式指定 -- resources resource directorysrc/main/resources/directory /resource /resources /build /project6.2 IDEA项目配置与模块配置当你通过Add Framework Support添加Web支持后IDEA会在项目根目录下的.idea文件夹和项目名.iml文件中记录模块信息。更重要的是它修改了项目结构Project Structure。你可以通过File - Project Structure查看Project Settings - Modules 在这里你的模块应该有一个Web的Facet。点击它可以看到Web Resource Directories指向了你的src/main/webappDeployment Descriptors可能指向你的web.xml如果有。这里配置不对会导致IDEA无法正确识别Web资源。Artifacts 这里列出了项目的输出工件。你应该能看到我们之前部署用的war exploded工件。你可以在这里管理它的输出目录、包含的内容等。一个常见问题有时从别处导入项目或者目录结构被意外改动会导致Web Facet丢失或配置错误。症状是找不到Add Framework Support选项或者无法配置Tomcat。解决方法就是进入Project Structure - Modules手动添加WebFacet并正确设置资源目录。6.3 理解“热部署”与“热更新”在开发过程中我们频繁修改代码希望立即看到效果而不重启服务器。这涉及到两个概念热更新Hot Swap 针对已加载的Java类在JVM层面替换其字节码。对于方法体内的简单修改JVM和IDEA的Debug模式支持得很好。你修改Servlet的doGet方法里的代码保存后IDEA会自动尝试热更新通常能成功。热部署Hot Deployment 指整个Web应用程序的重新部署。当你添加新的Servlet新的Java类、修改web.xml、添加新的JAR包时需要热部署。IDEA配合Tomcat通过Update classes and resources这个动作试图同时实现两者。对于资源文件.jsp,.html,.css,.js它通常是直接复制到已部署的展开目录效果是即时的。对于Java类它尝试使用JVM的热交换机制。重要提示热更新/部署不是100%可靠的。如果修改了类的方法签名、增加了新的方法或字段热更新会失败你会看到“Redefine Failed”之类的错误。这时就需要重启Restart服务器。我的习惯是进行任何结构性修改后如果页面没反应第一个尝试就是点击Tomcat的Restart按钮红色方形旁边那个绿色循环箭头。7. 从“能跑”到“好用”效率工具与配置优化基础功能跑通后我们可以让开发体验更丝滑。7.1 必备插件推荐IDEA的强大离不开插件生态系统。对于Web开发我推荐安装这几个Smart Tomcat(可选但推荐) 这是一个第三方插件它提供了一种更轻量级的Tomcat运行方式。与官方集成相比它直接使用Tomcat的catalina脚本运行部署路径映射更直接有时在解决一些奇怪的部署问题上更有奇效。你可以两种方式都试试。Maven Helper 分析pom.xml依赖冲突的神器。大型项目依赖多了冲突难免这个插件能可视化地显示冲突并快速排除。.ignore 生成和管理.gitignore文件避免把target目录、IDE配置文件等提交到版本库。Rainbow Brackets和CodeGlance 提升代码编辑体验的实用小工具。7.2 优化Tomcat启动与运行配置减少启动时间 在Tomcat运行配置的Server选项卡勾选After launch并设置为0秒默认30秒可以避免启动后等待半分钟才打开浏览器。在Startup/Connection选项卡可以适当增加Startup超时时间给复杂项目更长的启动时间。调试端口 默认的调试端口是5005。如果同时运行多个Tomcat实例需要修改端口避免冲突。JVM参数 在Startup/Connection选项卡的VM options里可以设置JVM参数。例如设置内存-Xms512m -Xmx1024m设置UTF-8编码-Dfile.encodingUTF-8。7.3 版本控制与团队协作使用Git进行版本控制时需要将一些不必要的文件排除。典型的.gitignore文件对于IDEA Java项目如下# 忽略IDE特定文件 .idea/ *.iml *.iws *.ipr # 忽略Maven构建输出 target/ **/target/ # 忽略操作系统生成的文件 .DS_Store Thumbs.db # 忽略日志文件 *.log确保将src/main/webapp/WEB-INF/lib如果存在也加入忽略因为依赖应由Maven管理。创建Web项目本身只是一个起点就像搭好了一个舞台。后续引入数据库连接池如HikariCP、ORM框架如MyBatis、MVC框架如Spring MVC才是大戏开场。但无论框架如何变迁这个由IDEA、Maven、Tomcat构成的基础开发环境以及你对标准项目目录结构和部署流程的理解将是你在Java Web开发道路上最稳固的基石。下次当你需要创建一个新的Web项目时这套流程将会像肌肉记忆一样自然。
返回列表