Сервлет Tomcat: Ошибка 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 на web.xml, этот раздел на самом деле не существует в моем, и когда я добавил его, та же проблема все еще произошла.

7 ответов


попробуйте это (если 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-имя контекста вашего applciation


вам определенно нужно сопоставить сервлет с некоторым 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 и значение должно отображаться. Если вы не можете использовать Servlet 3.0 API, вам нужно зарегистрировать этот сервлет в как

<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>

написание 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-Сервлетов.


Это может быть связано с тем, что вы создали свой .ОСП или .html-файл в WEB-INF вместо WebContent.

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


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


вы должны пользователь ../../имя_проекта/именем.jsp в вашем действии attr. и href

../ = содержит текущую папку simple (demo.проект.имя файла.jsp)

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


моя проблема была в . В одном <servlet-mapping> внутри была ошибка <url-pattern>: забыл добавить / перед url.