URL-адрес с моим сервлетом? - PullRequest
0 голосов
/ 06 апреля 2010

Я использую GWT с GAE. Когда пользователь вводит любой из следующих URL-адресов, я хочу просто обслуживать свое приложение как обычно:

http://www.mysite.com/
http://www.mysite.com/dog
http://www.mysite.com/cat

первый случай работает по умолчанию. Я не уверен, как заставить работать случаи / собака и / кошка. Я думаю, что я должен изменить что-то с отображениями URL, чтобы заставить это работать в web.xml. По сути, я пытаюсь получить мое приложение с любым введенным URL:

http://www.mysite.com/*

Я пробую это с новым проектом, поэтому мой web.xml выглядит так:

<!-- Servlets -->
<servlet>
  <servlet-name>greetServlet</servlet-name>
  <servlet-class>com.me.test.server.GreetingServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>greetServlet</servlet-name>
  <url-pattern>/test/greet</url-pattern>
</servlet-mapping>

и теперь я добавил следующее:

<servlet>
  <servlet-name>servletGate</servlet-name>
  <servlet-class>com.me.test.server.ServletGate</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>servletGate</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

когда я ввожу URL, например:

http://localhost:8888/
http://localhost:8888/dog

Я получаю исключение нулевого указателя в строке doGet () здесь:

getServletConfig().getServletContext().getRequestDispatcher("test.html").forward(request,response);

что я пропустил?

Спасибо

1 Ответ

1 голос
/ 06 апреля 2010

Можете ли вы опубликовать свой текущий web.xml? Вы должны иметь возможность добавить отображение сервлета, например:

  <servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>com.example.MyServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

Затем вы бы написали простой сервлет, например:

public class MyServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException {

      getServletConfig().getServletContext().getRequestDispatcher(
        "/MyApplication.html").forward(request,response);

  }

}

Или вы также можете генерировать контент динамически, либо непосредственно в сервлете, либо в JSP, либо используя любую технику, которую вы предпочитаете - это часто очень полезно в любом случае!

В ответ на ваш комментарий:

Поскольку вы хотите отобразить каждый путь к сервлету, вы получаете бесконечный цикл. Решение с InputStream может выглядеть следующим образом:

public class SomeServlet extends HttpServlet {

    @Override
    protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
            throws ServletException,
            IOException {

        final InputStream is = getClass().getClassLoader().
                 getResourceAsStream("/com/example/MyApplication.html");
        final byte[] buffer = new byte[255];
        int len = 0;
        while ((len = is.read(buffer)) != -1) {
            response.getOutputStream().write(buffer, 0, len);
        }
        response.flushBuffer();

    }
}

Поместите файл MyApplication.html в исходную папку в пакете com.example.

Если вы не хотите помещать html-файл в исходную папку, вы также можете использовать любые другие средства для создания InputStream (например, из любого файла, использующего FileInputStream).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...