Servlet 3.0 API - Регистрация сервлета

я разрабатываю пример сервлета на tomcat 7.0.37 и eclipse 3.7. Моя текущая проблема состоит в том, чтобы заставить его работать :(

//...imports and so on...

@WebServlet(value="/Hello")
public class AdminServlet extends HttpServlet
{
    private static final long serialVersionUID = -1139419481702036147L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        super.doGet(req, resp);

        PrintWriter writer = resp.getWriter();
        writer.write("HelloWorld");
        writer.close();
    }
}

Когда я вызываю URL-адрес "http://localhost:8080/{webappname}/Hello", окно превращается в «Статус 404 — Ресурс недоступен». Что-то не так?

Это как в большинстве примеров Servlet 3.0 :(


person George Krause    schedule 29.03.2013    source источник
comment
Вы уверены, что приложение развернуто на сервере и запущено?   -  person Apurv    schedule 29.03.2013
comment
конечно ... лог-файл сказал это ;-)   -  person George Krause    schedule 29.03.2013


Ответы (4)


Ниже приведены некоторые из причин:

  • Убедитесь, что ваш контейнер сервлетов поддерживает Servlet 3.0. Большинство из них должны поддерживать,
  • Убедитесь, что ваш файл web.xml имеет версию 3.0. Для версии web.xml ‹ 3.0 аннотации могут не обрабатываться.
  • Убедитесь, что атрибут завершения метаданных имеет значение false. Если это правда, аннотация может не обработаться.
person Ramesh PVK    schedule 29.03.2013
comment
В вопросе говорится, что он использует Tomcat 7, поэтому первая причина уже устранена. - person mthmulders; 29.03.2013
comment
Итак, в общем смысле, это могут быть следующие две причины. - person Ramesh PVK; 29.03.2013

Создайте {webappname}.war, поместите его в каталог webapps и перезапустите сервер.

person Roman C    schedule 29.03.2013

Проблема в том, что вы не сопоставляете сервлет с правильным шаблоном URL. Имя сервлета должно быть сопоставлено с шаблоном URL. Но в вашем коде это не сделано.

Чтобы сделать это правильно, используя аннотации, см. следующее.

@WebServlet( name="AdminServlet", displayName="Admin Servlet", urlPatterns ={"/Hello","*.do"})
public class AdminServlet
person karthick    schedule 29.03.2013
comment
Я установил только JDK 7 - person George Krause; 29.03.2013
comment
@GeorgeKrause: убедитесь, что ваш Java_Home указывает на этот SDK, а не на JRE по умолчанию в вашей системе. - person karthick; 29.03.2013
comment
Он указывает на SDK - person George Krause; 29.03.2013
comment
@GeorgeKrause: Нашел проблему. я обновил ответ - person karthick; 29.03.2013

Я нашел свою проблему: мне пришлось удалить "super().doGet();"

person George Krause    schedule 29.03.2013
comment
Но как это работало без правильного сопоставления URL-адресов? - person karthick; 29.03.2013