Java guice servlet不是一个单例
可怕的事情正在发生 我的项目中有2个servlet,其中一个只是有一个post方法,负责处理文件上传。我最近添加了另一个-它有一个get和一个post方法 下面是第二个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
@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
}
}