【问题标题】:GWT+GAE: Session attribute, which is set in a RemoteServiceServlet, is null when access from a regular HTTPServletGWT+GAE:在 RemoteServiceServlet 中设置的会话属性,当从常规 HTTPServlet 访问时为空
【发布时间】:2012-09-17 02:17:45
【问题描述】:

我的 GWT+GAE 应用程序中有两个 servlet。一种是“MyServlet 扩展 RemoteServiceServlet”,它处理来自客户端的所有调用。另一个是“上传扩展 HTTPServlet”处理从客户端发布的文件,如下所述:https://developers.google.com/appengine/docs/java/blobstore/overview

如何从 Upload servlet 访问在 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");
    ....
}

【问题讨论】:

    标签: google-app-engine gwt servlets blobstore


    【解决方案1】:

    您不能在非 GWT HttpServlet 中调用 getThreadLocalRequest(),因为此方法是由 GWT 的 RemoteServiceServlet 提供的。在标准 servlet 中,您应该改用传递给 doGet() 或 doPost() 方法的请求对象,例如:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        if(request.getSession().getAttribute("user")==null) return;
    }
    

    【讨论】:

    • request.getSession().getAttribute("user") 也返回 null。会话不在两个 servlet 之间共享?
    • 问题已解决。这是由于 Blobstoreservice 的错误造成的。详情在这里:stackoverflow.com/questions/7476420/…
    猜你喜欢
    • 2020-06-30
    • 2011-11-02
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2019-05-18
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多