2011-01-05 28 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 。我在這裏追加小部件,如:

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

現在我需要做的實際調用我的服務,這裏是問題:

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 

因此,要回顧一下,我不知道如何設置服務的入口點

這是我的MailClient.gwt.xml文件:

<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註釋爲每個服務設置一次。所以,在你的榜樣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"); 

也不再需要在*.gwt.xml文件servlet條目。所以你也可以刪除這一行:

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

你的web.xml看起來沒問題。

如果您使用Eclipe與GWT plugin您可以生成一個簡單的GWT項目並查看它 - 生成的項目包含示例代碼,顯示如何創建和調用服務。如果你不使用GWT插件,我強烈建議安裝它 - 它會幫助你很多。

+0

嗨,它實際上工作,因爲我張貼,但只在Tomcat。我不知道Jetty有什麼問題(它與我認爲用作默認容器的插件一起發貨)... – Xorty 2011-01-06 00:03:57

0

服務條目點是你的服務器上存在servlet的地方,通常在web.xml文件中配置。

這裏有一個比較舊的教程,但servlet的配置仍然是相關的:

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

+0

@pulazoo我添加了web.xml發佈,仍然沒有任何結果 – Xorty 2011-01-05 21:49:04

+0

它實際上是部署在Tomcat上時工作。但它沒有調試時(Jetty,谷歌插件的Eclipse) – Xorty 2011-01-05 22:00:34