Сервлет 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.