1) Определение каждого сервлета состоит из двух частей: 1) привязка класса сервлета к логическому имени и 2) сопоставление этого логического имени с URL-адресами.
В вашем web.xml вы определили только 2-ую часть. Теперь вы должны добавить туда также имя класса сервлета. Если вы сохраните логическое имя «default», добавьте следующий код:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>sk.simo.Greeting</servlet-class>
</servlet>
2) В качестве альтернативы используйте @WebServlet(value="/greeting")
. Но затем удалите свое отображение сервлета из web.xml.
3) Независимо от ответов выше, важно сопоставление папок с корневым контекстом. Если вы не изменили его (я полагаю, что нет, это хорошо), то путь "/ usr / share / tomcat / webapps / приветствие" означает, что все в вашем приложении доступно через URL-адреса, которые иметь контекстный корень "/ приветствие". Это означает, что если вы хотите вызвать сервлет через "/ приветствие / привет", сервлет должен быть отображен в "/ привет", а не в "/ приветствие" и не в "/ приветствие / привет". Поэтому используйте в вашем сервлете следующее: @WebServlet(value="/hi")
. Это можно назвать через "... / приветствие / привет".