我正在尝试在Tomcat的 webappps / Email / src / Mail 文件夹中编译Servlet类,但是我收到了编译时错误:
./Email/src/Mail/Mail.java:7: package javax.mail does not exist
import javax.servlet.http.*;
./Email/src/Mail/Mail.java:9:package javax.servlet does not exist
import javax.servlet.*;
./Email/src/Mail/Mail.java:12:cannot find symbol
symbol: class HttpServlet
public class mail extends HttpServlet{
^
./Email/src/Mail/Mail.java:14: cannot find symbol
symbol: class HttpServletRequest
location: class Mail.mail
public void doPost(HttpServletRequest request,HttpServletResponse response)
^
./Email/src/Mail/Mail.java:14: cannot find symbol
symbol: class HttpServletRequest
location: class Mail.mail
public void doPost(HttpServletRequest request,HttpServletResponse response)
^
./Email/src/Mail/Mail.java:20: cannot find symbol
symbol: class MessageReading
location: class Mail.mail
MessageReading mr=new MessageReading();
7 errors
我用来编译类的命令是:
C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps>javac -d ./Email/WEB-INF/classes -cp ./Email/src/Mail/. ./Email/src/Mail/mail.java
这是servlet类:
package Mail;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import javax.servlet.http.*;
import javax.servlet.*;
import Mail.*;
public class mail extends HttpServlet{
public void doPost(HttpServletRequest request,HttpServletResponse response)
{
try{
MessageReading mr=new MessageReading();
}
catch (Throwable e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
}
}
}
正在编译时,我正在尝试使用以下命令编译它:
C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps>javac -d ./Email/WEB-INF/classes ./Email/src/Mail/*.java
Mail文件夹中的MessageReading和mail类。
有谁能告诉我为什么第二个命令不起作用?
答案 0 :(得分:1)
第一个版本将忽略CLASSPATH环境变量,因为您正在使用-cp显式设置类路径。第二个没有。我想你的CLASSPATH包含JavaMail,servlet API等。在命令行输入set classpath
来验证这一点。
答案 1 :(得分:1)
当不在命令行上使用-cp指定类路径时,将使用环境CLASSPATH变量。因此,假设您丢失的jar文件位于您的CLASSPATH变量(servlet.jar,mail.jar等等)中,假设您未在命令行中指定它们,则在您(未完全指定)手动指定的类路径时会出现错误你键入-cp。
如果不出意外,将所需的jar添加到命令行是一个很好的练习,以帮助理解您的程序需要运行的内容。添加servlet.jar和mail.jar后,我相信你会收到mail.jar所需的一些额外错误。这有助于理解依赖关系。
答案 2 :(得分:0)
在我回答之前的一点说明:大多数人都没有通过直接调用javac来编译Java代码。考虑在项目中使用Ant或Maven2。
我不明白第二个命令如何或为什么起作用,如果确实如此,我会感到惊讶。 'mail'类的Java代码引用外部非JDK包中的API;您必须向javac提供类路径信息(使用-cp选项),以便编译器与这些库“链接”。
在你的第一个命令中,我怀疑-cp参数似乎指向源文件;此选项应指向包含已编译类文件和/或包含类文件的.jar文件的目录。
JavaMail API类和javax.servlet类通常包含在.jar文件中。我确信Tomcat至少有servlet jar,你可以从java.sun.com下载JavaMail。