Подтвердить что ты не робот

Tomcat Servlet: ошибка 404 - запрошенный ресурс недоступен

Я совершенно новичок в написании Java-сервлета, и я стараюсь, чтобы простой пример HelloWorld работал правильно.

Класс HelloWorld.java:

package crunch;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("Hello World");
  }
}

Я запускаю Tomcat v7.0 и уже прочитал похожие вопросы, с ответами на изменение раздела invoker servlet-mapping в web.xml, этот раздел на самом деле не существует у меня, и когда я добавил это та же проблема все еще произошла.

4b9b3361

Ответ 1

попробуйте это (если Java EE V6)

package crunch;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
@WebServlet(name="hello",urlPatterns={"/hello"})
public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("Hello World");
  }
}

теперь достиг сервлета http://127.0.0.1:8080/yourapp/hello

где 8080 - порт tomcat по умолчанию, а yourapp - это имя контекста вашего приложения

Ответ 2

Вам определенно нужно отобразить сервлет на некоторый URL. Если вы используете Java EE 6 (это означает, по крайней мере, Servlet API 3.0), вы можете аннотировать свой сервлет, например

@WebServlet(name="helloServlet", urlPatterns={"/hello"})
public class HelloWorld extends HttpServlet {
     //rest of the class

Затем вы можете просто перейти к localhost:8080/yourApp/hello, и значение должно быть отображено. Если вы не можете использовать API Servlet 3.0, то вам необходимо зарегистрировать этот сервлет в файле web.xml, например

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>crunch.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

Ответ 3

Написание Java-сервлетов легко, если вы используете Java EE 7

@WebServlet("/hello-world")
public class HelloWorld extends HttpServlet {
  @Override
  public void doGet(HttpServletRequest request, 
                  HttpServletResponse response) {
   response.setContentType("text/html");
   PrintWriter out = response.getWriter();
   out.println("Hello World");
   out.flush();
  }
}

Так как сервлет 3.0

Хорошей новостью является дескриптор развертывания больше не требуется!

Прочтите учебник для Java Servlets.

Ответ 4

это может быть связано с тем, что вы создали свой .jsp или .html файл в WEB-INF, а не в папке WebContent.

Решение. Просто замените файлы, которые находятся в папке WEB-INF, в папку Webcontent и попробуйте выполнить то же самое - вы получите соответствующий выход

Ответ 5

Вы должны указать пользователю.. /../projectName/Filename.jsp в своем действии attr. или href

../= содержит текущую папку simple (demo.project.filename.jsp)

Сервлет может быть вызван только с 1 косой чертой вперед к имени вашего проекта.

Ответ 6

Для тех, кто придерживается "Запрошенный ресурс недоступен" в Java EE 7 и динамическом веб-модуле 3.x, возможно, это может помочь: мастер "Создать сервлет" в Eclipse (проверен на Марсе) не создает @Path для класса сервлета, но я должен был включить его для успешного доступа к открытым публичным методам.