Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在googleappengine请求上扩展httpservlet_Java_Google App Engine_Servlets - Fatal编程技术网

Java 在googleappengine请求上扩展httpservlet

Java 在googleappengine请求上扩展httpservlet,java,google-app-engine,servlets,Java,Google App Engine,Servlets,我对在谷歌应用程序引擎上遇到的这个问题感到困惑 我创建了几个servlet,所以我创建了一个基类来做一些基本的重复工作。像这样: public class MyBase extends HttpServlet { protected String someValue1; protected String someValue2; protected void setup(HttpServletRequest req, HttpServletResponse

我对在谷歌应用程序引擎上遇到的这个问题感到困惑

我创建了几个servlet,所以我创建了一个基类来做一些基本的重复工作。像这样:

public class MyBase extends HttpServlet {

      protected String someValue1;
      protected String someValue2;

      protected void setup(HttpServletRequest req, HttpServletResponse resp)   {

         someValue1 = req.getParameter("paramName1");
         someValue2 = req.getParameter("paramName2");

}
和servlet:

public class MyServlet extends MyBase {



    @Override
    public void doGet(final HttpServletRequest req,
                      final HttpServletResponse resp)  {

         super.setup(req, resp); 
         doWork(someValue1);
         doOtherWork(someValue2);

}
足够简单-这通常工作得很好,当在本地服务器上运行时,任何数量的负载测试都可以正常工作。此外,GAE上的测试也可以在测试实例上进行。在我的生产实例中,并且仅在生产中,同时有1000个用户,someValue1和someValue2的值成为两个不同用户的请求!servlet在99%的时间内都能工作,每100个请求中就有1个最终会使用来自不同请求的参数。毫无意义,但它正在发生

这显然是实际代码的简化版本,但我使用集成测试复制了它


也许我遗漏了扩展httpservlet的一些细微差别?

使用httpservlet,最好不要使用实例变量,因为httpservlet在会话之间是重用的

Java EE容器通常只创建一个MyServlet实例,并为从运行
doService
->
doGet

快速解决您的问题,或者

@Override //performance suffers greatly.
    public sychronized void doGet(final HttpServletRequest req,
                      final HttpServletResponse resp)  {
或者使用
resp.setAttribute()