Сервлет 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
servlet-mapping
раздел в 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 - имя контекста вашего приложения.
Вам определенно нужно сопоставить свой сервлет с некоторым 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, вам нужно зарегистрировать этот сервлет в 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>
Написание 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-сервлетам.
Это может быть связано с тем, что вы создали свой файл.jsp или.html в WEB-INF вместо папки WebContent.
Решение: просто замените файлы, которые находятся в папке WEB-INF, на папку Webcontent и попробуйте выполнить то же самое - вы получите соответствующий вывод
Вы должны использовать../../projectName/Filename.jsp в вашем действии attr. или HREF
../ = содержит текущую простую папку (demo.project.filename.jsp)
Сервлет может быть вызван только с 1 косой чертой в названии вашего проекта.
Для тех, кто застрял с "Запрошенный ресурс недоступен" в Java EE 7 и динамическом веб-модуле 3.x, возможно, это могло бы помочь: мастер "Создание сервлета" в Eclipse (протестирован на Mars) не создает аннотацию @Path для класса сервлетов, но мне пришлось включить его для успешного доступа к открытым методам.
Моя проблема была в web.xml
файл. В одной <servlet-mapping>
внутри произошла ошибка <url-pattern>
: Я забыл добавить /
до URL