Tomcat 6 не распознает - PullRequest
       3

Tomcat 6 не распознает

2 голосов
/ 07 августа 2011

У меня есть то, что я считаю самым простым Привет мир пример (см. ниже). Но когда просят "http://localhost:8080/hello" через Firefox, это дает мне «Запрошенный ресурс (/ hello /) недоступен» ошибка.

Среда: недавно установленный tomcat 6.0.32 в Windows 7.

Другая информация: 1. Ни один из «похожих вопросов» не дает никаких подсказок.

  1. Из экспериментов выясняется, что кот не делать сопоставление с localhost: 8080 / привет моему сервлету.

  2. Я установил «<загрузка при запуске>» который показал мне, что запись инициализации сервлета была вызывается, но doGet () никогда не вызывается.

  3. В файлах журнала нет ошибок.

  4. Я попробовал оба начальных tomcat с привет каталог уже в веб-приложениях, с hello.war в веб-приложений и развертывание с помощью приложения менеджера. Все действуют одинаково.

Некоторые возможности, которые я рассмотрел:

  1. Согласно документации, я должен не нужно использовать файл context.xml и мои эксперименты с context.xml произвел тот же ресурс не найден ошибка.

  2. localhost: 8080 / Привет должен быть localhost: 8080 /.../ привет, но если так, то что ... должно быть?

  3. Трейлинг / (например / привет против / привет /). Я изменился шаблон URL для "/ hello / *", но он не работает способ.

Полагаю, проблема в чем-то простом, но я не могу посмотри.

[Добавлено 8.08.2011] Ответы об использовании context.xml были правильными; Благодарю. Оглядываясь вокруг, кажется, что альтернативный путь чтобы достичь того же эффекта, это поставить в мой файл web.xml.

<context-param>
<param-name>ContextPath</param-name>
<param-value>/dts</param-value>
</context-param>

web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>test.HelloServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

HelloServlet.java: пакетный тест;

import java.io.*;

import javax.servlet.http.*;
import javax.servlet.*;

public class HelloServlet extends HttpServlet {

  public void init()
  {
    System.out.println("\nHelloServlet.init");
  }

  public void doGet (HttpServletRequest req,
                     HttpServletResponse res)
    throws ServletException, IOException
  {
    System.out.println("\nHelloServlet.doGet");
    PrintWriter out = res.getWriter();
    out.println("Hello, world!");
    out.close();
  }
}

Ответы [ 4 ]

4 голосов
/ 08 августа 2011

С приложением сервлетов Java (частью, но не общей суммой Java EE - Java Enterprise Edition) приложения имеют сервлеты под так называемым «контекстным путем».Этот «контекстный путь» должен быть указан для сопоставления любого запроса приложению.

Apache Tomcat делает этот путь контекста довольно простым в настройке, либо через server.xml (не рекомендуется), либо через отдельные файлы контекста (рекомендуется).Оба способа указывают, где найти каталог веб-приложения (распакованный архив веб-приложения или файл WAR) и где разместить его на сервере по контекстному пути.

Как уже сказал Влад, если вы развернете свойфайл war в каталоге веб-приложений Tomcat и при автоматической установке (я полагаю, он включен по умолчанию), Tomcat распакует .war в каталог под этим местоположением и использует имя войны в качестве пути к контексту.Его пример файла war называется «helloapp.war», поэтому с настройками по умолчанию он получит любой запрос на http://localhost:8080/helloapp, потому что его путь к контексту становится helloapp.

Конечно, после отправки запроса напуть контекста, что-то должно соответствовать этому.Вот тут и начинает играть web.xml.Хотя в качестве сопоставителя можно использовать корень (каждый запрос к пути контекста обрабатывается одним и тем же процессом), обычно используется шаблон (например, * .do, * .action и т. Д.), Так что отдельные запросыhelloapp легко различим (по моему мнению, его легче читать и отлаживать http://localhost:8080/helloapp/login.action и http://localhost:8080/helloapp/doSomethingElse.action, чем то, что распознается через некоторые параметры и тот же путь http://localhost:8080/helloapp)

Итак, путь к контекстув вашем приложении, то ваше приложение должно выполнить поиск в файле web.xml, чтобы увидеть, куда отправить фактический запрос.В вашем примере, если ваше веб-приложение было развернуто по контекстному пути helloapp, для доступа к нему с надлежащим отображением вы просто добавили бы / hello, поэтому запрос становится http://localhost:8080/helloapp/hello

2 голосов
/ 07 августа 2011

Вы развертываете свой hello сервлет в веб-приложении.Предполагая, что веб-приложение находится в папке helloapp или в архиве helloapp.war в папке webapps Tomcat, ваш сервлет будет доступен по адресу http://localhost:8080/helloapp/hello

1 голос
/ 07 августа 2011

Вам потребуется либо переименовать пакет в ROOT.war (или каталог ROOT), либо изменить файл ROOT.xml context.xml, чтобы он указывал на папку приветствия.

0 голосов
/ 07 августа 2011

Если вы перейдете в / привет / привет, держу пари, вы увидите свое приложение. Если вы используете tomcat, используйте context.xml. Вам может не понадобиться использовать его для работы веб-приложения, но если вы развернете под tomcat, то все будет работать более согласованно, когда у вас есть файл context.xml.

В / yourtomcatinstall / webapps / hello / META-INF / создайте файл context.xml с этой информацией "

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/hello">
</Context>

И измените отображение URL вашего сервлета в web.xml на / и / или / * вы можете иметь более одного отображения URL для сервлета.

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