2010-03-16 3 views
0

Я создал веб-приложение Java и упаковал его в файл .war и протестировал его на моем локальном сервере tomcat, и он работает нормально.Java - проблема при развертывании веб-приложения

Но когда я развернул его на сервере моего клиента, он обнаружил ошибку. Согласно удаленному серверу (серверу моего клиента), он не находит файл tld, упакованный в файл jar, который я разместил в каталоге WEB-INF/lib. Но когда я проверил каталог WEB-INF/lib для файла jar, я обнаружил, что он был там.

Содержание META-INF/MANIFEST.MF выглядит следующим образом:

Manifest-Version: 1.0 
Class-Path: 

Я думаю, что нет необходимости явно упоминать путь к классам WEB-INF/lib каталога, который находится в пути к классам любого веб-приложения по умолчанию.

Тогда почему сервер не может найти файл jar в каталоге lib, когда я развернул его на удаленном сервере и почему он работает, когда я развернул то же приложение на своем локальном сервере.

Я задал вопрос для этого на Struts 1 - struts-taglib.jar is not being found by my web application, но обнаружил, что проблема необычна, так как никто не мог ответить на нее.

Так мои вопросы заключаются в следующем:

Q1. WEB-INF/lib все еще остается в пути к классам, если я оставляю пустую строку пути пути, как показано выше, в файле MANIFEST.MF, или я должен полностью удалить запись пути к классу из файла, или я должен явно ввести Class-Path: /WEB-INF/lib в качестве записи пути к классу?

Q2. У меня есть JSP страниц, Servlet и некоторые вспомогательные классы в веб-приложении. Страницы Jsp расположены в корне. Сервлеты и вспомогательные классы находятся в папке WEB-INF/classes. Итак, есть ли какие-либо проблемы, если мои вспомогательные классы находятся в папке WEB-INF/classes?

Примечание: Обратите внимание, что этот вопрос не такой, как мой предыдущий вопрос. Это вопрос о моем предыдущем вопросе.

Оба сервера (локальные и удаленные) являются серверами tomcat.

+0

Попробуйте дать classpath явно. – Zaki

+2

один из классических, «я клянусь, что работаю на моей машине») :) – medopal

+1

@medopal ничего смешного здесь ...не публикуйте бесполезные комментарии –

ответ

1

Не создавайте пустую запись Class-Path в манифесте, просто удалите ее! Обычно вам не нужна запись Class-Path в webapp. Эта запись более обычна для запущенных банок.

Нет проблем с вашими вспомогательными классами. WEB-INF/classes всегда является первой записью пути classpath, за которой следуют банки WEB-INF/lib. Таким образом, JSP, скомпилированные контейнером, не должны иметь prblem, используя классы, включенные в него.

Вы уже указали свои taglib в web.xml с соответствующими taglib-location?

+0

Все это правильно. Я добавлю, что, по-моему, файлы .tld принадлежат WEB-INF, а не WEB-INF/lib. –

-1

Это может произойти, особенно в производстве, если точки TagLib-местоположение на место Интернета (т.е. с HTTP) и производственные коробки не могут быть в состоянии получить доступ к Интернету (из-за многие ограничения брандмауэра)

+0

Видимо, кто-то отклонил подобное предложение, но я очень уверен, что однажды столкнулся с этой проблемой с помощью spring & activemq-core-5.2.0.jar, где он проверяет элементы схемы. Эта банка содержит файл spring.schemas со входом http \: //activemq.apache.org/schema/core/activemq-core.xsd=activemq.xsd (что указывает весной о том, где найти файл xsd), но я неправильно поместил URL-адрес схемы .../activemq-core-5.2.0.xsd –

+1

значение url атрибута uri не означает, что серверу необходимо получить доступ к Интернету, чтобы найти tld-файл. Файлы Tld имеют свой собственный uri, который должен соответствовать URL-адресу директивы taglib, которая будет включена –

Смежные вопросы