GWT+GAE: атрибут сеанса, установленный в RemoteServiceServlet, имеет значение null при доступе из обычного HTTPServlet.

У меня есть два сервлета в моем приложении GWT+GAE. Одним из них является «MyServlet extends RemoteServiceServlet», который обрабатывает все вызовы от клиента. А другой — «Загрузка расширяет HTTPServlet» — обрабатывает файлы, отправленные клиентом, как описано здесь: https://developers.google.com/appengine/docs/java/blobstore/overview

Как я могу получить доступ к объекту, установленному в MyServlet, из сервлета Upload?

//
//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");
    ....
}

person lembas    schedule 25.09.2012    source источник


Ответы (1)


Вы не можете вызвать getThreadLocalRequest() в HttpServlet, отличном от GWT, так как этот метод предоставляется RemoteServiceServlet GWT. В стандартном сервлете вы должны вместо этого использовать объект запроса, переданный методу doGet() или doPost(), например:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
    if(request.getSession().getAttribute("user")==null) return;
}
person David Levesque    schedule 25.09.2012
comment
request.getSession().getAttribute(user) также возвращает null. Сеансы не распределяются между двумя сервлетами? - person lembas; 26.09.2012
comment
Проблема решена. Это произошло из-за ошибки Blobstoreservice. Подробности здесь: stackoverflow.com/questions/7476420/< /а> - person lembas; 26.09.2012