2015-12-10 3 views
3

Я пытаюсь создать встроенный Tomcat, работающий с Struts2.Как заставить встроенный Tomcat найти файл struts.xml?

Первым шагом было создание чистого встроенного Tomcat. Это было легко сделать, следуя этой обучающей программе:

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/basic_app_embedded_tomcat/basic_app-tomcat-embedded.html#section4

Теперь, чтобы поставить 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?

+0

Интересный эксперимент! –

+0

Не могли бы вы попытаться (просто посмотреть, что произойдет): 1) Измените имя пакета как в struts.xml, так и в аннотациях к чему-то, что не является 'default' и 2), если n.1 не работает, указать стек перехватчика с аннотациями непосредственно на файл действия? И в конечном итоге 3) удаление плагина конвенции и определение действия в struts.xml, чтобы обеспечить стойки.xml действительно не загружается и не игнорируется или перезаписывается плагином условного обозначения. –

+0

Привет Андреа. Файл struts.xml не читается ... Я могу полностью испортить этот файл (заполнить некоторым lorem ipsum) ... и ничего не происходит. –

ответ

0

Хотя он не будет отвечать на OP напрямую. Но желаемая цель создания исполняемого футляра может быть достигнута. Дальнейшие поисковые запросы Google могут извлечь выгоду из этого. Это работает с struts2, который я сделал.AFIK, он будет работать для любого веб-приложение.

С помощью tomcat7-maven-plugin это стало просто спокойным торт. Как упоминалось, here.

<plugin> 
    <groupId>org.apache.tomcat.maven</groupId> 
    <artifactId>tomcat7-maven-plugin</artifactId> 
    <version>2.1</version> 
    <executions> 
     <execution> 
     <id>tomcat-run</id> 
     <goals> 
      <goal>exec-war-only</goal> 
     </goals> 
     <phase>package</phase> 
     <configuration> 
      <path>/appName</path> 
      <enableNaming>false</enableNaming> 
      <finalName>appName.jar</finalName> 
      <charset>utf-8</charset> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Как уже упоминалось в here либо вы должны использовать 2.1 или 2.3, потому что 2,2 имеет ошибку. Согласно Tomcat Docs вы можете выбрать второстепенную версию tomcat, указав все зависимостей tomcat явно в плагине (я еще не пробовал).

Если вы запустите package цель в maven, он будет производить файл .jar в целевой папке. Вы можете запустить его, используя java -jar appName.jar

+0

Я думаю, вы пропустили вопрос. Я не могу найти никакой ссылки, чтобы заставить Struts2 работать в вашем ответе. –

+0

nope. Добавьте это, попробуйте с пакетом maven goal, он создаст толстую банку. вы можете запустить java -jar. Я использую struts2 и hibernate для своего веб-приложения. – udaybhaskar

+0

Так что мне просто нужно создать обычное Java-приложение (без встроенного Tomcat) и использовать POM, как это, и он станет автономным веб-приложением? Можете ли вы опубликовать свой POM со всеми соответствующими элементами, потому что я уже могу создать автономное приложение tomcat. Я просто не могу заставить Struts2 работать. –

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