中午发现tomcat里面jar包好像少了因为cmd也打不开只能重新下,后来发现不是少了只是合并jar包了,因此端口号也得重新修改,但是第一次没想到,所以localhost8080一直打不开,修改后还是打不开,原因是java文件和xml配置文件解释重复了,删掉一个就好了。

还有就是classes下只能放class编译文件,不能放java文件不符合规定。
所以编译的时候需要cmd手动指定路径
javac -encoding UTF-8 -cp "E:\apache-tomcat-11.0.18-windows-x64\apache-tomcat-11.0.18\lib\servlet-api.jar" -d "E:\apache-tomcat-11.0.18-windows-x64\apache-tomcat-11.0.18\webapps\crm\WEB-INF\classes" HelloCRMServlet.java
javac -encoding UTF-8 -cp "E:\apache-tomcat-11.0.18-windows-x64\apache-tomcat-11.0.18\lib\servlet-api.jar" -d "E:\apache-tomcat-11.0.18-windows-x64\apache-tomcat-11.0.18\webapps\crm\WEB-INF\classes" HelloCRMServlet.java
| 命令片段 | 作用解释 | 你的场景说明 |
|---|---|---|
javac |
Java 编译器的核心指令,用于将.java源文件编译为.class字节码文件 |
必须先确保 JDK 的bin目录在系统Path里,否则 CMD 找不到javac |
-encoding UTF-8 |
指定源文件的编码格式为 UTF-8 | 解决中文乱码问题(你的代码里有中文,必须加) |
-cp "servlet-api.jar路径" |
-cp = classpath(类路径),告诉编译器去哪里找依赖的类(比如 Servlet 相关的HttpServlet) |
servlet-api.jar是 Tomcat 提供的 Servlet 核心包,你的代码继承了HttpServlet,必须让编译器找到这个包 |
-d "目标路径" |
核心参数! -d = destination(目标目录),指定编译后.class文件的输出路径,且会根据 Java 文件的package自动创建多级目录 |
你指定的目标路径是 Tomcat 的crm/WEB-INF/classes,编译器会根据com.crm.servlet的包名,自动在这个路径下创建com/crm/servlet三级文件夹,把class文件放进去 |
HelloCRMServlet.java |
要编译的 Java 源文件名称(如果源文件不在当前 CMD 目录,需要写完整路径,比如H:\大二大作业\Java_prc\src\com\crm\servlet\HelloCRMServlet.java) |
你在源文件所在目录执行命令,所以直接写文件名即可 |
如果不写-d参数,javac会默认把.class文件编译到当前 CMD 所在目录 (和.java源文件同目录);加上-d 目标路径后,编译器会把.class文件输出到你指定的目标路径,而非源文件目录。