Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > run HelloWorld servlet by Jetty


Автор: _ren_ 9.5.2007, 18:19
Привет.
Вопрос новичка.
Взял пример простейшего сервлета:

Код

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;


public class TestServlet extends HttpServlet
{
    /* ------------------------------------------------------------ */
    public void init(ServletConfig config) throws ServletException
    {
     super.init(config);
    }

    /* ------------------------------------------------------------ */
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        doGet(request, response);
    }

    /* ------------------------------------------------------------ */
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        response.setContentType("text/html");
        ServletOutputStream out = response.getOutputStream();
        out.println("<html>");
        out.println("<h1>Hello World</h1>");
        out.println("</html>");
        out.flush();
    }    
}


Захотел запустить это дело под Jetty-6.1.0.
Посмотрел README.txt у Jetty:

"Jetty depends ONLY on a jre 1.4 runtime and the three jars found in
the top level of the $JETTY_HOME/lib directory:

  servlet-api-2.5-$VERSION.jar
  jetty-$VERSION.jar
  jetty-util-$VERSION.jar"

Соответственно, собрал класс TestServlet с подключением библиотек
servlet-api-2.5.jar и rt.jar из jre 1.4.

Поместил TestServlet.class в 
\jetty-6.1.0\webapps\test\WEB-INF\classes\com\acme\

Добавил в \jetty-6.1.0\webapps\test\WEB-INF\web.xml новые данные:

Код

  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.acme.TestServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/hi/*</url-pattern>
  </servlet-mapping>


Запустил Jetty и получил в ответ пакет ругани,
начинающийся с:
Error starting handlers java.lang.NoClassDefFoundError:
com/acme/TestServlet (wrong name TestServlet)

После этого Jetty перестала "видеть" и предустановленные
сервлеты-примеры, выдавая ERROR 404 на обращение к
http://localhost:8080/

Был бы благодарен за подсказку: в чём здесь может быть загвоздка.
Спасибо.

Автор: Stampede 9.5.2007, 18:30
_ren_, чтобы твой класс TestServlet распознавался под полным именем com.acme.TestServlet, недостаточно просто поместить его в директорию com/acme. Надо еще в исходнике прописать название пакета. Первой строчкой пишешь:

Код

package com.acme;

// и далее по тексту
import javax.servlet.*;
import javax.servlet.http.*;
...


В остальном все вроде нормально.

ЗЫ. Пользуйся подсветкой синтаксиса (кнопка "Код") - так гораздо удобнеее читать.

Автор: _ren_ 9.5.2007, 19:34
Stampede, спасибо за совет!
Jetty ругаться перестала.
Но по-прежнему игнорирует новый сервлет, несмотря на то,
что код у него тот же, что и в предустановленном у Jetty
сервлете HelloWorld (лишь названия и url-pattern разные)
- задача пока просто оживить тот же код самостоятельно.

Автор: Stampede 9.5.2007, 20:04
Цитата(_ren_ @  9.5.2007,  10:34 Найти цитируемый пост)
Jetty ругаться перестала.
Но по-прежнему игнорирует новый сервлет


Какой адрес вводишь в адресной строке браузера и что видишь в окне?

Автор: _ren_ 9.5.2007, 20:11
> Какой адрес

http://localhost:8080/hi/

В браузере:

HTTP ERROR: 404

NOT_FOUND

RequestURI=/hi/

Powered by jetty://

Автор: Stampede 9.5.2007, 20:24
Должен быть такой: http://localhost:8080/test/hi/

Это потому что все приложение развернуто под webapps/test

Автор: _ren_ 9.5.2007, 20:50
 smile Порядок!

Автор: v2v 29.6.2007, 10:21
Цитата(_ren_ @ 9.5.2007,  18:19)
Добавил в \jetty-6.1.0\webapps\test\WEB-INF\web.xml новые данные:

Код

  <servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>com.acme.TestServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/hi/*</url-pattern>
  </servlet-mapping>




Как я понял при создании каждого нового сервлета надо добавлять такой кусок кода, а нет каких то автоматических средств, что делали бы это сами?
(Сервер Tomcat)

Автор: batigoal 1.7.2007, 13:40
Цитата(v2v @  29.6.2007,  11:21 Найти цитируемый пост)
Как я понял при создании каждого нового сервлета надо добавлять такой кусок кода, а нет каких то автоматических средств, что делали бы это сами?

В различных IDE обычно есть (xто-нибудь типа New --> Servlet Class).

Автор: v2v 1.7.2007, 19:59
не юзаю ide. пыаюся все нюансы разобрать вручную...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)