Java Servlets 运行 在 Tomcat 7.x 下使用休眠和 c3p0 和 mysql 的最佳实践
Best Practices for Java Servlets running under Tomcat 7.x using hibernate and c3p0 and mysql
有人可以为我总结一下我正在使用的在 Tomcat 下运行的 JAVA servlet 的方法吗?这个特定的 Servlet 没有框架,但使用了一个 server/client 服务,我在其中编写了支持后端 类 和客户端用户请求的方法。在那些后端自定义 类 中,我正在使用 Hibernate(希望使用 c3p0 连接池管理),并且 Hibernate 连接到常驻 MySql 服务器。
现在,似乎我已经通过将 Hibernate JAR 和 C3P0 JAR 以及 JDBC JAR 推送到 Servlet 的 lib 目录下来强制一切正常工作,但我想知道我是否真的做了正确的事情?我在 Tomcat 日志中看到它看到了 Hibernate 允许 C3P0 生成线程的地方(它就是这样做的),它警告我如果需要它不能杀死它并且它可能是内存泄漏。因此,虽然我相信 C3P0 肯定是 运行,因为我将 Hibernate 配置为这样做,并且它已经找到对 C3P0 类 的引用,但我是否可以做一些不太理想的事情?
我的 Tomcat 实例仅用于我提到的 servlet,我是否应该在 Tomcat 库级别安装 Hibernate、C3P0 和 Mysql JDBC 资源?如果是这样,我需要什么才能让自己使用新设置? Tomcat 中的配置文件? Servlet 的后端用户定义 JAVA 类 需要做什么才能在 servlet 的父级别 (Tomcat) 使用这些资源?
每个工具都有自己的文档,我找到了如何为每个工具进行设置的简单示例,但没有告诉我什么最适合这种情况。
非常感谢 listening/reading,希望能帮助我度过难关。
这个论坛真棒,靠大家的知识让自己天天有用
卡尔
首先,关于这些问题的博客post很多。我尽量总结一下我所知道的。其中一些可能是也可能不是最佳实践。
Servlet 是 java 网络开发的基础技术。如果你不是在开发一个框架,我不会建议你使用它。是的,这是为了这个目的,但是在开发 servlet 时很难将业务逻辑和您的视图分开。当事情变得复杂时,servlet 变得更难维护。您应该尝试在 servlet 架构之上开发的其他框架。如果您指定开发 servlet 应用程序的最初目的,我可能会提供帮助。
Tomcat,作为一个servlet容器,处理所有的连接并将请求传递给相应的servlet。您的应用程序,一个 .WAR 文件,将 运行s 在 servlet 容器之上。此外,servlet 容器必须遵循一些规则和规范。因此,如果您使用 servlet 开发应用程序,您可以 运行 它是您想要的 servlet 容器。 Tomcat 还可以管理您的资源,例如 JDBC 连接。您可以使用 JNDI 访问这些资源。
但如果您想自己管理资源,则无需将依赖项添加到tomcat/lib 文件夹。您可以将依赖项保存在 WEB-INF/lib 文件夹下。
开发 Web 应用程序有一些模式。您必须检查什么是 MVC。将您的应用程序分成不同的层是一个很好的做法。每一层都必须负责一件事情。这是一个示例,假设您要开发一个将从休眠中读取数据的 Web 应用程序。您的第一层必须负责从您的数据库中获取数据。这一层通常称为DAO层。在该层之上,您可以放置业务逻辑,有时称为服务层。最后是您的观点,在本例中是您的 servlet。您可以找到 an example DAO layer here.
起初,粘合所有框架似乎有点困难,但相信我,这并不难。而且您总是可以使用 Spring 将它们粘合在一起。
关于线程,没有源代码很难确定问题。
有人可以为我总结一下我正在使用的在 Tomcat 下运行的 JAVA servlet 的方法吗?这个特定的 Servlet 没有框架,但使用了一个 server/client 服务,我在其中编写了支持后端 类 和客户端用户请求的方法。在那些后端自定义 类 中,我正在使用 Hibernate(希望使用 c3p0 连接池管理),并且 Hibernate 连接到常驻 MySql 服务器。
现在,似乎我已经通过将 Hibernate JAR 和 C3P0 JAR 以及 JDBC JAR 推送到 Servlet 的 lib 目录下来强制一切正常工作,但我想知道我是否真的做了正确的事情?我在 Tomcat 日志中看到它看到了 Hibernate 允许 C3P0 生成线程的地方(它就是这样做的),它警告我如果需要它不能杀死它并且它可能是内存泄漏。因此,虽然我相信 C3P0 肯定是 运行,因为我将 Hibernate 配置为这样做,并且它已经找到对 C3P0 类 的引用,但我是否可以做一些不太理想的事情?
我的 Tomcat 实例仅用于我提到的 servlet,我是否应该在 Tomcat 库级别安装 Hibernate、C3P0 和 Mysql JDBC 资源?如果是这样,我需要什么才能让自己使用新设置? Tomcat 中的配置文件? Servlet 的后端用户定义 JAVA 类 需要做什么才能在 servlet 的父级别 (Tomcat) 使用这些资源?
每个工具都有自己的文档,我找到了如何为每个工具进行设置的简单示例,但没有告诉我什么最适合这种情况。
非常感谢 listening/reading,希望能帮助我度过难关。
这个论坛真棒,靠大家的知识让自己天天有用
卡尔
首先,关于这些问题的博客post很多。我尽量总结一下我所知道的。其中一些可能是也可能不是最佳实践。
Servlet 是 java 网络开发的基础技术。如果你不是在开发一个框架,我不会建议你使用它。是的,这是为了这个目的,但是在开发 servlet 时很难将业务逻辑和您的视图分开。当事情变得复杂时,servlet 变得更难维护。您应该尝试在 servlet 架构之上开发的其他框架。如果您指定开发 servlet 应用程序的最初目的,我可能会提供帮助。
Tomcat,作为一个servlet容器,处理所有的连接并将请求传递给相应的servlet。您的应用程序,一个 .WAR 文件,将 运行s 在 servlet 容器之上。此外,servlet 容器必须遵循一些规则和规范。因此,如果您使用 servlet 开发应用程序,您可以 运行 它是您想要的 servlet 容器。 Tomcat 还可以管理您的资源,例如 JDBC 连接。您可以使用 JNDI 访问这些资源。
但如果您想自己管理资源,则无需将依赖项添加到tomcat/lib 文件夹。您可以将依赖项保存在 WEB-INF/lib 文件夹下。
开发 Web 应用程序有一些模式。您必须检查什么是 MVC。将您的应用程序分成不同的层是一个很好的做法。每一层都必须负责一件事情。这是一个示例,假设您要开发一个将从休眠中读取数据的 Web 应用程序。您的第一层必须负责从您的数据库中获取数据。这一层通常称为DAO层。在该层之上,您可以放置业务逻辑,有时称为服务层。最后是您的观点,在本例中是您的 servlet。您可以找到 an example DAO layer here.
起初,粘合所有框架似乎有点困难,但相信我,这并不难。而且您总是可以使用 Spring 将它们粘合在一起。
关于线程,没有源代码很难确定问题。