Добрый день!
я использую 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 к приложению не достучаться.
подскажите что можно сделать?
спасибо!
С помощью NetBeans 5.0 я создал Web Application для Tomcat 5.5.9
В нем есть файл web > META-INF > context.xml следующего содержания:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/WebApplication1"/>
Таким образом задан контекстный путь для этого приложения.
Здравствуйте, 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
что я делаю не так?
BK>а это работает? т.е. ты если варик кинешь в webapp в томкате то зайдешь в это приложение по пути http://localhost:8080/WebApplication1 ?
У меня работает. Вот так выглядит структура war-файла:
WebApplication1.war
|+- META-INF
| +- MANIFEST.MF
| +- context.xml
|+- WEB-INF
| +- classes
| +- web.xml
| index.jsp
Здравствуйте, 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, главное чтобы приложение задеплоилось (пусть даже по указанному абсолютному пути) и было дуступно по указанному контекстному пути
BK>так как все-таки изменить поведение tomcatа чтобы он из готового war файла делал примерно то же самое что и netbeans? при этом на самом деле даже не важно, положит ли он что-либо в webapp, главное чтобы приложение задеплоилось (пусть даже по указанному абсолютному пути) и было дуступно по указанному контекстному пути
Похоже, Tomcat работает не совсем так, как должен. Рекомендую почитать вот эту доку:
http://localhost:8080/tomcat-docs/deployer-howto.html