在 servlet mvc 中创建 jdbc 连接哪个更好?
Posted
技术标签:
【中文标题】在 servlet mvc 中创建 jdbc 连接哪个更好?【英文标题】:Which is better place to create jdbc connection in servlet mvc? 【发布时间】:2017-08-11 08:55:14 【问题描述】:提前感谢您的关注。在这里,作为初学者,我对 jsp servlet 和 jdbc 的 mvc 模式有很好的了解。我的情况是
mysql表employee so pojo class Employee EmployeeDao 用于 dao 操作 用于验证登录和其他服务的服务类 Servlet 从 jsp 页面获取数据并调用服务现在我不确定创建连接的最佳方式,我在下面找到了一些想法,
-
通过加载驱动程序在 EmployeeDao 构造函数中创建 jdbc 连接。用于创建 dao 对象并执行操作,然后使用相同对象的方法 destroy 以关闭连接的服务。
在 servlet 的 init() 方法中加载驱动程序并创建连接?如果是这样,那么我是否需要将在 init 中创建的连接对象传递给服务,以便它进一步传递 dao?而servlet的destroy()将用于关闭连接。
使用 ServletListener 或 ServletContextListener(对这些不太了解(需要一些文档学习)
到目前为止,我一直在使用 Dao 类进行连接和加载驱动程序,但我需要对其进行优化并提高我的应用程序效率。如果我在某处误导,请纠正我。谢谢你
【问题讨论】:
理想情况下,使用一个为您处理所有这些的框架——您所描述的大约 90% 的内容可通过 Spring Boot、Spring MVC 和 Spring Security 开箱即用。 这些都不是。在需要时获取连接,并在事务完成后立即提交。您不能(也不想)在处理并发请求的线程之间共享连接。 为连接创建一个单独的包。建立函数以获取和关闭连接。每当您需要连接时,在完成您的操作后调用 getConnection 方法,您可以调用 closeConnection 方法 @JBNizet 是的,这是第一种情况。 EmployeeDao 在需要与数据库操作相关的服务时被服务调用。但是虽然没有。用户调用的与数据库事务相关的服务,单个应用程序多次打开和关闭数据库连接。所以我想做一次以降低复杂性。 @AnoopLL 是的,EmployeeDao 也做了同样的事情。它的构造函数设置连接,在事务和选择查询之后,同一个对象被强制调用destoyConnection()方法来关闭连接。 【参考方案1】:所以,最好的解决方案是下一个:
-
创建 ServletContextListener
在 contextInitialized 方法中获取 dataSource 连接池。
在 contextInitialized 方法中创建您需要的所有服务,并使用构造函数将 dataSouce 注入服务(比 setter 更可取)。
将所有服务放入 ServletContext。
在每个 servlet 的 init 方法中获取指定 servlet 所需的服务。
快乐,并使用它们 :)
【讨论】:
是的,这就是我想要的。如果您有任何帮助,请提供文档链接。【参考方案2】:使用 Spring MVC 和 Spring JDBC(用于处理 DAO)足以满足上述要求。
【讨论】:
【参考方案3】:Spring MVC 绝对是一个不错的选择。 但是如果你一定要在 Servlet MVC 中使用,那么你可以去下面的链接,这可能对你有帮助。
如果您只想创建没有数据源的 JDBC 连接,请转到 here
如果你想通过Datasource创建,去here
【讨论】:
非常感谢。我知道 Spring with hibernate 是更好的方法,但我被限制继续使用 servlet jdbc。以上是关于在 servlet mvc 中创建 jdbc 连接哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章
在 GlassFish v4.1.1 中创建 jdbc 连接池 [重复]
如何在 Spring MVC 中的不同类中创建动态 bean
我应该如何在基于 servlet 的应用程序中连接到 JDBC 数据库/数据源?