Dr.*_*son 2 import tomcat servlets javac
我知道这是一个常见的错误,但请耐心等待.我一直在追求CLASSPATH问题,我认为这不是问题所在.我收到这样的错误.
./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
Run Code Online (Sandbox Code Playgroud)
我安装了Tomcat和Java SDK,我知道Tomcat应该提供servlet API.但它究竟在寻找什么文件?
我有以下设置:JAVA_HOME =/usr/java/jdk1.6.0_16 CLASSPATH =/usr/share/java;/usr/share/java/tomcat6
tomcat的基本目录:/ usr/share/tomcat6在这个目录中,/ usr/share/tomcat6/lib只是/ usr/share/java/tomcat6的符号链接
tomcat6-servlet-2.5-api-6.0.18.jar在/ usr/share/java/tomcat6中,还有什么我需要告诉javac所以它会使用这个库吗?我需要另一个图书馆吗?
作为背景,我正在尝试运行一个hello world servlet.代码如下:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class process extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用javac编译它时,我得到以下错误(其中包括这是根本原因):
./src/process.java:2: package javax.servlet does not exist
import javax.servlet.*;
^
./src/process.java:3: package javax.servlet.http does not exist
import javax.servlet.http.*;
^
Run Code Online (Sandbox Code Playgroud)
我尝试使用-cp选项在命令行上指定类路径,但我最终得到了相同的结果.
您需要将类路径设置为专门指向JAR:
CLASSPATH=/usr/share/java/tomcat/tomcat6-servlet-2.5-api-6.0.18.jar
Run Code Online (Sandbox Code Playgroud)
在类路径中指定文件夹时,它仅用于查找该文件夹中的所有类.JAR本身就是类的库(打包文件夹,如果你愿意),因此必须单独列出.所以,例如,你可以这样做:
CLASSPATH=/some/location/myjar1.jar:/other/location/myjar2.jar:/some/classes/folder
Run Code Online (Sandbox Code Playgroud)
在这种情况下myjar1.jar
,您myjar2,jar
和/some/classes/folder
目录中的所有类都可用.如果你有myjar3.jar
在/some/classes/folder
,上面的声明将不将它添加到类路径中.
更新正如McDowell所指出的,Java 6允许类路径中的通配符可以获取指定文件夹中的所有jar.通配符仅适用于JAR,除非再次指定没有通配符的文件夹,否则不会选择类.通配符也不是递归的.所以:
CLASSPATH=/loc1/*:/loc1:/loc2/*
Run Code Online (Sandbox Code Playgroud)
将使/loc1
文件夹中的所有jar和所有类以及文件夹中的所有jar(但不是类)/loc2
可用./loc1/nested/some.jar
不会拾取更深的嵌套jar().
归档时间: |
|
查看次数: |
7399 次 |
最近记录: |