2016-07-28 50 views
0

我有一个servlet获取数据,然后保持它。这是一个粗略的片段:在HttpServlet中声明自己的方法是否安全?

@WebServlet("/ListenerServlet") 
public class ListenerServlet extends HttpServlet { 

    @Inject 
    private PersistService service; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

    String toPersist = getDataFromRequest(); 
    service.persist(toPersist); 
} 

我的问题

  • 是否确定通过CDI注入(requestScoped)服务这样呢?
  • 我可以在servlet中创建自己的(非静态)方法并且是线程安全的吗?我需要synchronized关键字吗?

自己的方法:

private void doPersist(String toPersist) { 
    service.persist(toPersist); 
} 
+0

本主题还讨论了有关线程安全的Servlet中http://stackoverflow.com/questions/20768720/如果-MY-的servlet实例变量 - 是-的型的StringBuffer - 是 - 它线程安全 – JavaHopper

回答

0

拥有自己的方法是绝对没问题 - 只要他们也都是线程安全的。注入PersistService是将后台存储放入servlet的好方法,但PersistService的线程安全性仍然很重要。例如,如果你在该类中有一个静态EntityManager,那么这是而不是线程安全,没有一些额外的同步。但如果你正在以线程安全的方式进行持久化,那么你应该没问题。

一般而言,您使用的模式是我已经使用过很多次的模式,并且效果很好。

你可以参考以下这些问题:

Regarding thread safety of servlet

Why Servlets are not thread Safe?

If my Servlet instance variable is of type StringBuffer, is it thread-safe?

相关问题