Вы должны поместить классы сервлетов в пакет. Работают ли сервлеты без пакетов, зависит от конкретной комбинации более старой версии Tomcat и JVM. Если вы видите этот пример в книге / учебнике, то он, безусловно, сильно устарел.
package com.example;
// ...
public class Ch1Servlet extends HttpServlet {
// ...
}
У вас должен быть файл /com/example/Ch1Servlet.java
. Скомпилируйте его следующим образом
javac -classpath /usr/share/tomcat7/common/lib/servlet-api.jar -d classes src/com/example/Ch1servlet.java
(мне, однако, интересно, что там делает библиотека common
, это было типично для Tomcat 4.x / 5.x, но ее нет со времен Tomcat 6. Если вы вручную изменили структуру Tomcat, чтобы следуйте инструкциям устаревшего учебника, отменить it!)
Поместите папку com
с сгенерированным классом по его объему в папку /WEB-INF/classes
вашего веб-приложения. Таким образом, вы должны иметь /WEB-INF/classes/com/example/Ch1Servlet.class
.
Затем отредактируйте /WEB-INF/web.xml
, указав полное имя (FQN) класса сервлета в <servlet-class>
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
>
<servlet>
<servlet-name>Chapter1 Servlet</servlet-name>
<servlet-class>com.example.Ch1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Chapter1 Servlet</servlet-name>
<url-pattern>/Serv1</url-pattern>
</servlet-mapping>
</web-app>
(обратите внимание, что я также исправил декларацию root для соответствия поддерживаемой версии сервлета Tomcat 7, в противном случае использовался бы режим наименьшей совместимости)