изменить конекстный путь приложения в tomcat?
От: BeerKiller  
Дата: 15.05.07 08:13
Оценка:
Добрый день!

я использую tomcat 6.0.10. у меня есть варик foo.war, что надо сделать чтобы это приложение после деплоя было доступно по пути http://localhost/myapp?

я нашел один способ: в server.xml в томкате надо в тег host добавить элемен: <Context path="/myapp" docBase="foo"/>.
после чего приложение доступно и по localhost/foo и по localhost/myapp — это не очень устраивает + еще одно проблема: если запускать сервер с такой конфигурацией без задеплоенного приложения в webapp то при старте повалятся ошибки о том что папка foo не существует и редеплоить приложение тоже не получается, т.к. в docBase прописана папка, которая должна быть удалена при андеплоее. да и вобщем-то не очень хорошо это в самом server.xml писать, хотелось бы чтобы таки вещи целиком от приложения (варика) зависели. много где натыкался на способ с добавлением в папку META-INF файла context.xml в war файле. этот context.xml должен содержать: <Context path="/myapp" docBase="foo"/>, но это не работает. т.е. context.xml копируется в conf/catalina/... куда надо и переименовывается в foo.xml, но по /myapp к приложению не достучаться.

подскажите что можно сделать?

спасибо!
Re: изменить конекстный путь приложения в tomcat?
От: mrkam  
Дата: 15.05.07 20:04
Оценка:
С помощью NetBeans 5.0 я создал Web Application для Tomcat 5.5.9

В нем есть файл web > META-INF > context.xml следующего содержания:

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



Таким образом задан контекстный путь для этого приложения.
Re[2]: изменить конекстный путь приложения в tomcat?
От: BeerKiller  
Дата: 16.05.07 06:00
Оценка:
Здравствуйте, mrkam, Вы писали:

M>Таким образом задан контекстный путь для этого приложения.


а это работает? т.е. ты если варик кинешь в webapp в томкате то зайдешь в это приложение по пути http://localhost:8080/WebApplication1 ?

у меня не получается, я попадаю на страницу с ошибкой 404...

я набросал маленький пример:

структура каталогов:

build.xml
src
 |+-META-INF
 |  +-context.xml
 |+-WEB-INF
 |  +-web.xml
 |index.html


содержание файлов:

context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp"/>


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

    <display-name>test</display-name>
    <description>test</description>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>


index.html
<html>
  <head>
    <title>hello</title>
  </head>
  <body>
    <h1>hello!</h1>
  </body>
</html>


buld.xml — war соберется антом просто по команде ant
<?xml version="1.0" encoding="windows-1251"?>
<project name="test" default="dist" basedir=".">
    <target name="dist" depends="clean">
        <war basedir="src" destfile="test.war" webxml="src/WEB-INF/web.xml"/>
    </target>
    <target name="clean">
        <delete file="test.war"/>
    </target>
</project>


я пробовал деплоить получающийся test.war на tomcatы 5.5.29 и 6.0.10. в обоих случаях я попадаю на нужную страницу по пути http://localhost:8080/test и вижу 404 ошибку по пути http://localhost:8080/myapp

что я делаю не так?
Re[3]: изменить конекстный путь приложения в tomcat?
От: mrkam  
Дата: 16.05.07 06:18
Оценка:
BK>а это работает? т.е. ты если варик кинешь в webapp в томкате то зайдешь в это приложение по пути http://localhost:8080/WebApplication1 ?

У меня работает. Вот так выглядит структура war-файла:

WebApplication1.war
 |+- META-INF
 |   +- MANIFEST.MF
 |   +- context.xml
 |+- WEB-INF
 |   +- classes
 |   +- web.xml
 | index.jsp
Re[4]: изменить конекстный путь приложения в tomcat?
От: BeerKiller  
Дата: 16.05.07 07:59
Оценка:
Здравствуйте, mrkam, Вы писали:

M>У меня работает. Вот так выглядит структура war-файла:


M>
M>WebApplication1.war
M> |+- META-INF
M> |   +- MANIFEST.MF
M> |   +- context.xml
M> |+- WEB-INF
M> |   +- classes
M> |   +- web.xml
M> | index.jsp
M>


я сейчас поставил нетбинс 5.0rc2, создал web application все как ты говоришь. но только деплоит он не вар файл, если псомотреть в C:\Documents and Settings\user_name\.netbeans\5.0rc2\jakarta-tomcat-5.5.9_base\conf\Catalina\localhost\ (по дефолту путь такой) будет лежать файл, который называется [context_paht].xml, где [context_paht] — это контекстный путь из context.xml из WebApplication1.war/META-INF\context.xml из атрибута path. в этом же файле указан атрибут docBase, который указывает на папку web (опять же если все по дефолту), которая лежит по пути C:\Documents and Settings\user_naem\WebApplication1\web, в то время как в папке webapp самого томката ничего нет (ни кем не тронутый war лежит все это время в C:\Documents and Settings\user_naem\WebApplication1\dist)

вот тут http://tomcat.apache.org/tomcat-6.0-doc/config/context.html написано:

in individual files (with a ".xml" extension) in the $CATALINA_HOME/conf/[enginename]/[hostname]/ directory. The name of the file (less the .xml) extension will be used as the context path. Multi-level context paths may be defined using #, e.g. context#path.xml. The default web application may be defined by using a file called ROOT.xml.

поэтому если указать контекстный путь, отличный от названия war файла нетбинс положит context.xml из META-INF с нужныйм именем в jakarta-tomcat-5.5.9_base\conf\Catalina\localhost\ и поэтому оно и работает. если брать тот полученный war файл и деплоить его — ничего не заработает. вернее заработает как я писал раньше — в jakarta-tomcat-5.5.9_base\conf\Catalina\localhost\ появится xml файл с именем как у war файла и контекстный путь для этого приложения будет такой же как и имя war файла, при этом будет проигнорирован атрибут path в war_file_name.xml (бывшем context.xml). в этом то и проблема.

так как все-таки изменить поведение tomcatа чтобы он из готового war файла делал примерно то же самое что и netbeans? при этом на самом деле даже не важно, положит ли он что-либо в webapp, главное чтобы приложение задеплоилось (пусть даже по указанному абсолютному пути) и было дуступно по указанному контекстному пути
Re[5]: изменить конекстный путь приложения в tomcat?
От: mrkam  
Дата: 17.05.07 12:11
Оценка:
BK>так как все-таки изменить поведение tomcatа чтобы он из готового war файла делал примерно то же самое что и netbeans? при этом на самом деле даже не важно, положит ли он что-либо в webapp, главное чтобы приложение задеплоилось (пусть даже по указанному абсолютному пути) и было дуступно по указанному контекстному пути

Похоже, Tomcat работает не совсем так, как должен. Рекомендую почитать вот эту доку: http://localhost:8080/tomcat-docs/deployer-howto.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.