使用javac命令行手动编译servlet小程序

虽然现在现在关于java的IDE已经非常的成熟了,但是我还是想从最原始的方式开始学习java,于是这次使用了记事本和cmd命令行方式编译一个小的servlet程序。
遇到的麻烦最郁闷的就是在编译servlet时候,需要使用到Tomcat的servlet-api.jar的类包。这个包一般位于Tomcat\lib目录下,javac -classpath时候将这个类包引用。但是问题来了,每当我输入命令符进行编译时:
javac -classpath E:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\servlet-api.jar -d classes E:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\Beer-v1\src\com\example\web\BeerSelect.java 

就会提示:javac: 无效的标记: Files\Apache
上网查询了许久,都说是环境变量配置错误了。但是平时使用javac的时候是正常的,应该不是环境变量的问题。后来我将jar的包复制到E:\的根目录下,这次可以正常运行了。弄了许久总要发现问题原来是,TomCat的安装目录尽量不要有空格,否则会出现各种错误。最后得出的
[color=red]结论是:
不要把 Tomcat 装在带有空格的路径之中,因为命令行的参数是使用空格分隔的[/color]

接下来我只好将代码和servlet-api.jar复制到E盘根目录下,后来终于编译成功了:
>javac -d classes -classpath e:\servlet-api.jar -sourcepath e:\Beer-v1
\src e:\Beer-v1\src\com\example\web\BeerSelect.java

其中BeerSelect.java为servlet文件,引用了包-classpath e:\servlet-api.jar,这个文件还依赖了一个模型类,位于\Beer-v1\src中。具体方法都是查看的附件里面的内容。

[b]附件(引自http://blog.youkuaiyun.com/caesarzou/article/details/5462189):[/b]
[b]javac参数(-classpath, -sourcepath)详解[/b]

[quote]-classpath:

设置用户类路径,它将覆盖 CLASSPATH 环境变量中的用户类路径。若既未指定 CLASSPATH 又未指定 -classpath,则用户类路径由当前目录构成。



-sourcepath:

指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (;) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。

注意:通过类路径查找的类,如果找到了其源文件,则可能会自动被重新编译。



官方说法很简洁,但是具体操作起来总觉得不太清晰,我们还是找几个例子,来具体分析一下:

具体例子:

假设我们有如下的目录结构:

src-|

|-foo-|

|-Testfoo.java

|-baz-|

|-Testbaz.java

classes-|

其中Testfoo.java:

package foo;

public class Testfoo {

//....

}

其中Testbaz.java:

package baz;

import foo.Testfoo;

public class Testbaz {

//...

}

也就是说Testbaz对Testfoo有引用。

我们目标是把Testbaz编译到目录classes里面,试用如下的命令:

javac -d classes src/baz/Testbaz.java

命令失败,因为找不到它依赖的Testfoo。我们可以用以下三种方式来实现:

1.我们最容易考虑到的就是编译被依赖的Testfoo类,并将其加入Testbaz的CLASSPATH

javac -d classes src/foo/Testfoo.java

javac -d classes -classpath classes src/baz/Testbaz.java[list]
[*]
[/list]

第二行使用了-classpath,使得编译器在寻找Testfoo类的时候以classes为根目录,根据根目录和package名,类名最终定位了需要用的(已编译出来的)Testfoo类。



2.在编译Testbaz的时候把被依赖的Testfoo类加入SOURCEPATH

javac -d classes -sourcepath src src/baz/Testbaz.java

在编译条件里面加入-verbose可以很清楚的看到,编译器在寻找Testfoo类的时候,以src为根目录,根据根目录和package名,类名最终定位了需要用的(源代码)Testfoo类。



3.把CLASSPATH和SOURCEPATH两者都加进来

javac -d classes src/foo/Testfoo.java

javac -d classes -sourcepath src -classpath classes src/baz/Testbaz.java

两个属性都被加入,编译器首先会判断Testfoo.class和Testfoo.java是否同时存在。如果单独存在,则适应于以上的方法之一。如果同时存在,则判断.class是否是.java的最新编译,如果有差异,则重新编译.java来覆盖.class



有必要补充一下-d参数:

-d参数是很好的把源程序和目标代码分离的参数。-d制定的是目标代码的根目录,源文件的包的结构将以目录形式反映到根目录上。美中不足的是-d需要指定已经存在的目录,不能自动创建。[/quote]
PPO算法详解:基于CartPole-v1的强化学习实现 阅读详情

相关推荐

Error: dependent ‘..\..\..\..\Qt\5.15.2\msvc2019\include\QtWidgets\QMainWindow‘ does not exist.

核心问题:修改 Build 目录为源码子目录后,MSVC 编译报错,本质是变量设置异常,导致 qmake 生成多余回溯路径;临时解决:在 .pro 文件添加;最优解决:将上述配置写入 Qt 的 msvc 对应 qmake.conf 全局文件,一劳永逸;禁止 qmake 计算路径时向上回溯,避免生成异常路径。

mumufan05的专栏 878

在命令行编译servlet

在命令行上编译servlet通不过,找不到HttpServlet包 解决的办法: 在classpath 后面添加servlet-api.jar,比如 E:/Tomcat 5.5/common/lib/servlet-api.jar 然后关闭命令窗口在进入到当前目录下,再编译。 另外path 和 classpath区别: path作用就是查找并执行命令

dichyzhu的专栏 1064

Oracle-如何修复undo坏快

undo出现坏快,导致数据库宕机,无法启动

qqqyyy0422的博客 570

命令行下直接编译Servlet

在命令行下编译Servlet会出现以下错误: C:\Documents and Settings\Administrator>javac D:\Tomcat\webapps\wasan\WEB-INF\li b\StudentForm.java D:\Tomcat\webapps\wasan\WEB-INF\lib\StudentForm.java:2: 软件包 javax.servle

盗墓笔记 2135

从服装打版到激光切割:二维异形件排版算法在实际生产中的避坑指南

本文深入探讨二维异形件排版算法在服装、家具等行业的实际应用,对比NFP和重叠移除两种核心策略的优缺点,并提供算法落地的五大实战陷阱与解决方案。通过案例分析和技术要点解析,帮助生产管理者提升材料利用率5%-15%,优化生产效率。

weixin_28717431的博客 416

汇川EASY系列之以太网通讯(MODBUS_TCP做主站)

汇川Easy系列以太网通讯中(MODBUSTCP,plc做主站),终于可以不用使用指令就可以完成了,全程通过简单的配置就可通讯。本文将通过EASY系列PLC与调试助手之间完成此操作。

这是一个长期关注工控行业技术的博客,实现0-1的突破,期待您的关注和留言 3303

javadoc: 错误 - 无效的标记: --source-path 解决方式

javadoc: 错误 - 无效的标记: --source-path

handy的博客 2513

别再死记硬背公式了!用Multisim仿真软件,5分钟搞懂三极管放大电路的工作原理

本文介绍如何利用Multisim仿真软件快速掌握三极管放大电路的工作原理,避免死记硬背公式。通过动态实验和参数调整,直观理解三极管的工作状态和放大效果,提升学习效率和实践能力。

weixin_30566063的博客 568

使用IDEA进行javaDoc时报错,请大牛指点

javaDoc求助

weixin_42328558的博客 2487

做了一个3DTiles编辑器,支持3DTiles的预览和裁剪导出

3DTiles编辑器的功能极其简洁,核心就是3DTiles格式模型的预览和裁剪。为了演示方便,本文所使用的源数据为mipmap3d[1]网站所提供的无人机拍摄影像,并进行3DTiles构建。打开软件,输入的绝对路径之后,点击添加模型,就可以将模型加载进预览区。之后,点击裁剪模式按钮,默认会出现立方体裁剪框,可通过拖动句柄的方式去调整裁剪框的范围。同时,除了默认的盒体裁切模式外,还支持多边形裁切,点击多边形裁切后,可切换到顶视图,选择重绘多边形,可进行打点绘制。

兴趣使然的创作者 601

滤波算法实现大全——基于匀速直线运动模型的kalman滤波算法

滤波算法实现大全——基于匀速直线运动模型的kalman滤波算法

jane0819的博客 523

关于java环境变量配置好后,在cmd命令行输入java无反应,输入javac返回javac option ssource files的问题

我在有一天突然发现我的eclipse不能用了,想着简单重装下(极度怀疑是我之前清理垃圾删掉不改删的啦),结果发现越来越糟糕,安装完jdk和配置好环境变量之后再cmd输入“java -version”显示正常.但是输入java无反应,输入javac弹出÷: javac <options> <source files> 我上网上搜寻了一天也不知道为什么,直到发现了一个被我忽略的评论: 我试了试发现可以了,顺着这个地方找到了解决办法: 首先极有可能是你的cmd编码格式问题,我

Study_For_You的博客 5005

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

本文所属《从零开始跑通3DGS教程》系列文章; sfm重建的点云已经丢掉了尺度信息,并且坐标系跟图像数据有关(SFM初始化选择的图像),所以如果想恢复物理真实尺度,以及在想要的视角下渲染,那么需要对尺度和坐标系进行编辑修正,下文介绍如何使用CloudCompare修改坐标系和尺度

诺有缸的高飞鸟的博客 2871

将servlet手动编译并部署到本地tomcat服务器

将开发的servlet通过javac命令进行手动编译并部署到本地tomcat服务器中,学习代码编译和应用部署的过程

zykfromMars的博客 3581

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

用javac编译servlet类出现问题

  本人写了一个关于servlet的webapp,但是在用javac编译的时候,只是单纯的将jsp-api.jar和servlet-api.jar拷贝放在了其目录下面,然后利用命令行 javac XXX.java开始编译,然后出现了一大堆错误,如下: FirstServlet.java:7: 错误: 找不到符号public class FirstServlet extends Http...

dinaoju5134的博客 819

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java编译servlet_使用javac命令编译Servlet,并将其放入tomcat中运行

首先我在桌面上新建了一个txt文件,编辑内容(内容来自菜鸟教程)为://导入必需的 java 库import java.io.*;import javax.servlet.*;import javax.servlet.http.*;//扩展 HttpServlet 类public class HelloWorld extendsHttpServlet {privateString message;...

weixin_30635707的博客 772

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java编译servlet,使用javac编译servlet

我想在NetBeans之外编译servlet.我创建了一个简单的Hello World servlet,它产生了这些编译器错误.import javax.servlet.ServletException;^ServletTester.java:4: package javax.servlet.http does not existimport javax.servlet.http.*;^Servl...

weixin_33391446的博客 432

深入理解javac:从命令行编译到Java项目构建的核心原理与实践

Java编译是Java程序从源代码到可执行字节码的关键环节,其核心在于将.java文件转换为JVM可执行的.class文件。这一过程不仅实现了Java平台无关性的基础,也是理解类路径、模块化等核心概念的技术基石。在工程实践中,掌握javac命令的参数配置,如类路径(-cp)和编码设置(-encoding),能有效解决依赖管理和跨平台编译问题。特别是在处理复杂项目结构或排查构建工具底层错误时,直接使用javac进行手动编译测试,成为定位和解决编译问题的有效手段。本文通过实际案例,深入解析javac在项目构建中

weixin_33882452的博客 522

使用javac命令编译Servlet,并将其放入tomcat中运行

首先我在桌面上新建了一个txt文件,编辑内容(内容来自菜鸟教程)为: // 导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; // 扩展 HttpServlet 类 public class HelloWorld extends HttpSer...

weixin_30698527的博客 526

javac手动编译servlet

javac -classpath D:\tomcat\common\lib\servlet-api.jar;D:\tomcat\webapps\beer-v1\WEB-INF\classes ../model/BeerExpert.java javac -classpath D:\tomcat\common\lib\servlet-api.jar;D:\tomcat\webapps\b...

weixin_30868855的博客 114

javac编译servlet类出现的一系列问题及分析解决(javac编译servlet找不到javax.servlet.*包的问题)

用javac编译servlet类出现的一系列问题及分析解决(javac编译servlet找不到javax.servlet.*包的问题) 使用编写的servlet类来响应网页请求,关于配置Tomcat服务器,设置路径等若干问题,尤其是----关于javac编译servlet类找不到javax.servlet.*包的问题,最伤脑细胞,(配置的明明都跟人家一样,却还是不行!!看看以下解决) 首先ja

ljheee的博客 6959

手动编写、编译一个servlet

之前写过的servlet都是用IDE来编译,这次我尝试用文本编辑器来编写一个servlet并且编译、运行: 第一步,编写java源文件 import javax.servlet.http.*; import javax.servlet.*; import java.io.*; public class MyServlet extends HttpServlet { publ

月下犀牛 1645

javac编译servlet类和gbk编码问题

1.解决javac编译servlet类出现问题 提示错误:找不到符号public class HelloServlet extends HttpServlet 解决:复制servlet-api.jar到编译目录下,添加参数 -classpath servlet-api.jar 2.解决javac编译gbk编码出现问题 提示错误: 编码utf-8的不可映射字符 解决:添加参数 ...

chao2016的博客 4033
上一篇: 记录学习JAVA的点滴
下一篇: 模拟管道并发拷贝程序
蜻蜓
博客等级 码龄19年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值