我创建了一个会话bean并在servlet中调用它,如下所示:
@WebServlet(name = "NewServlet1", urlPatterns = {"/NewServlet1"})
public class NewServlet1 extends HttpServlet {
@EJB NewSessionBean bean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NewServlet1</title>");
out.println("</head>");
out.println("<body>");
out.println("<h2>"+bean.helloWorld()+"</h2>");
out.println("<h1>Servlet NewServlet1 at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
这是我的会话bean:
@Stateless
public class NewSessionBean {
private int counter = 0;
public NewSessionBean() {
System.out.println("Constructor works");
}
public String helloWorld(){
return "Hello you are: "+counter++;
}
当我部署这些源代码时,我在Glassfish中看到只创建了一个会话bean实例 - “构造函数工作”只出现一次。当我尝试从几台计算机刷新我的网站时,我发现只存在一个bean实例。当我创建两个使用NewSessionBean的servlet时,仍然只有一个实例。当我读到会话bean时,我明白应该有一个bean池,所以它应该是几个bean。那么为什么在我的例子中只创建了一个bean。帮助我了解这种情况。
答案 0 :(得分:0)
只创建了一个servlet实例,并且由于它快速生成响应,因此不需要额外的无状态bean。如上所述,如果您将helloWorld
实现为长操作,并在操作完成之前生成新请求,您将看到正在创建新bean。