0

GWT+GAE アプリに 2 つのサーブレットがあります。1 つは、クライアントからのすべての呼び出しを処理する「MyServlet extends RemoteServiceServlet」です。もう 1 つは、「Upload extends HTTPServlet」で、ここで説明されているようにクライアントから投稿されたファイルを処理します

Upload サーブレットから、MyServlet に設定されたオブジェクトにアクセスするにはどうすればよいですか?

//
//MyServlet extends RemoteServiceServlet
//
public User login(String username, String password) {
    User user = null;
    PersistenceManager pm = PMF.get().getPersistenceManager();

    Query query = pm.newQuery(User.class, "username == '" + username + "' && password == '" + password + "'");
    List<User> users = (List<User>) query.execute();
    if (!users.isEmpty()) {
        user = new User();
        User userDB = users.get(0);
        user.setUsername(userDB.getUsername());
        getThreadLocalRequest().getSession().setAttribute("user", user);
    }

    pm.close();
    return user;
}
public void doSomething() {
    //Never returns null. This is good.
    User user = getThreadLocalRequest().getSession().getAttribute("user"); 
    ....
}

//
//Upload extends HTTPServlet
//
public void doPost(HttpServletRequest req, HttpServletResponse res) {
    // Always returns null. WHY?!?
    req.getSession().getAttribute("user");
    ....
}
4

1 に答える 1

0

getThreadLocalRequest()このメソッドは GWT の RemoteServiceServlet によって提供されるため、GWT 以外の HttpServlet を呼び出すことはできません。標準サーブレットでは、代わりに doGet() または doPost() メソッドに渡された request オブジェクトを使用する必要があります。次に例を示します。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
    if(request.getSession().getAttribute("user")==null) return;
}
于 2012-09-25T14:41:40.580 に答える