Я пытаюсь создать встроенный Tomcat, работающий с Struts2.Как заставить встроенный Tomcat найти файл struts.xml?
Первым шагом было создание чистого встроенного Tomcat. Это было легко сделать, следуя этой обучающей программе:
Теперь, чтобы поставить Struts2 на работу, следующий шаг должен был добавить эти библиотеки Struts в POM файл.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.20</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.20</version>
</dependency>
Кусок торта! Следующий шаг: добавьте фильтр Struts в web.xml. Легко, но ... Embedded Tomcat не загружает файл web.xml! Неважно что я делаю. Решение: создать папку в папке целевой JAR, называемый resources
, поместите файл web.xml там и добавить этот код к классу сервера стартера:
tomcat.getHost().setAppBase(appBase);
StandardContext ctx = (StandardContext) tomcat.addWebapp(contextPath, appBase);
((StandardJarScanner) ctx.getJarScanner()).setScanAllDirectories(true);
ctx.getServletContext().setAttribute(Globals.ALT_DD_ATTR, "resources/web.xml");
tomcat.start();
Это загрузит web.xml из внешней папки. Отлично. Теперь я могу загрузить struts libs. Я вижу это, просматривая журнал сервера. Здесь есть все загрузочные материалы.
Следующий шаг: настройка перехватчика. В нормальном случае мне нужно поместить файл struts.xml в папку `src \ main \ resources '(Eclipse). Поэтому я пробовал это и не работал.
В файле struts.xml имеется только тег перехватчика, указывающий на класс, реализующий Interceptor. Мне нравится использовать аннотации для настройки Actions, поэтому у меня нет тегов Actions в этом файле. Этот файл struts.xml и класс перехватчика поступают из другой системы, и я очень хорошо ее работаю. Очень просто.
Проблема: файл struts.xml не загружается. Я могу понять, что, отправив выходы из метода перехватчика intercept
и перепутав файл struts.xml (изменив имя класса перехватчика на несуществующий, испортив структуру тегов и т. Д.).
Мой вопрос: как я могу сказать встроенному Tomcat загрузить файл struts.xml или, точнее, как я могу сказать, что механизм struts работает в расположении struts.xml?
Интересный эксперимент! –
Не могли бы вы попытаться (просто посмотреть, что произойдет): 1) Измените имя пакета как в struts.xml, так и в аннотациях к чему-то, что не является 'default' и 2), если n.1 не работает, указать стек перехватчика с аннотациями непосредственно на файл действия? И в конечном итоге 3) удаление плагина конвенции и определение действия в struts.xml, чтобы обеспечить стойки.xml действительно не загружается и не игнорируется или перезаписывается плагином условного обозначения. –
Привет Андреа. Файл struts.xml не читается ... Я могу полностью испортить этот файл (заполнить некоторым lorem ipsum) ... и ничего не происходит. –