我目前正在使用 tomcat 9.0 在 java web 中学习 JSP 和 Servlet,
我看到一些网站说一个servlet只会被初始化一次,当服务器要终止那个servlet的生命时会调用
destroy()
方法,
一个servlet将用于多个相同类型的请求,例如http请求,
和数据库连接资源很重要
所以,我认为,我应该使
Connection object
成为我的Servlet的成员,这样我就不需要在每次有新的http请求时都建立一个新的连接,并且在有新的http请求时关闭连接servlet 被销毁.
像这样:
public class LoginServlet extends HttpServlet {
private Connection conn;
// init, get mysql Connection
public TeamBlueServlet() {
initiate();
}
private void initiate() {
// do something and get connection...
this.conn = controller.getConnection();
}
// close connection in this method
@Override
public void destroy() {
// try, catch
this.conn.close();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
// do some query
try {
ResultSet resultSet = ...;
PreparedStatement statement = ...;
} catch (SQLException e) {
...
} finally {
close(statement, resultSet);
}
}
private void close(PreparedStatement sta, ResultSet rs) {
try {
if(sta !=null) sta.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
try {
if(rs !=null) rs.close();
} catch (SQLException e) {
logger.error(e.getMessage());
}
}
}
但我也看到一些说我们应该,尽可能晚地打开连接并尽快关闭连接。
因此我感到困惑,我想知道我是否需要建立连接并在每次查询时关闭它,还是应该保持连接打开?我知道有一个叫做连接池的东西可能可以解决这个问题,但我想知道在这种情况下,哪个会更好。
任何帮助将不胜感激,谢谢。