개발 etc

jsp java 에서 Class.forName("com.mysql.jdbc.Driver") 호출 안하고, servlet에서 호출하기!

알통몬_ 2017. 9. 27. 12:31
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


이번 포스팅에서는 제목처럼 mysql 과 연동 시 호출하는 Class.forName()을 

자바 클래스에서 호출하지 않고, Servlet 설정을 통해 호출하는 방법에 대해 알아보겠습니다.

일반적으로 jdbc를 호출할 때 아래 코드처럼 호출을 하죠?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public String methods(String param1) {
        String result = "";
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = ...;
            String sql = "...";
            pstmt = conn.prepareStatement(sql);
            ...
        } catch (Exception e) {
 
        } finally {
            JdbcUtil.close(rs);
            JdbcUtil.close(pstmt);
            JdbcUtil.close(conn);
        }
 
        return result;
    }
cs


그런데 mysql과 연동되는 함수가 많아질 수록

Class.forName()은 반복해서 호출이 되겠죠?

이러한 반복 코드를 줄일 수 있는 방법이 있는데요.

바로 web.xml 파일에 Servlet 태그를 추가해주는 방법입니다.

저는 aws 를 사용하고 있으므로 aws를 기준으로 설명하겠습니다.

톰캣버전을 8버전을 쓰고 있습니다.

가장 먼저 JdbcLoader 이라는 자바 클래스를 하나 만들어 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package package.aaa.bbb;
 
import java.util.StringTokenizer;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
 
public class JdbcLoader extends HttpServlet {
 
    public void init(ServletConfig config) throws ServletException {
        try {
            String driver = config.getInitParameter("jdbcdriver");
            StringTokenizer stringTokenizer = new StringTokenizer(driver, ",");
            while(stringTokenizer.hasMoreTokens()) {
                String jdbcDriver = stringTokenizer.nextToken();
                Class.forName(jdbcDriver);
            }
        } catch ( Exception e) {
            throw new ServletException(e);
        }
    }
}
 
cs


그리고 web.xml 파일을 만들어서 아래 코드를 넣어줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<web-app version="3.1" 
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_3_1.xsd">
    <servlet>
        <servlet-name>JDBCDriverLoader</servlet-name>
        <servlet-class>package.aaa.bbb.JdbcLoader</servlet-class>
        <init-param>
            <param-name>jdbcdriver</param-name>
            <param-value>com.mysql.jdbc.Driver</param-value>
        </init-param>     
        <load-on-startup>1</load-on-startup>   
    </servlet>
</web-app>
cs


이렇게 준비가 되셨다면

tomcat8/webapps/projectName/WEB-INF/classes/package/aaa/bbb 아래에

컴파일로 생성된 JdbcLoader.class 파일을 넣어주시고,

WEB-INF 아래에 위에서 만든 web.xml 파일을 넣어줍니다.


여기까지 끝나셨으면 

mysql 연동하는 자바 클래스에서 Class.forName() 코드들을 다 지워주시고,

톰캣을 재시작 해주시면

Class.forName()을 호출해서 사용했을 때와

동일하게 동작하는 것을 확인하실 수 있습니다~~~

이상입니다!


반응형