2011-01-05 11 views
2

私はいくつかのチュートリアルに続き、code.google.comの公式ドキュメントを読んでいますが、それでも解決できませんでした。GWTサービスのエントリポイントの設定に問題があります

ユーザーをログに記録できるかどうかを確認する簡単なサービスを作成しています。

クライアント側:

public interface LoginService extends RemoteService { 

    /** 
    * Checks, if user has valid login. 
    * @param user User's login. 
    * @return True if such a login is in the database. 
    */ 
    boolean isValidUser(User user); 
} 

そして、ここでは、非同期インタフェースです:

public interface LoginServiceAsync { 

    /** 
    * Checks, if user has valid login. 
    * @param user User's login. 
    * @param callback the callback to return True if such a login is in the database. 
    */ 
    void isValidUser(User user, AsyncCallback<Boolean> callback); 
} 

サーバ側:

public class LoginServiceImpl extends RemoteServiceServlet implements LoginService { 

    /** 
    * serial version UID 
    */ 
    private static final long serialVersionUID = 1044980345057997696L; 

    /**{@inheritDoc} */ 
    @Override 
    public boolean isValidUser(User user) { 
     boolean success = true; //TODO change 
    } 

} 

今私は、エントリポイントクラスMailClient.javaを持っています。私にはわからない

LoginServiceAsync loginService = (LoginServiceAsync) GWT.create(LoginService.class); 
       User user = new User(boxName.getText(), boxPassword.getText()); 
       AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() { 

        @Override 
        public void onFailure(Throwable caught) { 
         Window.alert(caught.getMessage()); //TODO change 
        } 

        @Override 
        public void onSuccess(Boolean result) { 
         Window.alert("success"); //TODO change 
        } 
       }; 
       ((ServiceDefTarget) loginService).setServiceEntryPoint(GWT.getModuleBaseURL()+"login"); // dunno what should be here 

要約するので、:今、私は私のサービスへの実際の呼び出しを行う必要があり

CustomWidgets.getLoginWidget(this); // access rootPanel and append widget

、ここで問題がある:私はここに追加するようにウィジェットサービスのエントリポイントを設定する方法

<module> 
    <inherits name="com.google.gwt.user.User"/> 
    <inherits name="com.google.gwt.user.theme.standard.Standard"/> 
    <entry-point class="com.xorty.mailclient.client.MailClient"/> 
    <servlet path="/login" 
     class="com.xorty.mailclient.server.servlets.LoginServiceImpl" /> 
    <inherits name="com.xorty.mailclient.MailClient"/> 
    <inherits name="com.xorty.mailclient.MailClient"/> 
    <inherits name="com.xorty.mailclient.MailClient"/> 
    <inherits name="com.xorty.mailclient.MailClient"/> 
    <inherits name="com.xorty.mailclient.MailClient"/> 
</module> 

私のweb.xmlファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
      http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <!-- Default page to serve --> 
    <welcome-file-list> 
     <welcome-file>MailClient.html</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <servlet-name>LoginService</servlet-name> 
     <servlet-class>com.xorty.mailclient.server.servlets.LoginServiceImpl</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>LoginService</servlet-name> 
     <url-pattern>/com.xorty.mailclient.MailClient/login</url-pattern> 
    </servlet-mapping> 
</web-app> 

そしてここにあるプロジェクト構造のスクリーンショット: alt text

答えて

2

あなたは"login"代わりのGWT.getModuleBaseURL() + "login"にあなたのエントリポイントを設定してみてくださいすることができます:ここで

はかなり古いチュートリアルが、サーブレット構成は、まだ関連性があるのです。

しかし、古いGWT APIを使用しているように思われるため、少しリファクタリングすることをおすすめします。 GWT 1.6から、サービスを呼び出すときにEntryPointを設定する必要がなくなりました。今や、エントリポイントは、サービスインターフェイスのRemoteServiceRelativePath注釈を使用して各サービスに対して1回(通常は設定する必要があります)設定できます。だからあなたの例ではLoginServiceインタフェースは次のようになります。この変更後

import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; 

@RemoteServiceRelativePath("login") 
public interface LoginService extends RemoteService { 

    boolean isValidUser(User user); 
} 

をあなたはこの行を削除することはできません。

((ServiceDefTarget) loginService).setServiceEntryPoint(GWT.getModuleBaseURL()+"login"); 

またservletエントリはもはや*.gwt.xmlファイルで必要とされます。したがって、この行を削除することもできます:

<servlet path="/login" class="com.xorty.mailclient.server.servlets.LoginServiceImpl" /> 

あなたのweb.xmlはOKです。

GWT pluginでEclipeを使用している場合は、単純なGWTプロジェクトを生成し、それを見ることができます。生成されたプロジェクトには、サービスをどのように作成して呼び出すかを示すサンプルコードが含まれています。 GWTプラグインを使用していない場合は、インストールを強くお勧めします。

+0

こんにちは、実際には私が投稿したように動作していますが、Tomcatのみで動作します。私はJettyに何が間違っているのかを知らない(それは、私が思うに、デフォルトのコンテナとして使用するプラグインに同梱されている)... – Xorty

0

サービスエントリ

は、ここに私のMailClient.gwt.xmlファイルですpointはサーブレットがサーバー上に存在する場所で、通常はweb.xmlファイルで構成されます。

http://lkamal.blogspot.com/2008/09/java-gwt-servlets-web-app-tutorial.html

+0

@pulazoo投稿するにはweb.xmlを追加しましたが、まだ何もありません – Xorty

+0

Tomcatにデプロイすると実際に動作します。しかし、それはデバッグ時(Jetty、Eclipse用Googleプラグイン) – Xorty

関連する問題