javaweb项目怎么运行
昨天帮同事排查一个老项目,项行他双击了startup.bat,目运Tomcat窗口闪一下就没了。项行我凑过去一看,目运控制台报错“端口被占用”,项行他一脸茫然——这项目上周还能跑,目运今天就不行了。项行其实这种问题,目运多半不是项行代码坏了,而是目运运行环境出了幺蛾子。
javaweb项目说白了就是项行一堆Java类、JSP页面、目运配置文件打包成的项行war包,扔进Tomcat这类Servlet容器里才能活。目运运行它分三步:装环境、项行导项目、启动容器。但每一步都有坑,我一个个说。
第一步,JDK和Maven别装错版本。你项目pom.xml里写着Java 8,你机器上装的是JDK 17,编译时可能不报错,运行到某个反射调用就直接抛NoSuchMethodError。我见过最离谱的一次,同事用JDK 11跑一个老SSH项目,Spring 3.x愣是起不来,最后换回JDK 8秒好。所以先看项目根目录的pom.xml或build.gradle,确认版本要求。没Maven?那更简单,直接把项目里的lib文件夹拷出来,手动加到IDEA的Libraries里,只是麻烦点。
第二步,导入IDE别偷懒。IDEA里File→New→Project from Existing Sources,选war包或源码目录都行。但关键一步是配置Artifacts——你得告诉IDEA,这个项目是web应用,需要打包成war exploded格式,然后点运行按钮旁边的小锤子,选Edit Configurations,加一个Tomcat Server,把Deployment里的Application context设成根路径,比如/或/myapp。不然你启动后访问localhost:8080,直接404,还以为代码没编译。
第三步,启动前先查端口。Tomcat默认8080,你电脑上可能开着微信开发者工具、某宝客户端,甚至另一个Tomcat实例,悄悄占了这端口。命令行敲netstat -ano | findstr 8080,看到PID就干掉进程,或者改Tomcat的conf/server.xml,把8080改成8081。我习惯改项目里配置的端口,比如Spring Boot的application.properties,但老项目是独立Tomcat,就得改server.xml,别改错文件。
容器起来后,日志是唯一真相。catalina.out或IDEA控制台里,看到“Deployment of web application archive has finished”才算成功。如果报ClassNotFoundException,多半是依赖没引全;如果报BeanCreationException,看看是不是数据库连不上——本地MySQL没启动,Spring容器初始化数据源直接炸,这锅不算代码的。
最后说个冷门但实用的:如果你用内嵌Tomcat的Spring Boot项目,运行主类里的main方法就行,不用装独立Tomcat。但区分这俩很简单——看pom里有没有spring-boot-starter-tomcat,有就是内嵌,没有就是传统war包。两种启动方式差别大,别搞混。
运行起来后,你打开浏览器输localhost:8080,看到首页出来了,别急着高兴。先试试登录、查列表、提交表单,每个操作看控制台有没有报错。很多项目启动时不报错,一访问就抛NullPointerException,那是初始化时没加载某个配置。比如我上次跑一个教务系统,登录页正常,点查询就500,查日志发现是连的Oracle库,但本地只装了MySQL驱动——这种环境不匹配的问题,比代码bug更坑。
真遇到跑不起来的,别死磕。把完整堆栈日志贴到搜索引擎,第一条结果往往就是答案。javaweb项目运行这事,七分靠配置,三分靠代码,环境对了,代码自然就活了。