2011-04-22 43 views
0

我正在學習本教程Login,我正面臨一些困難。 我有一個MYSQL數據庫,我創建了一個ID,用戶名和密碼錶。 數據庫已啓動並正在運行。創建的的hibernate.cfg.xmlGWT - 登錄頁面執行與休眠不工作

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 

<session-factory> 
    <property name="connection.url">jdbc:mysql://localhost:3306/timetable</property> 
    <property name="connection.username">root</property> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="connection.password">k771u3</property> 
    <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 

    <property name="current_session_context_class">thread</property> 
    <!-- this will show us all sql statements --> 
    <property name="hibernate.show_sql">true</property> 

    <!-- mapping files --> 
    <mapping resource="User.hbm.xml" /> 
</session-factory> 
</hibernate-configuration> 

User.hbm.xml

<hibernate-mapping> 
    <class name="com.Logins.client.bean.User" table="username"> 
     <id name="id" column="id" type="int" unsaved-value="null"> 
      <generator class="native"/> 
     </id> 
     <property name="username" type="java.lang.String" column="username"/> 
     <property name="password" type="java.lang.String" column="password"/> 
    </class> 
</hibernate-mapping> 

Logins.java 包com.Logins.client;

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.Logins.client.bean.User; 
import com.Logins.client.screen.HomeScreen; 
import com.Logins.client.screen.LoginScreen; 

public class Logins implements EntryPoint { 

    private static Logins singleton; 
    public static Logins get(){ 
     return singleton; 
    } 

    @Override 
    public void onModuleLoad() { 
     singleton=this; 
      setLoginScreen(); 
    } 
    private void setLoginScreen() { 
      //Create the Login screen 
      LoginScreen scrLogin=new LoginScreen(); 
      //Attach it to the root panel 
      RootPanel.get().add(scrLogin); 
     } 
     public void setHomeScreen(User user) { 
      HomeScreen homeScreen=new HomeScreen(user); 
      RootPanel.get().clear(); 
      RootPanel.get().add(homeScreen); 
     } 
} 

GreetingService.java

package com.Logins.client; 

import com.Logins.client.bean.User; 
import com.google.gwt.user.client.rpc.RemoteService; 
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; 

@RemoteServiceRelativePath("greet") 
public interface GreetingService extends RemoteService { 
    public User checkLogin(String userName, String password); 
    public User isSessionAlive(); 
    void logout(); 
} 

GreetingServiceAsync.java

package com.Logins.client; 

import com.Logins.client.bean.User; 
import com.google.gwt.user.client.rpc.AsyncCallback; 

public interface GreetingServiceAsync { 
    public void checkLogin(String userName, String password, AsyncCallback callback); 
    public void isSessionAlive(AsyncCallback callback); 
    public void logout(AsyncCallback callback); 
} 

HomeScreen.java

package com.Logins.client.screen; 

import com.Logins.client.bean.User; 

public class HomeScreen extends Composite{ 

    public HomeScreen(User user) { 
     VerticalPanel vp=new VerticalPanel(); 
     Label lblWelcome=new Label(); 
     lblWelcome.setText("Hello "+user.getUserName()); 
     vp.add(lblWelcome); 
     initWidget(vp); 
    } 
} 

LoginScreen.java

package com.Logins.client.screen; 

import com.Logins.client.GreetingService; 

public class LoginScreen extends Composite{ 
    // TextBox for the User Name 
    private TextBox txtLogin=new TextBox(); 
    // PasswordTextBox for the password 
    private PasswordTextBox txtPassword=new PasswordTextBox(); 
    //Error Label 
    private Label lblError=new Label(); 

    public LoginScreen() { 
     // Lets add a grid to hold all our widgets 
     Grid grid = new Grid(4, 2); 
     //Set the error label 
     grid.setWidget(0,1, lblError); 
     //Add the Label for the username 
     grid.setWidget(1,0, new Label("Username")); 
     //Add the UserName textBox 
     grid.setWidget(1,1, txtLogin); 
     //Add the label for password 
     grid.setWidget(2,0, new Label("Password")); 
     //Add the password widget 
     grid.setWidget(2,1, txtPassword); 
     //Create a button 
     Button btnLogin=new Button("login"); 
     //Add the Login button to the form 
     grid.setWidget(3,1, btnLogin); 
     /*Add a click listener which is called 
     when the button is clicked */ 

     btnLogin.addClickHandler(new ClickHandler() { 

      @Override 
      public void onClick(ClickEvent event) { 
       checkLogin(txtLogin.getText(),txtPassword.getText()); 

      } 
     }); 
     initWidget(grid); 

    } 
    /* 
    * This method is called when the button is clicked 
    */ 

    private void checkLogin(String userName,String password) { 
     System.out.println("Checking login for "+userName); 

     /** 
     * Async call to the server to check for login 
     */ 
     AsyncCallback callback = new AsyncCallback() { 
      public void onSuccess(Object result) { 
       User user = (User) result; 
       if (user != null) { 
        setErrorText(""); 
        // The user is authenticated, Set the home screen 
        Logins.get().setHomeScreen(user); 
       } else { 
        setErrorText("Invalid UserName or Password"); 

       } 
      } 

      public void onFailure(Throwable ex) { 
       setErrorText("Error "+ex.getMessage()); 
      } 
     }; 

     getService().checkLogin(userName, password,callback); 

    } 
    private void setErrorText(String errorMessage) { 
     lblError.setText(errorMessage); 
    } 

    private GreetingServiceAsync getService() { 
     GreetingServiceAsync svc = (GreetingServiceAsync) GWT 
      .create(GreetingService.class); 
     ServiceDefTarget endpoint = (ServiceDefTarget) svc; 
     endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "/GreetingService"); 

     return svc; 
    } 
} 

GreetingServiceImpl.java

package com.Logins.server; 
import javax.servlet.http.HttpSession; 

import com.Logins.client.GreetingService; 
import com.Logins.client.bean.User; 
import com.google.gwt.user.server.rpc.RemoteServiceServlet; 

public class GreetingServiceImpl extends RemoteServiceServlet implements 
     GreetingService { 

    private static final String USER_SESSION = "GWTAppUser"; 
    private static final long serialVersionUID = 1; 

    private void setUserInSession(User user) { 
     HttpSession session = getThreadLocalRequest().getSession(); 
     session.setAttribute(USER_SESSION, user); 
    } 

    private User getUserFromSession() { 
     HttpSession session = getThreadLocalRequest().getSession(); 
     return (User) session.getAttribute(USER_SESSION); 
    } 

    public User checkLogin(String userName, String password) { 
     if (userName.equalsIgnoreCase("gwt")) { 
      User user = new User(); 
      user.setUserName(userName); 
      setUserInSession(user); 
      return user; 
     } else 
      return null; 
    } 

    @Override 
    public void logout() { 
     HttpSession session = getThreadLocalRequest().getSession(); 
     if (session != null) 
      session.invalidate();  
    } 

    @Override 
    public User isSessionAlive() { 
     User bean = getUserFromSession(); 
     if ((bean != null) && (bean.getUserName().length() != 0)) { 
      System.out.println("User " + bean.getUserName() 
        + " is already logged in"); 
      return bean; 
     } 
     return null; 

    } 

} 

的HibernateUtil

package util; 

import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class HibernateUtil { 
    private static final SessionFactory sessionFactory; 

     static { 
     try { 
      // Create the SessionFactory from hibernate.cfg.xml 
      sessionFactory = new Configuration().configure().buildSessionFactory(); 
     } catch (Throwable ex) { 
      // Make sure you log the exception, as it might be swallowed 
      System.err.println("Initial SessionFactory creation failed." + ex); 
      throw new ExceptionInInitializerError(ex); 
     } 
     } 

     public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
     } 
} 

User.java

package com.Logins.client.bean; 
import java.io.Serializable; 
public class User implements Serializable{ 
    /** 
    * Add this variable for serialization 
    */ 
    private static final long serialVersionUID = 1L; 

    private String userName; 
    private String password; 

    public String getUserName() { 
     return userName; 
    } 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
} 

當我運行作爲Web應用程序「出現在HTML表單,但是當我輸入憑據,用戶名和密碼,出現此錯誤:

錯誤404 HTML頭元HTTP- equiv =「Content-Type」content =「text/html; charset = ISO-8859-1「/ titleError 404 NOT_FOUND/title/head bodyh2HTTP ERROR:404/h2preNOT_FOUND/pre pRequestURI =/logins // GreetingService/ppismalla href =」http://jetty.mortbay.org/「Powered by Jetty :/// a/small/i/pbr/br/br/br/br/。/體/ HTML

如果有人可以幫助我弄清楚什麼是錯的或剩下來實現,會很高興這是對我很重要謝謝

控制檯錯誤:

Reloading web app to reflect changes in C:\Users\Martinho\Documents\SpringWorkSpace\Logins\war 
[WARN] Server class 'com.google.gwt.dev.shell.jetty.JDBCUnloader' could not be found in the web app, but was found on the system classpath 
    [WARN] Adding classpath entry 'file:/C:/springsource/sts-2.6.0.RELEASE/plugins/com.google.gwt.eclipse.sdkbundle_2.2.0.v201103311225/gwt-2.2.0/gwt-dev.jar' to the web app classpath for this session 
    For additional info see: file:/C:/springsource/sts-2.6.0.RELEASE/plugins/com.google.gwt.eclipse.sdkbundle_2.2.0.v201103311225/gwt-2.2.0/doc/helpInfo/webAppClassPath.html 
    Reload completed successfully 
Checking login for 
[WARN] 404 - POST /logins//GreetingService (127.0.0.1) 1409 bytes 
    Request headers 
     Host: 127.0.0.1:8888 
     Connection: keep-alive 
     Referer: http://127.0.0.1:8888/Logins.html?gwt.codesvr=127.0.0.1:9997 
     Content-Length: 161 
     Origin: http://127.0.0.1:8888 
     X-GWT-Module-Base: http://127.0.0.1:8888/logins/ 
     X-GWT-Permutation: HostedMode 
     User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.0 Safari/534.30 
     Content-Type: text/x-gwt-rpc; charset=UTF-8 
     Accept: */* 
     Accept-Encoding: gzip,deflate,sdch 
     Accept-Language: pt-PT,pt;q=0.8,en-US;q=0.6,en;q=0.4 
     Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 
    Response headers 
     Content-Type: text/html; charset=iso-8859-1 
     Content-Length: 1409 
+0

你檢查了你的GWT模塊定義並啓動網頁。這些看起來像HTTP錯誤,我會檢查以確保您有良好的模塊定義等。 – karakuricoder 2011-04-22 11:37:03

+0

是的。我認爲一切都很好配置,無論是哪種情況下都不會顯示帶有窗體和按鈕等的HTML頁面。我按下按鈕登錄(客戶端調用服務器,服務器調用mysql數據庫)後發生錯誤...我認爲當客戶端連接到服務器時發生錯誤。 – 2011-04-22 18:49:27

回答

0

你註冊了你的服務在w eb.xml?它應該包含類似於

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaeeweb-app_2_5.xsd"> 

    <servlet> 
     <servlet-name>greet</servlet-name> 
     <servlet-class>com.Logins.server.GreetingServiceImpl</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>greet</servlet-name> 
     <url-pattern>/greet</url-pattern> 
    </servlet-mapping> 
</web-app> 
+0

是的,我做到了。 <! - 的Servlet - > greetServlet com.Logins.server.GreetingServiceImpl < Servlet映射> greetServlet /登錄/問候 <! - 默認頁面服務 - > Logins.html 2011-04-22 13:36:16

+0

它應該有多個.html文件嗎?像登錄表單和其他重定向一樣?我只有一個Logins.html,它加載沒有錯誤。只有當我輸入一些憑證並按下登錄按鈕時纔會出現錯誤。 – 2011-04-22 14:06:50

+0

嘗試用'endpoint.setServiceEntryPoint(GWT.getModuleBaseURL()+「greet」)替換服務端點的URL;' – Dirk 2011-04-22 18:53:39