Java servlet不会编译 - 找不到javax.servlet

时间:2011-11-12 21:18:38

标签: java servlets classpath

我在编译java servlet时遇到了大问题。据我所见,香港专业教育学院做了我需要做的一切,我已经正确安装了tomcat 7,并且tomcat正在工作。据我所知,我需要将servlet.jar包添加到我的类路径中。似乎在我的系统上没有servlet.jar,但是我可以从tomcat docs中了解到它现在的servlet-api.jar。

我已经通过在/etc/environment编辑类路径来完成此操作:

PATH = “的/ usr / local / sbin中:在/ usr / local / bin中:/ usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中:在/ usr /游戏” CLASSPATH = “/ USR /共享/ tomcat7 / LIB / servlet的api.jar文件”

不幸的是,仍然没有运气,我无法编译java servlet,我仍然会收到有关javax.servlets缺少符号的警告。

我正在使用ubuntu 11.10 x64。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

  

我已经通过在/etc/environment编辑类路径来完成此操作:

     

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" CLASSPATH="/usr/share/tomcat7/lib/servlet-api.jar"

看起来很好。 PATH与特定问题无关。 Java没有以任何方式使用它。它仅供操作系统平台用于查找可执行文件。 CLASSPATH类似,但仅供Java使用以查找在编译和/或运行时使用的类。

您的问题很可能是因为您使用了-cp-classpath javac命令的参数。在这种情况下,CLASSPATH环境变量将被忽略(顺便说一下,这也适用于java命令,当使用-jar参数时也是如此。 / p>

您需要通过 指定类路径 CLASSPATH环境变量 -cp或{ {1}}论点。一般的建议是忘记-classpath环境变量,因为当你想要做的不仅仅是“Hello World”时,这被认为是一种糟糕的做法。您可以使用CLASSPATH-cp-classpath参数中指定多个路径。

:

如果您厌倦了每次重复输入,只需将其放在$ cd /path/to/package/root/of/your/servlet/code $ javac -cp .:/path/to/servlet-api.jar com/example/YourServlet.java 脚本中,或者使用Ant等构建工具(允许通过XML文件进行配置),或者只使用像Eclipse这样的IDE,Netbeans或IntelliJ,只需保存源文件即可自动完成。

答案 1 :(得分:2)

您不应该有CLASSPATH环境变量。

更好的方法是在编译时使用-classpath参数javac.exe,并在运行时使用java.exe。以这种方式添加Tomcat servlet-api.jar。

另一个建议是学习Ant。它是一个基于XML的XML驱动构建工具。它比Maven更容易学习和使用。我从那开始。

答案 2 :(得分:2)

javax.servletsservlet-api.jar中定义,因此您的问题必须以某种方式与您的配置相关。你用什么来编译?您是直接发布javac命令还是使用maven,ant或者eclipse等构建工具?我建议使用maven,因为它使用单个配置文件为您处理依赖关系。真的很容易拿起来。

在maven中,您需要首先安装/配置maven,然后使用set file结构启动项目(这是简化但足够的):

/src/main/java - The root of your java files
/src/main/webapp - The root of your webapp
/pom.xml - Maven configuration file

因此,servlet的完整文件列表可能是:

/src/main/java/com/mycompany/myapp/MyServlet.java
/src/main/webapp/WEB-INF/web.xml
/src/main/webapp/index.jsp
/pom.xml

前3行(根文件结构除外)与任何Web应用程序相同,最后一个是您的配置文件,如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany</groupId>
  <artifactId>myapp</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <type>jar</type>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

这里的重要部分是对servlet-api的依赖是由maven处理的,所以不需要下载它,或者设置类路径或任何东西。设置此文件结构并编辑pom后,只需将控制台导航到根目录并键入mvn package即可。这将下载你的依赖项,编译你的代码,打包你的战争。还有很多maven提供的修改非常少。相比之下,蚂蚁需要这样:

待添加