Struts 1 — мое веб-приложение не находит struts-taglib.jar

Я использую Struts-1. Я разработал веб-приложение на основе struts. Я использую теги struts на своих страницах JSP, предоставленных в struts-taglib.jar, вставляя следующие строки в файл JSP:

<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>

Теперь приложение работает нормально, когда я запускаю его в своей локальной системе, но когда я развертываю его на сервере, оно показывает следующее исключение:

org.apache.jasper.JasperException: The absolute uri: http://struts.apache.org/tags-html cannot be resolved in either web.xml or the jar files deployed with this application

Из приведенного выше исключения кажется, что приложение не нашло файл struts-taglib.jar.

Но я поместил struts-taglib.jar в каталог /WEB-INF/lib. Тогда в чем проблема?

Примечание. Вы также можете просмотреть Java — проблема с развертыванием веб-приложения для получения дополнительной информации. Информация


person Yatendra    schedule 14.03.2010    source источник
comment
Какой именно struts-taglib.jar вы скачали? Можете ли вы опубликовать ссылку на скачивание / инструкции здесь?   -  person BalusC    schedule 14.03.2010
comment
@BalusC Я скачал Struts 1.3.10, и имя файла jar taglib — struts-taglib-1.3.10.jar   -  person Yatendra    schedule 14.03.2010
comment
Извините, я упустил из виду важный момент, что он работает @local, но не работает @prod. Тогда я больше не знаю, ожидаю, что может быть конфликт в пути к классам или на самом деле плохое/неправильное развертывание.   -  person BalusC    schedule 15.03.2010
comment
У меня нет записей пути к классам в файле манифеста файла war, поэтому путь к классам не определен явно, поэтому я думаю, что в пути к классам нет конфликта... Что касается развертывания, я вставил тот же файл war на сервере, который я вставил на свой локальный сервер. Тогда где может быть проблема?   -  person Yatendra    schedule 16.03.2010
comment
Можете ли вы опубликовать содержимое своих записей taglib в web.xml?   -  person Shivasubramanian A    schedule 16.03.2010
comment
У меня нет записей taglib в моем файле web.xml. Файл tld, на который ссылается uri директивы taglib, содержит тот же uri, что и указанный в директиве taglib...   -  person Yatendra    schedule 16.03.2010
comment
@shivaubramanian, пожалуйста, смотрите комментарий @BalusC к ответу @josek   -  person Yatendra    schedule 16.03.2010
comment
Содержит ли ваш файл tags-html элемент uri, определенный как struts.apache.org/tags-html ?   -  person Valentin Jacquemin    schedule 17.03.2010


Ответы (5)


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

Я бы посоветовал вам открыть struts-taglib.jar, открыть .tld для библиотеки тегов и убедиться, что значение ‹uri›, которое вы найдете в корне ‹taglib›, соответствует uri для данного префикса в ваших JSP. Я предполагаю, что URI не совпадает, что означает, что загрузчик классов не сможет найти библиотеку тегов, даже если JAR находится в CLASSPATH.

Это также может указывать на то, что изменение версии привело к рассинхронизации URI в JAR и JSP.

Я только что скачал struts-1.3.10-all.zip и посмотрел содержащийся внутри struts-logic.tld. Значение тега <uri> равно http://struts.apache.org/tags-logic, так что, похоже, у вас все в порядке.

Файлы .tld выглядят так, как будто они извлечены из JAR. Найдите их в папке .\src\el\src\main\resources\META-INF\tld, поместите их в /WEB-INF и явно укажите на них в файле web.xml. Это должно вас устроить.

Я не верю, что .tld в web.xml больше необходим, но если идея URI не срабатывает, вы можете попробовать добавить что-то похожее на этот пример из «JSTL в действии» в ваш web.xml (соответственно измененный):

<taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>

Это может быть связано с тем, что Struts 1.0 на данный момент довольно устарел. Упаковка .tld в JAR taglib стала обычной практикой после разработки Struts 1.0.

person duffymo    schedule 23.03.2010
comment
Я получал эту ошибку, несмотря на наличие банки. Затем исправлено в соответствии с вашим ответом, и ошибка исправлена. - person Rumel; 11.09.2016

Есть ли /WEB-INF/lib в вашем пути к классам?

person Tom    schedule 14.03.2010
comment
Я думаю, что это путь к классам по умолчанию для любого веб-приложения. Должен ли быть какой-либо файл, который определяет путь к классам любого веб-приложения. В моем приложении нет такого файла. Я разработал его в Eclipse, а в Eclipse да `/WEB-INF/lib был в моем пути к классам. - person Yatendra; 14.03.2010
comment
Точно. Вам не нужно ничего менять, чтобы получить WEB-INF/lib и WEB-INF/classes в вашем веб-приложении CLASSPATH. Это значение по умолчанию. - person duffymo; 23.03.2010

После развертывания файл jar находится в /WEB-INF/lib? Если нет, будет ли установка вручную решить проблему?

person kukudas    schedule 18.03.2010

Дважды проверьте свой URI и URI в файле TLD из struts-taglib.jar.

Обратите внимание, что URI был недавно изменен: http://wiki.apache.org/struts/StrutsUpgradeNotes12to13

person lzap    schedule 08.12.2010
comment
Обратите внимание, что URI изменился с версии 1.2! - person lzap; 08.12.2010

Убедитесь, что ваш struts-taglib-1.3.10.jar находится непосредственно в /WEB-INF/lib, а не в какой-либо подпапке, такой как /WEB-INF/lib/struts.

person Nguyen Tri Tin    schedule 11.12.2010