2012-02-08 2 views

ответ

57

Вам необходимо добавить путь к файлу Tomcat /lib/servlet-api.jar в путь класса компиляции.

javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServletClass.java 

Путь к классам - это то, где Java необходимо искать импортные зависимости. В противном случае это будет по умолчанию текущая папка, которая включена в этот пример как .. ; - разделитель путей для Windows; если вы используете ОС на базе Unix, тогда вам нужно вместо этого использовать :.

+2

верно, но в будущем рассмотреть возможность использования Maven для решения такого рода проблем для вас – Kris

+7

или просто IDE как Eclipse. Тем не менее, я рекомендую продолжать учиться, пока вы не сможете почти мечтать об этом. В противном случае будет трудно понять, как работают IDE под обложками. – BalusC

+0

спасибо BalusC. он решил проблему. – Karadous

6

Это JSP или сервлет?

Ну, эти два пакета фактически не встроены в Java, например java.io. Вместо этого они поставляются с веб-сервером, поддерживающим сервлеты (например, Tomcat). Поэтому, прежде чем компилятор Java сможет скомпилировать наш Servlet, нам нужно сообщить ему, где найти классы в этих двух пакетах.

Необходимые классы обычно хранятся в файле servlet.jar. Точное местоположение этого файла зависит от конкретного программного обеспечения веб-сервера, которое вы используете, но в случае Tomcat вы можете найти его в подкаталоге lib основного каталога установки Tomcat (например, d: \ Program Files \ Apache Group \ jakarta- кот-3.2.3 \ Lib \ servlet.jar). Чтобы компилятор Java мог компилировать сервлеты, вам нужно добавить этот файл в свой путь к Java-классу. По умолчанию Java ищет классы только в текущем каталоге («.»). Таким образом, "." это путь по умолчанию. Если вы измените путь к классу, чтобы включить файл servlet.jar (".; D: ... \ lib \ servlet.jar" под Windows ".:/Usr /.../ lib/servlet.jar" в Unix), то сервлет должен скомпилировать просто отлично.

Вы можете указать путь к классу использовать при запуске javac.exe следующим образом:

d:\javadev> javac -classpath ".;d:\Program Files\Apache Group\ jakarta-tomcat-3.2.3\lib\servlet.jar" MyServlet.java

Или в Linux Javac использует: вместо;

server1> javac -classpath ".:./servlet/servlet.jar" MyServlet.java

+0

Должен ли я делать это в любое время, когда я скомпилирую файл? Я имею в виду, есть способ установить classpath за все время, когда я компилирую файл. – Karadous

+0

Чтобы вы могли скомпилировать файл i.e. * .java, вы должны убедиться, что servlet.jar находится в пути к классам. Обратите внимание, что JSP в конечном итоге переходят на сервлеты, которые, скажем, файлы Java. – Frankline

+0

У кого-то есть совет: * «Если вы используете Windows: добавление d: \ Program Files \ Apache Group \ jakarta-tomcat-3.2.3 \ lib \ servlet.jar; в JAVA_HOME Variable также делает магию" * – Pubby

1

Добавить сервлет-api.jar в вашем пути к классам. Он будет доступен в папке lib Tomcat.

1

JSP и Servlet - это программирование на стороне сервера. Поскольку он поставляется в виде встроенного пакета внутри сервера, такого как Tomcat. Путь может быть как мудрый

C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\jsp-api.jar 
C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar 

Просто вы хотите сделать, это добавить это следующим образом

Right Click> My Computer>Advanced>Environment Variables>System variables 

Do> New..> Variable name:CLASSPATH 
      Variable value:CLASSPATH=.;C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar; 
5

В Linux-среде мягкая ссылка, по-видимому, не работает. вы должны использовать физический путь. например, на моей машине у меня есть программная ссылка на /usr/share/tomacat7/lib/servlet-api.jar, и использование этого в качестве аргумента classpath привело к сбою компиляции с той же ошибкой. вместо этого мне пришлось использовать /usr/share/java/tomcat-servlet-api-3.0.jar, который является файлом, на который указывает мягкая ссылка.

18

Если вы работаете с проектом maven, добавьте следующую зависимость к вашему pom.xml

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>provided</scope> 
</dependency> 
+2

эквивалент Gradle is 'dependencies { группа компиляции: 'javax.servlet', имя: 'servlet-api', версия: '2.4'}' – MarkHu

+0

все еще не работает для меня –

+0

Это работает для меня, большое спасибо –

0

Это то, что я нашел. Добавление /usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar в моей переменной среды как CLASSPATH. ОС - iOS.

при использовании Баш: ~/.bash_profile $CLASSPATH=/usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar

при использовании ЗШ: ~/.zshrc экспорт CLASSPATH="usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar"

Force это работает прямо сейчас, запустить source .bash_profile (или .zshrc) или можно перезапустить компьютер и он работает для текущего пользователя.

4

Это то, что решить эту проблему для меня:

<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope> 
</dependency> 
Смежные вопросы