FEATURED · 精选文章

JavaWeb开发环境搭建全攻略:从JDK到Tomcat一次搞定

发布时间 / 2026/9/9 1:25:54
来源 / 创域科博编辑部
栏目 / 资讯中心
JavaWeb开发环境搭建全攻略:从JDK到Tomcat一次搞定 JavaWeb开发尤其是传统Servlet/JSP这路线的十个人里有八个第一周都在折腾环境。明明教程里双击一下就启动的Tomcat到了自己电脑上就是报错IDEA里跟着点了一堆选项项目结构却跟视频里长得不一样。这些事我太有体会了当年学JavaWeb的时候光环境就装了三遍第一遍稀里糊涂第二遍照猫画虎第三遍才算彻底明白每个组件到底干了什么。所以这一篇JavaWeb开发系列的开篇我想把环境准备这件事讲透不讲玄的就是一步一步告诉你为什么要这么做、这么做的目的是什么。这篇文章适合两种人一种是刚学完JavaSE、准备进军JavaWeb的新手另一种是在网上零散看过不少教程、但环境配置总是一知半解的半新手。我会把JDK、IDEA、Maven、Tomcat、MySQL这五个核心组件逐个讲清楚最后带着你跑通第一个JavaWeb页面。换句话说读完这一篇你会拥有一台能正常开发传统JavaWeb项目的电脑也理解了整条开发链路是怎么协同工作的。1. 环境准备的整体思路与版本选型1.1 为什么JavaWeb开发要先过环境这道坎很多新手以为JavaWeb难在代码其实代码就那些套路真正的拦路虎是环境。原因很简单JavaWeb开发不是单一软件的事它是一条链路你写的Java代码需要JDK编译编译出的Class文件需要一个运行容器来承载容器接收HTTP请求后调用你的代码代码处理业务时往往还要访问数据库。任何一个环节出了问题整条链路都跑不通。更麻烦的是这条链路的报错信息常常互相误导。数据库连不上会报一个ClassNotFoundExceptionTomcat启动失败可能是端口占用Maven下载依赖超时会让IDEA里的所有import标红。新手遇到这些问题往往会慌然后开始疯狂百度最后可能因为一个版本的细微差异把整台电脑的系统环境改得乱七八糟。所以我建议你换个思路环境准备不是“装一堆软件”而是“建立一条最小可用链路”。先装最核心的东西用最小的测试跑通每一环确认无误后再进下一步。这样做的好处是一旦报错你能迅速判断问题出在哪一环而不是几坨问题搅在一起没法下手。1.2 版本选型JDK、IDEA、Tomcat、MySQL怎么搭配最稳版本选型是环境准备里最容易把人绕晕的部分也是新手最爱忽略的部分。我见过太多人拿Tomcat 10跑老教程里的javax代码结果中文乱码、ClassNotFoundException翻车翻得莫名其妙。这里直接给出我多年实践下来最稳妥的一套组合组件推荐版本选型理由JDKJDK 8 或 17JDK 8是传统JavaWeb教程和大多数企业项目的主流JDK 17适合想接触新特性的人二者可以共存IDEA2023.x Ultimate社区版对Web项目支持有限旗舰版内置Java Enterprise插件和Tomcat集成学习成本低很多Maven3.8.x版本太老容易出现依赖解析问题3.8.x稳定且兼容IDEA 2023Tomcat8.5 或 9.x默认使用javax包名兼容绝大多数JavaWeb学习资料和面试考点MySQL8.x当前主流版本连接驱动和字符集支持更好不要再纠结5.7关于JDK版本我想多说一句。我知道现在很多新教程推JDK 17甚至21但JavaWeb的传统路线Servlet/JSP本质上十几年来变化不大JDK 8完全够用。而且很多公司生产环境还在用JDK 8你学会JDK 8不会跟不上时代。我自己是装了JDK 8和17两个版本IDEA里按项目切换命令行里用8作为默认。学习阶段你装一个8就够了。Tomcat版本这里要格外注意Tomcat 10开始把包名从javax.servlet换成了jakarta.servlet这是甲骨文把Java EE移交给Eclipse基金会后的一次大改动。如果你用的是常见的“黑马JavaWeb”教程基本都是基于javax包的所以选Tomcat 8.5或9.x是最省事的。等你基础扎实了再接触Tomcat 10也不迟。2. JDK与IDEA先把手上的地基打牢2.1 JDK安装与JAVA_HOME配置的生路和死路JDK安装本身没什么难度双击安装包一路Next就完事。但有三件事值得上心。第一安装目录尽量放在一个干净的路径比如D盘下的D:\Java\jdk-8路径里不要有中文、不要有空格否则某些老工具会解析出错。第二装完以后必须配环境变量这是Java开发的基本功。第三配好环境变量后务必要验证别以为装完就万事大吉。环境变量怎么配我按Windows系统来演示。右键“此电脑”→“属性”→“高级系统设置”→“环境变量”在“系统变量”区里新建变量名JAVA_HOME变量值你的JDK安装目录比如D:\Java\jdk-8然后在系统变量里找到Path双击编辑新增一条%JAVA_HOME%\bin这段路径的作用是让系统在任意目录下都能找到java.exe和javac.exe。注意很多老教程还会让你配CLASSPATH写上.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar但实际开发中根本用不上IDEA和Maven都会自动管理类路径手动配置反而容易造成混乱。我的建议是CLASSPATH不配省心。配完之后务必打开一个新的命令行窗口注意是新的旧窗口不会更新环境变量输入java -version javac -version两条命令都能输出版本号才说明JDK生效了。如果系统提示“不是内部或外部命令”八成是Path配置有误或者你这台机器上还残留了其他Java版本的环境变量检查一下再重开窗口验证。还有一个容易被忽视的点如果你电脑之前装过某个软件自带的JDK或者JRE可能会在系统里残留一条指向旧路径的Path记录。排查问题时先执行where java看看系统到底用的是哪个目录下的java很多环境变量对不上号的怪问题都是这个原因。2.2 IDEA 2023创建JavaWeb项目模板创建和手动创建的取舍JDK就绪之后接下来说IDEA。IDEA 2023创建JavaWeb项目的方式和几年前差别很大这也是很多“老教程”失效的根本原因。以前版本有很直观的Java Enterprise模板现在的New Project界面信息更多新手反而容易找不到入口。我用得最多的方式是打开IDEA后点击“New Project”在左侧选择“Java Enterprise”右侧勾选“Web Application”然后在Application Server里选择你已配置的Tomcat。如果列表里没有Tomcat就点“New”手动选择Tomcat安装目录。这种方式创建的工程会自动带好web目录和web.xml配置文件还用上了Maven管理依赖比较省心。但还有一种情况你的IDEA版本可能没有这个模板或者你手一滑建了个普通Java项目。别慌补救方式也简单右键项目根目录→“Add Framework Support”→“Web Application”IDEA会自动给你补上web目录和web.xml配置。这种方式适合你已经在已有项目里追加Web能力但对新手来说容易漏掉一些细节。所以我的建议是能走模板就走模板模板生成的骨架更规范。还有一点要提醒在新版IDEA里项目路径和项目名尽量不要用中文类名、包名更不能用中文否则在Tomcat部署时某些版本会出现路径编码问题表现就是项目启动正常但页面打不开或者404。2.3 IDEA常用配置第一次启动就设好的三处关键设置IDEA装好之后不是为了好看有几个配置我建议你第一时间设好否则后面写代码会一直踩坑。第一处是编码设置。打开Settings→Editor→File Encodings把Global Encoding、Project Encoding、Properties Files Encoding全改成UTF-8。JavaWeb开发里中文乱码是个老话题虽然乱码根源很多但编码统一为UTF-8是最基本的防线。配置文件里如果出现中文注释也要确保这个设置生效否则IDEA可能用系统默认编码打开保存后注释就变成乱码甚至编译报错。第二处是Maven设置。如果你能保证自己安装了独立的Maven下一节细说在Settings→Build, Execution, Deployment→Build Tools→Maven里把Maven home path指向你的Maven目录把User settings file指向你改好的settings.xml文件。这一步意义很大IDEA自带的Maven虽然能用但它的配置位置深且不容易改遇到依赖下载问题很难处理。第三处是默认JDK设置。在Settings→Build, Execution, Deployment→Build Tools→Maven→Runner里把JRE设置为当前JDK避免Maven运行时用了系统默认的旧版本JRE导致编译级别和运行环境不一致。这三处设置花不了五分钟但能省下后面无数个“莫名其妙”的报错。你在配置之前先想清楚IDEA只是个工具真正决定编译、运行的是JDK和Maven工具配置对了路就顺了。3. Maven与Tomcat构建和运行两个引擎都得顺3.1 Maven安装和settings.xml配置本地仓库、阿里云镜像一个都不能少Maven这玩意儿说它是构建工具不如说它是“依赖管家”。Java项目要用到几十上百个jar包靠手动下载往项目里扔太容易乱套。Maven的好处是你只要在pom.xml里声明依赖的“坐标”比如groupId、artifactId、version它就能自动去仓库下载对应jar包并且帮你管理依赖之间的版本关系。安装Maven没什么技术含量去Apache官网下载zip包解压到D:\maven\apache-maven-3.8.8然后配置环境变量M2_HOME指向这个目录Path里加%M2_HOME%\bin命令行输入mvn -version验证。真正决定好不好用的是仓库配置。Maven默认的本地仓库在用户目录的.m2/repository下中央仓库在国外。国内网络环境好的时候凑合差的时候一个依赖能下载半小时IDEA里一堆jar包标红。解决办法是改conf/settings.xml把本地仓库改到你希望的位置并配置国内镜像。打开Maven目录下的conf/settings.xml找到 节点默认被注释了改成一个你方便找的路径比如localRepositoryD:\maven-repo/localRepository然后在 节点里加一个阿里云镜像mirror idaliyunmaven/id mirrorOfcentral/mirrorOf name阿里云公共仓库/name urlhttps://maven.aliyun.com/repository/public/url /mirror补充说明一点镜像配置的本质是让Maven从国内服务器下载依赖而不是扎堆挤向国外中央仓库。加了这个配置之后Maven的下载速度会有质的提升IDEA里也不会再看到红色的“Cannot resolve xxx”报错。很多人卡在IDEA里项目一直编译失败实际上就是没有配镜像后台联网超时了都不知道问题在哪。settings.xml里还有一个值得加上去的配置是关于编译级别的。新建项目时Maven默认的编译级别可能比较低导致你在代码里用了新语法编译却不过。可以在settings.xml里加一个profile强制指定编译级别为1.8profile idjdk-1.8/id activation activeByDefaulttrue/activeByDefault jdk1.8/jdk /activation properties maven.compiler.source1.8/maven.compiler.source maven.compiler.target1.8/maven.compiler.target maven.compiler.compilerVersion1.8/maven.compiler.compilerVersion /properties /profile如果你的JDK是17就把1.8改成17。注意这里有个容易踩的坑如果你装了两个JDK但settings.xml里指定的是1.8而Maven运行时使用的高版本JDK可能和新语法冲突解决方法是把编译级别统一到与你项目目标一致的那个版本。学习阶段不用纠结太多8和17选一个主用就行。3.2 Tomcat安装、运行原理和端口调整Tomcat作为Servlet容器它的定位可以这么理解你写的Servlet类并不是直接运行在操作系统上的而是运行在Tomcat里。Tomcat负责监听端口、接收HTTP请求、解析请求参数、把请求转给对应的Servlet处理、再把处理结果封装成HTTP响应返回给浏览器。所以没有Tomcat你的Servlet就只是一堆没有入口的普通类。Tomcat安装是所有组件里最简单的去Apache Tomcat官网下载zip压缩包解压到D:\apache-tomcat-9.0.xx不需要安装程序进bin目录双击startup.bat即可启动。启动后在浏览器访问http://localhost:8080能看到Tomcat的欢迎页说明基础运行没问题。但这里要说一个重要细节startup.bat会弹出一个小窗口这是Tomcat的控制台日志窗口很多人习惯性地把它关了结果Tomcat也跟着停了。这个窗口保留在后台就行。如果你以后装的是服务版的Tomcat那会是另一种方式但学习阶段用免安装版加命令行启动最直观也最好排查问题。Tomcat默认端口是8080如果这个端口被其他程序占了你需要手动改。打开conf/server.xml找到Connector标签Connector port8080 protocolHTTP/1.1 connectionTimeout20000 redirectPort8443 /把port改成8081或者8090重启Tomcat生效。这里有个排查技巧启动时控制台如果报Address already in use说明端口确实被占用了。先找出是谁占的命令行执行netstat -ano | findstr 8080得到占用进程的PID后在任务管理器里结束这个进程。如果你在这台电脑上跑过其他Web项目八成是残留的Java进程没杀干净直接在任务管理器里找Java相关的进程结束就行。理解Tomcat目录的结构也很重要。webapps目录是你部署Web应用的地方WAR包或解压后的Web目录放进去Tomcat启动时就会自动加载。conf目录放的是各种配置文件server.xml管端口web.xml是全局的Servlet配置。logs目录里的catalina.out或localhost.log是排查Tomcat问题最宝贵的日志文件报错时不要只看控制台进logs里面翻一翻往往更准确。3.3 在IDEA中集成Tomcat两分钟搞定但要知道它替你做了什么IDEA集成Tomcat本质上就三件事告诉IDEA你的Tomcat在哪、告诉IDEA把哪个项目部署到这个Tomcat、告诉IDEA启动时用哪个端口。这三个设置分散在运行配置的几个选项卡里不了解原理的新手经常会漏掉某一个。先打开运行配置在IDEA主界面的运行/调试配置下拉框选择“Edit Configurations”点击左上角加号找到“Tomcat Server”→“Local”。在Server选项卡里点击Configure按钮把Tomcat home目录选到你的Tomcat解压目录。IDEA识别后会显示版本号。然后切到Deployment选项卡点击加号选“Artifact...”此时会列出你项目的war和war exploded两种包。这里强烈建议选择带war exploded的那个。原因其实很简单war exploded是“目录展开模式”IDEA把编译好的class、JSP、静态资源按目录结构直接复制到Tomcat的部署目录之后修改代码IDEA可以做到快速同步甚至热更新而打war包则是一次性打包改动后必须重新打包开发效率低很多。Application context这一栏填什么决定了你访问项目时URL的前缀。比如你填/hello那项目启动后访问地址就是http://localhost:8080/hello/xxx。如果你什么都不填默认是/访问时可以直接从根路径开始。学习阶段我建议填个有意义的路径比如/javaweb这样和教程里的地址保持一致。配置完成后Server选项卡里注意HTTP port要和conf/server.xml里Tomcat的端口一致默认8080不用改。最后在Server选项卡下方的“On update action”和“On frame deactivation”都选“Update classes and resources”这样IDEA窗口失去焦点或者你主动触发更新时改动会自动同步到Tomcat。这个配置非常重要否则你改了JSP刷新页面没反应还以为是Tomcat坏了其实是IDEA没把新文件同步过去。点击运行按钮IDEA会启动Tomcat并在浏览器打开你项目的地址。这个过程中你可以观察控制台输出IDEA会自动把Tomcat的启动日志、部署日志打印出来JavaWeb开发前期这个控制台就是你的“病情诊断报告”一定要养成看日志的习惯。4. MySQL数据库从安装到JDBC连接的完整闭环4.1 MySQL安装与基础配置注意这几处就能避开大部分坑JavaWeb项目只要涉及用户、商品之类的数据存储就绕不开MySQL。MySQL的Windows安装也是.msi格式的向导安装过程里我遇到过比较多的坑有两个端口冲突和字符集问题。安装类型推荐选“Server only”避免装一堆用不上的组件。端口默认3306一般不用改但如果3306被占用比如你装了其他数据库可以改成3307但要注意记下来后面JDBC的URL里要对应。Root密码可以设个简单的但不能太简单建议至少8位包含字母和数字。很多人图省事设成123456结果数据库暴露到外网后被勒索病毒删库这种教训太多开发学习期间就不能养成这种坏习惯。装完之后为了让命令行能直接运行mysql命令把MySQL安装目录下的bin目录也加到系统PATH里比如C:\Program Files\MySQL\MySQL Server 8.0\bin。然后打开命令行验证mysql -u root -p输入密码后能进入mysql提示符就说明成功了。如果提示找不到mysql命令就是PATH没配好或者命令行窗口是配置之前打开的重新开个新的。MySQL 8的默认字符集是utf8mb4这对中文很友好。但创建数据库时最好还是显式指定字符集和排序规则这样可以避免服务器系统语言环境不同导致的不确定性。我用得最多的建库语句是CREATE DATABASE javaweb_demo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;这里解释一下为什么用utf8mb4而不是utf8utf8在MySQL里最多存3个字节部分特殊字符和emoji存不了utf8mb4是完整的UTF-8实现兼容性更好是MySQL 8的推荐字符集。JavaWeb教学里经常用到中文数据把这一步做好乱码的概率会大大降低。4.2 JDBC驱动、Maven依赖和URL里的老坑Java程序要连接MySQL统一走JDBC接口MySQL提供了自己的驱动包。在Maven工程里你只需要在pom.xml的 里加一个依赖dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version8.0.33/version /dependency这里注意一下版本的细微区别MySQL 8的驱动包老一些的写法是mysql-connector-java新版本改成了mysql-connector-j。两个在Maven中央仓库里都存在但推荐用新的mysql-connector-j。原因很简单新包名是新团队在持续维护的版本修复了不少连接时区和SSL相关的兼容性问题。引入依赖之后还有一个很容易踩坑的细节驱动类名。MySQL 8里是全限定类名com.mysql.cj.jdbc.Driver老版驱动是com.mysql.jdbc.Driver如果你在老教程里复制了后者的写法用MySQL 8驱动时会直接ClassNotFoundException。很多新手在“加载驱动”这一步报错查了半天原来就是这个类名写错了。还有一个关于URL的坑。MySQL 8的JDBC URL必须在末尾带上serverTimezone参数否则会报SQLException: The server time zone value Öйú±ê׼ʱ¼ä is unrecognized之类莫名其妙的错误。标准的URL格式建议这样写jdbc:mysql://localhost:3306/javaweb_demo?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai其中useUnicode和characterEncoding保证了中文不乱码serverTimezone指定了服务器的时区为北京时间这个参数在MySQL 8中是必填的不加就报错。这个坑几乎每届新手都会踩一次先帮你踩平了。4.3 用一段最小代码验证数据库连接环境配置正确与否最快的方式是写一个最小的Java类跑一下。这个类不需要任何框架直接用原生JDBC来干目标只有一个成功执行一个SELECT 1查询。import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcTest { public static void main(String[] args) throws Exception { String url jdbc:mysql://localhost:3306/javaweb_demo?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai; String user root; String password 你的密码; Class.forName(com.mysql.cj.jdbc.Driver); Connection conn DriverManager.getConnection(url, user, password); Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(SELECT 1); if (rs.next()) { System.out.println(数据库连接成功结果是 rs.getInt(1)); } rs.close(); stmt.close(); conn.close(); } }这段代码逻辑很直白加载驱动、获取连接、执行查询、输出结果、释放资源。执行之前你要先确保javaweb_demo这个数据库存在在MySQL里执行一下第一节的建库语句即可。如果运行后看到“数据库连接成功结果是1”恭喜你Java程序已经能访问MySQL了这是JavaWeb开发里非常重要的一步。如果报Access denied for user多半是用户名或密码不对检查一下就好如果是Communications link failure说明MySQL服务没启动去Windows服务里找到MySQL80这个服务启动它如果报Unknown database说明你没建库或者库名不一致。这些都是前期最高频的数据库连接问题在这里先打预防针。5. 第一个JavaWeb程序把整条链路串起来5.1 新建项目、补依赖、写第一个Servlet到目前为止JDK、IDEA、Maven、Tomcat、MySQL都各自验证过了一遍但还没有串起来。这一节我们要真正写一个能在Tomcat里跑起来的JavaWeb程序。假设你已经按第二节的方式用一个带Maven支持的JavaWeb模板创建了项目并且配置好了Tomcat运行配置。项目创建好之后第一步是在pom.xml里加Servlet依赖。传统JavaWeb编程依赖的是Servlet API它不是JDK的一部分需要单独引入dependencies dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency /dependenciesscope设置为provided的意思是这个依赖只在编译时需要打包或运行时由Tomcat自己提供。因为Tomcat本身就带Servlet API的实现如果你把这个包也打包进项目容易出现类加载冲突。这个细节面试常考但更重要的是它解释了为什么你代码里能直接用HttpServlet却不用管它的实现。然后新建一个类我给它取名HelloServlet放在com.example.demo包下。代码如下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; WebServlet(/hello) public class HelloServlet extends HttpServlet { Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType(text/html;charsetUTF-8); resp.getWriter().write(h2Hello JavaWeb! 环境准备完成/h2); } }WebServlet(/hello)这个注解的作用是告诉Tomcat当用户请求路径“/hello”时由这个类来处理。在早期版本的JavaWeb开发里这个映射关系需要在web.xml里写一大段配置现在用注解更简洁但原理是相同的Servlet容器需要知道“哪个URL交给哪个类处理”。doGet方法是处理HTTP GET请求的入口。你可以在浏览器地址栏直接输入URL发起GET请求所以访问这个Servlet时Tomcat会自动调用doGet方法。方法里resp.setContentType指定了响应内容的类型和编码然后用resp.getWriter()输出HTML。注意这里一定要指定charsetUTF-8否则浏览器会用默认编码解析中文很容易变成乱码。5.2 部署到Tomcat从编译到效果可见需要盯紧这几个环节Servlet写好后点击工具栏的运行按钮IDEA会自动完成编译、部署、启动Tomcat这一整套流程。如果前面配置都正确你会看到控制台输出很多日志其中关键的是Tomcat启动成功的标志Server startup in xxx ms。启动完成后再浏览器访问http://localhost:8080/hello如果能看见“Hello JavaWeb! 环境准备完成”这几个字说明这条链路已经彻底打通了浏览器发起HTTP请求Tomcat接收后根据/hello这个映射找到HelloServletdoGet方法执行并将HTML返回给浏览器。这个简单的过程涵盖了JavaWeb开发的所有核心心智模型。实际运行时IDEA控制台会输出两种日志一种是Maven构建日志一种是Tomcat运行日志。新手最容易忽略的是Tomcat的部署日志里面会显示Deploying web application directory xxx以及它部署的实际路径。如果页面404第一个要查的就是这个路径和你浏览器访问的URL是否对应。还有一个常见情况IDEA启动了Tomcat但浏览器打开后一直停留在等待响应状态。这多半是Tomcat和IDEA的端口配置不一致或者Tomcat启动没完全成功。遇到这种问题最直接的办法是把IDEA里的Tomcat停掉去命令行直接运行Tomcat的startup.bat看看单独启动是否正常。先确认Tomcat自身没问题再排查和IDEA的配合问题能让问题范围缩小一半。部署成功之后我建议你尝试改一下页面上的内容比如把“环境准备完成”改成“Hello First JavaWeb”然后保存。如果IDEA的On update action配置正确在Tomcat运行期间这个改动就能同步过去刷新浏览器即看到新内容。这一步能帮你建立“改代码→看到效果”的反馈感JavaWeb学习中的很多信心都是这么攒起来的。5.3 标准JavaWeb项目目录结构说明等到第一个程序跑通再回头看一下IDEA里生成的项目结构你会发现它长这样javaweb-demo ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── com/example/demo │ │ │ └── HelloServlet.java │ │ └── webapp │ │ ├── WEB-INF │ │ │ └── web.xml │ │ └── index.jsp │ └── test └── targetsrc/main/java放的是Java源码src/main/webapp是Web根目录相当于一个站点的主目录。webapp下面的WEB-INF是比较特殊的目录浏览器无法直接访问它里面的文件但Tomcat会读取WEB-INF/web.xml作为Web应用的配置入口。即使你用了WebServlet注解web.xml也至少要存在哪怕是空的Tomcat才会把它当作标准的Web应用来加载。target目录是Maven编译输出的目录IDEA部署时实际上就是把target里的内容复制或链接到Tomcat的部署位置。很多人第一看到target目录里一堆class文件会懵其实不用管它这是Maven自动生成的。我见过不少新手自作聪明地把Servlet类放到webapp目录下结果Tomcat根本找不到这个类。JavaWeb的目录结构是约定Tomcat默认按规范去扫描class和依赖目录放错了项目照样能启动但请求过来时容器找不到对应的Servlet。学习阶段严格按照Maven标准目录来建是最稳妥的。6. 常见问题与排查技巧实录6.1 高频报错速查表照着查少走三小时弯路环境准备阶段的报错翻来覆去就那么几类。我把带新人过程中最常遇到的十类问题整理成一张速查表建议你收藏遇到问题先来对号入座报错或现象常见原因处理办法java -version 提示“不是内部或外部命令”JDK没装或环境变量没配好检查JAVA_HOME和Path重开命令行窗口IDEA新建项目找不到SDK未告诉IDEA JDK位置Project Structure里手动添加JDK目录Maven依赖一直刷新不完成或标红没配镜像或网络访问中央仓库超时settings.xml添加阿里云镜像刷新MavenTomcat启动报Address already in use8080端口被其他进程占用netstat查端口占用改server.xml端口或杀进程Servlet类报ClassNotFoundExceptionTomcat 10用了jakarta包或依赖scope不对换Tomcat 8.5/9或把javax改成jakarta页面中文乱码编码不统一IDEA全局UTF-8resp设置setContentType里加charsetJSP页面修改后不生效On update action没设置好设为Update classes and resourcesJDBC运行报serverTimezone错误MySQL 8的URL缺时区参数URL加serverTimezoneAsia/ShanghaiAccess denied for user用户名或密码错误确认密码测试时用root和localhost连接项目访问404URL路径或Application context不对检查Deployment配置和注解路径这份表不能解决所有问题但它能帮你快速缩小排查范围。遇到没列进去的报错我的建议是把完整异常堆栈的前十行贴到搜索框里不要搜“JavaWeb报错”这种宽泛的关键词要搜具体异常类名比如ClassNotFoundException com.mysql.cj.jdbc.Driver这种精确搜索几乎总能找到对应的解决方案。6.2 排查环境问题的心法别盲改先定位调试环境问题的核心我的体会是四个字从后往前。比如页面404你先别着急重装Tomcat按这个顺序想一下浏览器地址是不是对应用上下文路径是什么Servlet的映射URL是什么Tomcat控制台部署日志显示部署了哪个应用一层一层往前推问题很容易暴露在某个环节上。我再举一个具体例子。有一次我帮一个同学排查Tomcat能启动但页面404单击右键运行后浏览器自动打开了一个地址他直接输入了http://localhost:8080当然显示的是Tomcat默认首页但他没注意路径以为项目跑失败了。实际上项目的访问路径是http://localhost:8080/javaweb/hello他少输了一层上下文路径。这个例子说明很多“诡异问题”根本不是环境坏了而是URL写错了。另外真的不建议在环境问题上一遍遍重装软件。重装经常能解决“不知道什么原因的问题”但它不能帮你理解问题的本质而且重装过程中很容易引入版本不一致的新问题。正确姿势是盯日志、看报错、带着具体异常信息去搜索一步步缩小范围。这个方法不仅适用于环境准备以后开发里遇到任何Bug都用得上。6.3 装好环境后建议做的事写一份自己的自检清单环境全部跑通之后我想给你一个强烈建议别急着往下学先花十分钟把刚才每一步的关键命令和结果记录下来做成一份自己的环境自检清单。我当年的清单大概长这样java -version 输出正常javac -version 输出正常mvn -version 输出正常且USER_MAVEN_CONFIG指向自己的Maven目录Tomcat双击startup.bat后能访问欢迎页mysql -u root -p 能进入命令行JDBC测试类成功输出“数据库连接成功”IDEA中的Tomcat运行配置能启动HelloServlet并返回正确页面这份清单的价值会在两个时刻体现出来一是你换电脑或者重装系统时照着清单重来一遍效率能提高一倍二是后面你学Servlet、JSP、Filter、事务这些内容如果出现了环境相关的问题这份清单能帮你快速判断到底是环境坏了还是业务代码写错了。我自己现在每隔一段时间还会用这种思路整理知识体系环境准备看似琐碎其实是最能体现系统思维的部分。把这套配置背后的逻辑弄懂你后面学任何新技术栈比如Spring Boot都会比别人更快上手因为你知道每个组件扮演什么角色新框架只是换了一种方式把这些组件组织起来而已。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻