0

サーブレットと JSP のみを使用する既存の Web アプリケーションがあります。

現在、Tapestry 5 を使用して Web アプリを構築していますが、アプリケーション内のいくつかの URL だけに Tapestry を統合する方法があるかどうか疑問に思っていました。

これを行うことは可能ですか?Tapestry のドキュメントで見つかりません。

一部解決済み

わかりました、それは私がこれまでにやったことです。Tapestry 5 Web サイトの JARS を /WEB-INF/lib フォルダーに追加し、Tomcat が ClassNotFoundErrors をスローしていたため、Hibernate バリデーターと Hibernate ORM の JARS も追加しました。

web.xml ファイルを変更し、これを追加しました。

それが私の問題に対する解決策だと思います。ただし、問題が 1 つあります。既存の Web アプリは、依存関係の管理に Maven を使用していません。そこで、Tapestry5 のダウンロードからすべての JARS を WEB-INF フォルダー内の lib フォルダーに含めました。この情報を使用して web.xml ファイルを変更しました。

<context-param>
    <param-name>tapestry.app-package</param-name>
    <param-value>be.blauweregen.ledenplatform</param-value>
</context-param>
<filter>
    <filter-name>app</filter-name>
    <filter-class>org.apache.tapestry5.TapestryFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>app</filter-name>
    <url-pattern>/tapestry5/*</url-pattern>
</filter-mapping>

私が理解しているように、ルートパスが /tapestry5 の URL のみが Tapestry によって処理されます。

次に、be.blauweregen.ledenplatform.servicesEclipse 内の src フォルダーにパッケージを追加し、AppModule.javaそのパッケージに次の内容のクラスファイルを追加しました。

package be.blauweregen.ledenplatform.services;

import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.ioc.MappedConfiguration;
import org.apache.tapestry5.ioc.annotations.Contribute;
import org.apache.tapestry5.ioc.services.ApplicationDefaults;
import org.apache.tapestry5.ioc.services.SymbolProvider;

public class AppModule {
    @Contribute(SymbolProvider.class)
    @ApplicationDefaults
    public static void applicationDefaults(MappedConfiguration<String, String> configuration) {
        configuration.add(SymbolConstants.APPLICATION_FOLDER, "tapestry5");
    }
}

ローカル Tomcat 7.0.42 サーバーの Eclipse 内でアプリケーションを起動すると、Tomcat の起動時に次の例外が発生します。

SEVERE: Exception starting filter app
java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
    at java.lang.Class.privateGetPublicMethods(Class.java:2641)
    at java.lang.Class.getMethods(Class.java:1457)
    at com.zeroturnaround.javarebel.Ce.b(JRebel:461)
    at com.zeroturnaround.javarebel.Ce.a(JRebel:183)
    at com.zeroturnaround.javarebel.Ce.getMethods(JRebel:611)
    at java.lang.Class.getMethods(Class.java)
    at org.apache.tapestry5.ioc.internal.DefaultModuleDefImpl.<init>(DefaultModuleDefImpl.java:115)
    at org.apache.tapestry5.ioc.RegistryBuilder.add(RegistryBuilder.java:131)
    at org.apache.tapestry5.ioc.RegistryBuilder.add(RegistryBuilder.java:159)
    at org.apache.tapestry5.ioc.IOCUtilities.addModulesInList(IOCUtilities.java:137)
    at org.apache.tapestry5.ioc.IOCUtilities.addModulesInManifest(IOCUtilities.java:107)
    at org.apache.tapestry5.ioc.IOCUtilities.addDefaultModules(IOCUtilities.java:77)
    at org.apache.tapestry5.internal.TapestryAppInitializer.<init>(TapestryAppInitializer.java:124)
    at org.apache.tapestry5.TapestryFilter.init(TapestryFilter.java:103)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    ... 29 more

これを修正する方法を見つけないでください。

4

3 に答える 3

2

1 つのオプションは、タペストリーの処理をルート コンテキスト ( /)のままにし、無視するパスを指示することです。

別のオプションは、タペストリーをサブフォルダー内で実行するように構成することです

于 2013-11-07T07:37:40.790 に答える
2

Tapestry は、現在の JSP やサーブレットと同じアプリケーション内で簡単に実行できます。あなたがする必要があるのは、あなたの web.xmlTapestryFilterでそれを必要とする URL のみに をマップするか、特定のパスを無視するようタペストリーに指示することだけです。

Tapestry はサーブレット仕様と HttpSession を使用するため、セッションを簡単に取得して、Tapestry と JSP アプリケーションの間で情報を共有できます。「統合」とはどういう意味ですか?それ以外の場合、これはあなたが得る答えの詳細です;-)

于 2013-11-07T07:39:24.923 に答える
0

依存関係管理ツール ( gradlemavenivyなど) を使用するのではなく、クラスパスに手動で jar を追加しているようです。

推移的な依存関係を手動で決定して追加する必要があるため、この方法で作業するのは非常に困難です。一部を見逃すのは非常に簡単です。

タペストリー スプリング ジャーを追加したが、NoClassDefFoundError の原因となっているスプリング ジャーを追加するのを忘れていたと思います。

適切な依存関係管理ツールを使用して Web アプリケーションを構築することをお勧めします。

于 2013-11-12T09:44:20.273 に答える