1

まず第一に、私の英語で申し訳ありませんが、私は Google 翻訳を使用しています。

私は Google App Engine を初めて使用し、ユーザーを配置しますが、最初にユーザーが既に存在することを確認する必要があり、メールで「一意のキーです」と書き留め、正しい方法で行っているかどうかを知らせます。

擬似コードは次のようになります。

クラス NewUser

if not exist mail
    put user to database
    return true
else
    return false

サーブレット挿入ユーザー:

if not NewUser.put
    redirect login.jsp
else
    redirect user.jsp

そして、これはコードです:

NewUser クラス:

public static boolean insert(String name, String mail, String password) {
    DatastoreService datastore = DatastoreServiceFactory
            .getDatastoreService();

    Key k = KeyFactory.createKey(User.class.getSimpleName(), mail);

    if (!userExist(k)) {
        Entity user = new Entity(k);
        user.setProperty("name", name);
        user.setProperty("password", Encrypt.MD5(password));
        datastore.put(user);
        return true;
    } else {
        return false;
    }

}

private static boolean userExist(Key key) {
    DatastoreService datastore = DatastoreServiceFactory
            .getDatastoreService();

    Query q = new Query(key).setKeysOnly();

    List<Entity> ent = datastore.prepare(q).asList(
            FetchOptions.Builder.withDefaults());

    return (ent.isEmpty() || ent == null) ? false : true;
}

そしてサーブレット:

public void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws IOException {
    resp.setContentType("text/plain");

    resp.sendRedirect(NewUser.insert(req.getParameter("name"),
            req.getParameter("mail"), req.getParameter("password")) ? "jsps/user.jsp"
            : "jsps/login.jsp");

}

クエリなしでメールをチェックするようにできますか?

このコードは機能しますが、改善する方法についての提案を探しています。

前もって感謝します。

4

1 に答える 1

0

エンティティが存在するかどうかを確認するには、次を使用できますget(key)

private static boolean userExist(Key key) {
    DatastoreService datastore = DatastoreServiceFactory
        .getDatastoreService();

    try {
        datastore.get(key);
    } catch (EntityNotFoundException e){
        return false;
    }
    return true;
}
于 2012-11-20T13:42:51.847 に答える