java - Java Servlet 中的数据库连接池

标签 java tomcat servlets oracle11g

我正在为员工管理系统创建一个 Web 应用程序,使用:Apache Tomcat 作为 HTTP 服务器,Oracle 作为数据库,Applet 用于客户端编程,Servlet 用于服务器端编程。我还想使用 DBCP 来管理与数据库的连接。

我希望执行查询的 servlet 使用客户端输入的用户名和密码进行连接。但是到目前为止,我已经看到在context.xml中配置资源时必须设置连接池的用户名和密码。

有什么方法可以实现这个并且仍然使用 DBCP?或者我是否必须为每个请求在 doGet()doPost() 中打开连接?

最佳答案

如评论中所述,通常,限制逻辑是在应用程序端而不是数据库端完成的。

但是如果你真的想使用数据库安全模型,那么你需要为每个登录用户创建单独的数据源(ConnectionPool)并将其存储在它的 session 中。如果您有很多并发访问,您很快就会发现资源用完了。

例如,我正在使用 DataSource,因为它更容易配置,但您可以只使用任何连接池实现。

在登录操作中,您创建新的数据源(例如使用 apache common:http://commons.apache.org/proper/commons-dbcp/)并插入到 session 中

BasicDataSource ds = new BasicDataSource();
...
ds.setPassword(userPassword);
ds.setUserName(login);
...

HttpSession session = request.getSession();
session.setAttribute("DBcon",ds);

在您的其他获取/帖子中:

HttpSession session = request.getSession();
DataSource ds = (DataSource)session.getAttribute("DBcon");

由于每个用户一个数据源,请确保使用池的一些低参数,例如 size=3,因为它对一个用户来说应该足够了。

关于java - Java Servlet 中的数据库连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549495/

相关文章:

tomcat - 如何在Denodo 5.5 的嵌入式tomcat 容器中安装Denodo OData 服务?

java - Tomcat - 将旧上下文根重定向到新上下文根

java - 检查 HttpServletRequest 的连接是否仍然打开?

java - 如何获取 Tomcat 的管理员用户和密码以访问 Servlets 列表

java - 用于 REST Controller 的 Spring MVC 4,如何为测试用例 Autowiring 不同的依赖项

java - 无法将 blob 转换为字符串,SQLite+java

java - JSP 页面的 Tomcat 500 错误 - 唯一的 JSP 内容是 if/else

java - 在 linux javac 上编译 Java - Jar 文件顺序失败

java - 在不使用比较器的情况下按不同属性比较对象

java - 对于 commn-service 中存在的类,微服务项目抛出在 mvn 包上找不到类