4

Springを使用して完全に機能するデモサーバー/クライアントアプリのペアがあります(のみ!)-CXFまたはWSDLは含まれていません。ApacheTomcat7.0.34を使用して実行されます。

ブラウザ()にその存在の痕跡が見られるかどうかhttp://localhost:8080/知りたいのですが、ソースコード(チュートリアルから逐語的にコピー)にURLのヒントが見つかりませんでした。

次に、エンドポイントのURLを取得する方法を提供するこのスレッドを見つけました。

TransportContext tc = TransportContextHolder.getTransportContext();
WebServiceConnection wc = tc.getConnection();
URI uri = wc.getUri();

これをデモ/チュートリアルクライアントのコードに追加しました。最初のステートメント(getTransportContext())は例外をスローしませんが、nullを返すため、2番目のステートメント()はgetConnection()NullPointerExceptionをスローします。

なんで?

「純粋な」SpringベースのサーブレットにはエンドポイントURLがありませんか?

そうでない場合、私は何が欠けていますか?サービスのURLを取得する方法は何ですか?

クライアントがコンテキストパスBeanID (共有beans.xmlで定義されている)によってサーバーについて知っていることを私は知っています:

ClassPathXmlApplicationContext appContext = 
      new ClassPathXmlApplicationContext( new String[] {"/sample/spring/beans.xml" } );

しかし、これに相当するURLはありませんか?WSDLのように?

4

1 に答える 1

1

@GreyBeardedGeekのコメントに同意します。SpringWebアプリ(一般にJavaサーブレットWebアプリ)にはエンドポイントURLの概念はありません。

ユーザーがアプリにアクセスするために使用したURLをランタイムで検索する必要がある場合は、getRemoteAddr()、getRemoteHost()、getURL()、getContextPath()などのServletRequest / HttpServletRequestメソッドを使用できます。例:

@RequestMapping("/home")
public String home(HttpServletRequest req) {
  String host =  req.getRemoteHost();
  // ...
}

ただし、リバースプロキシ/ DNS CNameが設定されている場合など、複数のURLが同じTomcatサーバーを指す可能性があることに注意してください。そして、それはあなたのために異なるURLを生み出すかもしれません(またはそうでないかもしれません)。

于 2013-06-03T06:54:20.460 に答える