2011-01-05 2 views
2

저는 여러 자습서를 읽고 code.google.com에서 공식 문서를 읽었지만이 문제를 해결할 수 없었습니다.GWT 서비스의 진입 점 설정에 문제가 있습니다.

사용자를 기록 할 수 있는지 확인하는 간단한 서비스를 만들고 있습니다.

클라이언트 측 :

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 여기

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); 
} 

그리고는 비동기 인터페이스입니다 . 여기에 추가처럼 위젯 :

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 

, 모르겠어요은 서비스의 진입 점을 설정하는 방법.

<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 인터페이스는 다음과 같아야합니다 귀하의 예제에서 그래서 :

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

는 또한 servlet 항목이 더 이상 *.gwt.xml 파일에 필요한 :

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

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

    boolean isValidUser(User user); 
} 

을이 변경 한 후에는이 라인을 삭제할 수 있습니다.따라서 다음 줄을 삭제할 수도 있습니다.

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

귀하의 web.xml은 괜찮아 보입니다.

Eclipe를 GWT plugin과 함께 사용하는 경우 간단한 GWT 프로젝트를 생성하여 볼 수 있습니다. 생성 된 프로젝트에는 서비스 생성 및 호출 방법을 보여주는 샘플 코드가 들어 있습니다. GWT 플러그인을 사용하지 않는다면 설치하는 것이 좋습니다 - 많은 도움이됩니다.

+0

안녕하세요, 실제로 게시 된 상태이지만 Tomcat에서만 작동합니다. 부두에 무슨 문제가 있는지 모르겠다. (기본 컨테이너로 생각하고 사용하는 플러그인과 함께 제공된다.) – 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

관련 문제