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