Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 guice servlet不是一个单例_Java_Servlets_Dependency Injection_Guice_Guice Servlet - Fatal编程技术网

Java guice servlet不是一个单例

Java guice servlet不是一个单例,java,servlets,dependency-injection,guice,guice-servlet,Java,Servlets,Dependency Injection,Guice,Guice Servlet,可怕的事情正在发生 我的项目中有2个servlet,其中一个只是有一个post方法,负责处理文件上传。我最近添加了另一个-它有一个get和一个post方法 下面是第二个servlet代码 @Singleton @WebServlet("/Medical_Web") public class XXXDetailsServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Inje

可怕的事情正在发生

我的项目中有2个servlet,其中一个只是有一个post方法,负责处理文件上传。我最近添加了另一个-它有一个get和一个post方法

下面是第二个servlet代码

@Singleton
@WebServlet("/Medical_Web")
public class XXXDetailsServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Inject
    private Provider<XXXPersistenceManager> persistenceManager;

    @Inject
    private Provider<XXXChain> chainProvider;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        System.out.println("servlet address = " + this);
        final String xxx= request.getParameter("xxx");
        String json = "";
        try {
            final XXXBean xxxBean = persistenceManager.get().find(xxx);
            json = new GsonBuilder().create().toJson(xxxBean);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        request.setAttribute("json", json.trim());
        getServletContext().getRequestDispatcher("/XXX.jsp").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        System.out.println("servlet address = " + this);
        final String xxx = request.getParameter("xxx");
        try {
            final XXXChain chain = chainProvider.get();
            chain.getContext().setAttribute(XXX_TYPE, XXXType.DELETE);
            final XXXBean xxxBean = persistenceManager.get().find(xxx);
            final List<XXXBean> xxxList = new ArrayList<XXXBean>();
            xxxList.add(xxxBean);
            chain.process(xxxList);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
这是servlet模块

public class XXXServletModule extends ServletModule {

    @Override
    protected void configureServlets() {
        serve("/xxx1").with(XXXDetailsServlet.class); // this one fails on post
        serve("/xxx2").with(XXXUploadServlet.class);  // this one works 
    }
}

我不熟悉Guice servlet集成的工作原理,但是拥有
@WebServlet(“/Medical\u Web”)
注释意味着您的Web容器也将实例化该servlet以服务请求。事实上,它没有单身的概念


我的猜测是,您只需删除注释,并让
ServletModule
控制servlet生命周期。

我不熟悉Guice-servlet集成的工作原理,但拥有
@WebServlet(“/Medical\u-Web”)
注释意味着您的Web容器还将实例化该servlet以服务请求。事实上,它没有单身的概念


我猜您只需要删除注释,让
ServletModule
控制servlet的生命周期。

+1,XXXDetailsServlet实际上是Guice范围内的一个单例,但在这里由容器直接实例化。非常感谢-这就解决了它。+1,XXXDetailsServlet实际上是Guice范围内的一个单例,但是在这里是由容器直接实例化的。非常感谢-修复了它。
public class XXXServletModule extends ServletModule {

    @Override
    protected void configureServlets() {
        serve("/xxx1").with(XXXDetailsServlet.class); // this one fails on post
        serve("/xxx2").with(XXXUploadServlet.class);  // this one works 
    }
}