지금까지 예제 코드는 모두 앞부분에서 다음과 같은 코드를 사용해서 JDBC 드라이버를 로딩했다.
Class.forName(jdbcDriverClass);
하지만, JDBC 드라이버는 한 번만 로딩하면 이후로 계속해서 사용할 수 있기 때문에 JSP를 실행할 때마다 JDBC 드라이버를 로딩할 필요가 없다.
JDBC 드라이버를 로딩하기에 가장 좋은 시점은 웹 어플리케이션이 시작할 때다. 즉, 톰캣과 같은 웹 컨테이너가 시작될 때 자동으로 JDBC 드라이버를 로딩하도록 지정하면 JSP 페이지에서 매번 JDBC 드라이버를 로딩할 필요가 없다.
웹 어플리케이션이 시작될 때 자동으로 JDBC 드라이버를 로딩하도록 만들면 아래 예제 코드와 같은 서블릿 클래스를 사용하면 된다. 이클립스 프로젝트를 사용하고 있다면 jdbc 패키지를 생성한 후에 jdbc 패키지에 MySQLDriverLoader 클래스를 추가한 뒤 코드를 작성하면 된다.
package jdbc;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
public class MySQLDriverLoader extends HttpServlet{
public void init(ServletConfig config) throws ServletException{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch (Exception ex){
throw new ServletException(ex);
}
}
}
HttpServlet은 서블릿을 위한 상위 클래스이다. 서블릿은 init() 메서드를 제공하고 있는데, 이 init() 메서드는 서블릿을 초기화할 때 최초에 한 번 실행된다. 톰캣과 같은 컨테이너는 서블릿을 사용하기 전에 초기화를 수행하므로 init() 메서드에서 JDBC 드라이버를 로딩하도록 구현하려면 컨테이너를 실행할 때 JDBC 드라이버를 로딩할 수 있다.
이클립스 프로젝트를 사용한다면 MySQLDriverLoader.java를 컴파일 할 필요가 없다. 코드를 저장할 때 이클립스가 알아서 컴파일해주기 때문이다. 이클립스가 아니라 웹 어플리케이션의 WEB-INF\src\jdbc 폴더에 직접 소스 코드를 작성했다면 다음과 같은 명령어를 이용해서 MySQLDriverLoader.java를 컴파일하자.
C:\>set CLASSPATH=c:\apache-tomcat-8.0.2\lib\servlet-api.jar
C:\>cd apache-tomcat-8.0.2\webapps\chap14\WEB-INF
C:\..\chap14\WEB-INF>mkdir classes
C:\..\chap14\WEB-INF>javac -d classes src \jdbc\MySQLLoader.java
javac를 실행하면 chap14\WEB-INF\classes\jdbc 폴더에 MySQLDriverLoader.class 파일이 생성될 것이다.
MySQLDriverLoader.java를 작성했다면 웹 어플리케이션이 시작될 때 자동으로 MySQLDriverLoader 서블릿 클래스를 실행하도록 설정해야 한다. 이를 위해 아래와 같이 web.xml 파일을 만들어 <servlet> 태그를 추가하면 된다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>mysqlDriverLoader</servlet-name>
<servlet-class>jdbc.MySQLDriverLoader</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
</web-app>
web.xml 파일에 위의 코드와 같이 <servlet> 태그를 추가하면 웹 어플리케이션 구동 시 자동으로 MySQLLoader 서블릿 클래스의 init() 메서드가 실행되므로, 결과적으로 웹 어플리케이션을 시작할 때 MySQL JDBC 드라이버를 로딩한다. (MySQLDriverLoader 클래스의 init() 메서드에서 드라이버를 로딩한다.)
웹 어플리케이션을 시작할 때 MySQLDriverLoader 클래스를 이용해서 JDBC 드라이버를 로딩하므로 개별 JSP는 JDBC 드라이버를 로딩할 필요가 없어진다. (즉 JSP 코드에서 Class.forName() 코드를 사용할 필요가 없어진다.)
참고