Question: What is the best way to manage a database connection in a Java servlet?

Currently, I simply open a connection in the `init()` function, and then close it in `destroy()`. 

However, I am concerned that "permanently" holding onto a database connection could be a bad thing. 

Is this the correct way to handle this? If not, what are some better options?

edit: to give a bit more clarification: I have tried simply opening/closing a new connection for each request, but with testing I've seen performance issues due to creating too many connections.

Is there any value in sharing a connection over multiple requests? The requests for this application are almost all "read-only" and come fairly rapidly (although the data requested is fairly small).

Answer: 
Pool it.

Also, if you are doing raw JDBC, you could look into something that helps you manage the Connection, PreparedStatement, etc. Unless you have very tight "lightweightness" requirements, using Spring's JDBC support, for instance, is going to simplify your code a lot- and you are not forced to use any other part of Spring.

See some examples here:

<http://static.springframework.org/spring/docs/2.5.x/reference/jdbc.html>
Usually you will find that opening connections per request is easier to manage. That means in the doPost() or the doGet() method of your servlet.

Opening it in the init() makes it available to all requests and what happens when you have concurrent requests?