Развертывание приложения Struts2 в Weblogic 12c

У меня есть веб-приложение, использующее Struts2, Spring и JPA. В приложении мы используем аннотации. Когда мы развертываем приложение в eclipse, если мы развертываем его как виртуальное приложение (щелкните правой кнопкой мыши сервер, выберите свойства, выберите WebLogic, выберите режим публикации), приложение работает нормально. Эта опция создает файл _auto_generated_ear и нормально запускает приложение. Когда я развертываю его в виде развернутого архива или вручную развертываю приложение в виде файла .war через консоль администратора, я получаю следующее сообщение об ошибке:

Может ли какой-нибудь гуру WebLogic указать мне правильное направление в этом вопросе? Есть ли проблема с подключаемым модулем Convention для Struts2, работающим в WebLogic? Любая помощь будет принята с благодарностью. Заранее спасибо.

Обновлено:

веб.xml

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>eServices</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Needed to manage the Java based @Configuration classes for Spring -->
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
         org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </context-param>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>com.ceiwc.es.config</param-value>
    </context-param>

    <!-- Handles Strut2 URL requests -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <session-config>
        <session-timeout>20</session-timeout>
    </session-config>
</web-app>

Вот решение, которое, наконец, сработало! Я добавил следующие свойства Struts2:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <!-- Struts Constants that override the struts.properties file -->
    <constant name="struts.devMode" value="false" />
    <constant name="struts.custom.i18n.resources" value="global" />
    <constant name="struts.ui.theme" value="simple" />

</struts>

person NuAlphaMan    schedule 15.09.2014    source источник


Ответы (2)


Это было основано на том, что я нашел в этом сообщении.

<constant name="struts.convention.action.includeJars" value=".*?\.jar(!/|/)?" />
<constant name="struts.convention.action.fileProtocols" value="jar,zip" />

Также может помочь добавление этого свойства в weblogic.xml:

Мне не нужно было делать это с моим проектом.

<wls:container-descriptor>
    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>

Я надеюсь, что это поможет кому-то в будущем!

Убедитесь, что

<constant name="struts.convention.action.includeJars" value=".*?\.jar(!/|/)?" />
<constant name="struts.convention.action.fileProtocols" value="jar,zip" />
(независимо от того, используете ли вы Конвенцию) находится в папке
<wls:container-descriptor>
    <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
</wls:container-descriptor>
вашего файла WAR.

person NuAlphaMan    schedule 18.09.2014
comment
Первый блок в struts.xml помог. Все еще удивляюсь, почему мне нужно так много приспособлений для перехода с Tomcat на Weblogic. В Tomcat все работало как шарм. +1 - person Andrea Ligios; 30.09.2014
comment
он находится в папке WEB-INF\classes. - person Mr. Nobody; 11.10.2019

Я пропустил конец истории. +1 Тогда :)

person Andrea Ligios    schedule 16.09.2014
comment
Можете ли вы опубликовать свои файлы Web.xml и struts.Xml? - person NuAlphaMan; 16.09.2014
comment
Эта проблема была опубликована несколько раз, так и не найдя решения ... Я подозреваю, что это связано с порядком объявления фильтров, но на всякий случай, можете ли вы опубликовать свои аннотации действия входа в систему? - person Andrea Ligios; 16.09.2014
comment
@NuAlphaMan: Порядок имеет значение. Изменяет ли weblogic web.xml при развертывании проекта? - person Andrea Ligios; 17.09.2014
comment
@AleksandrM Вы предполагаете, что у меня есть файл web.xml в неправильном порядке? Если да, то каким должен быть предлагаемый порядок? Я не верю, что Weblogic изменяет файл. Есть ли способ проверить это? - person Aleksandr M; 17.09.2014
comment
@AndreaLigios: я использую конфигурацию Spring Java. Это пакет, в котором можно найти класс конфигурации для Spring. - person NuAlphaMan; 17.09.2014
comment
Пожалуйста, попробуйте поставить _1_ после части параметра контекста. - person NuAlphaMan; 17.09.2014
comment
Это тоже не сработало. Я попытался переместить его до и после фильтра Struts. - person Andrea Ligios; 17.09.2014
comment
[[АКТИВНО] ExecuteThread: '8' для очереди: 'weblogic.kernel.Default (самонастраивающийся)'] ПРЕДУПРЕЖДЕНИЕ org.apache.struts2.dispatcher.Dispatcher - Не удалось найти действие или результат: /eServices/login.action нет действия, сопоставленного для пространства имен [/] и имени действия [логин], связанного с контекстным путем [/eServices]. - [неизвестное местоположение] в com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) в org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) в org.apache.struts2.impl. StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37) в com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) в org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:552) в org.apache .struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) в org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) в weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.java:56) в oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:111) в java.security.AccessController.doPrivileged(собственный метод) в oracle.security.jps.util. JpsSubject.doAsPrivileged(JpsSu bject.java:313) в oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413) в oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94) в oracle .security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:161) в oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71) в weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.java:56) в oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:136) в weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) в weblogic.servlet.internal.WebAppServletContext$ ServletInvocationAction.wrapRun(WebAppServletContext.java:3715) в weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681) в weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) в weblogic .security.service.SecurityManager.runAs(SecurityManager.java:120) у нас blogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277) в weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183) в weblogic.servlet.internal. ServletRequestImpl.run(ServletRequestImpl.java:1454) в weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) в weblogic.work.ExecuteThread.run(ExecuteThread.java:178) - person NuAlphaMan; 17.09.2014