gpt4 book ai didi

google-app-engine - 如何在 GAE 的 sitebricks 方法中注入(inject)请求范围的 HttpSession?

转载 作者:行者123 更新时间:2023-12-04 05:54:03 27 4
gpt4 key购买 nike

我有以下 sitebricks小服务程序。 Foo.get()可作为 GET 访问在/foo/bar .我将 servlet 部署到 GAE .

@Service
@At("/foo")
@Singleton
public class Foo {
@Get
@At("/bar")
public Reply<?> bar(Request<String> request, HttpSession session) {
// access request scoped HttpSession
}
}

如果我对 sitebricks 的理解正确,那么 Request 和 HttpSession 都是由 sitebricks 注入(inject)的(可能在 Guice 的帮助下)。它还将确保 HttpSession 是当前请求的本地。并发请求将在 Foo 的同一实例上执行因为类被注释为 @Singleton (参见 Guice docs)。但即使并发请求到达同一个 JVM,每次调用 bar()将根据客户端传入的 JSESSIONID 拥有自己的 HttpSession。 所有这些假设都有效吗?

在对我的应用程序运行负载测试时,我注意到 sitebricks/Guice 传入的 HttpSession 以非常低的速率为 null。我目前正在 Google 的支持下对此进行故障排除。但除了 GAE - 从 sitebricks/Guice 的角度来看,还有什么可能导致这种情况?

found a code snippet将 Provider 注入(inject)构造函数。这是否意味着我可以/应该通过调用 Provider.get() 来获取 HttpSession而不是让 sitebricks 将其作为方法参数注入(inject)?

相关问题:

更新

  • 我从所有 servlet 方法中删除了 HttpSession 参数,例如 bar .我注入(inject)了 Provider<HttpSession>进入 servlet 并调用 provider.get()获取 session 。到目前为止我运行的测试表明这比获得 HttpSession 更可靠。出参数。也就是说,我不确定 session 是由 sitebricks 还是 GAE 本身提供的。 HttpSession是servlet容器提供的吗?

最佳答案

通常我先将 HttpServletRequest 注入(inject)到服务类中,然后从请求中获取 HttpSession 对象,这对我来说效果很好。

例如:

@At("/preview")
@Service
public class PreviewService {

@Inject
private HttpServletRequest request;

// It's similar if we need to modify response directly
@Inject
private HttpServletResponse response;

@Get
public Reply<?> get() {
HttpSession session = request.getSession();
... ...
}
}

希望对您有所帮助。

关于google-app-engine - 如何在 GAE 的 sitebricks 方法中注入(inject)请求范围的 HttpSession?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com