2

次のリンクの helloworld の例についてです。

http://wicket.apache.org/learn/examples/helloworld.html

helloworld は正常に動作し、url: でアプリケーションを呼び出すことができますhttp://localhost:8080/helloworld/。ここで、2 番目のアプリケーションの例を拡張して、ブラウザーでhellowolrd2呼び出すhttp://localhost:8080/helloworld2/と、2 番目のページ helloworld2 (helloworld と同様) が表示されるようにします。ファイルHelloWorld2.javaHelloWorld2.html.web.xml ファイルで何を変更すればよいでしょうか?

4

2 に答える 2

3

で何も変更する必要はありませんweb.xml。そこで定義されている唯一の関連する設定は<filter-mapping>要素です

<filter-mapping>
    <filter-name>HelloWorldApplication</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

これは、アプリケーション (そのコンテキスト ルート) に対して行われたすべての要求 ( /*) を Wicket フィルター (サーブレットと考えてください) にマップします。Wicket フィルターは、すべての Wicket 要求を処理し、それらを適切なメソッド (コンポーネント コンストラクター、イベント ハンドラー メソッド、等。)。

この例では、が で定義されているホームページであるためHelloWorld、リクエスト時にが表示されます。は webapp のコンテキスト ルートであるため、Wicket は で定義されたページに自動的に移動します。http://localhost:8080/helloworld/HelloWorldWebApplicationhelloworldWebApplication#getHomePage()

@Override
public Class getHomePage() {
    return HelloWorld.class;
}

helloworldここにアプリケーションのコンテキスト ルートがあることに注意してください。したがって、何らかの基準に応じてクラスまたは別のクラスを返すロジックを定義したい場合を除きgetHomePage()(これが目的だとは思わないでください)、効果的に機能しHelloWorldます。

さて、あなたの質問に答えて、Wicket を使用すると、(ブックマーク可能な) ページを URL にマウントできますWebApplication#mountPage():

public class HelloWorldApplication extends WebApplication {
    @Override
    protected void init() {
        mountPage("/helloworld", HelloWorld.class);
        mountPage("/helloworld2", HelloWorld2.class);
    }

    @Override
    public Class getHomePage() {
        return HelloWorld.class;
    }
}

これにより、ホームページであるhttp://localhost:8080/helloworld/サーブクラスが作成されます。HelloWorldしかし、それを要求することもできhttp://localhost:8080/helloworld/helloworldます。リクエストhttp://localhost:8080/helloworld/helloworld2は効果的に役立ちHelloWorld2ます。

http://localhost:8080/helloworld2/または、本当にを提供したい場合はHelloWorld2、もちろん独自のweb.xmlと context-root を使用して、別の webapp をデプロイする必要がありますhelloworld2

于 2012-12-17T15:48:54.320 に答える
1

2 つのアプリケーションではなく、実際には 2 つのページがあります。最初の (helloworld) は、ホームページとして応答するようにマップされ、HelloWorldApplication で定義されました。

@Override
public Class getHomePage() {
    return HelloWorld.class;
}

localhost:8080/helloworld2/ が必要な場合は、HelloWorldApplication の init() メソッドでマッピングを作成するだけです

@Override
public void init() {
super.init();
this.mountPage("/helloworld2", Helloworld2.class);
}
于 2012-12-17T15:45:48.807 に答える