ServletContext๋ก DB ์ปค๋ฅ์ ๊ฐ์ฒด ๊ด๋ฆฌํ๊ธฐ
DB๋ฅผ ์ฌ์ฉํ๋ ์๋ธ๋ฆฟ๋ค์ด ํธ์ถ๋ ๋๋ง๋ค DB ์ปค๋ฅ์ ์ ์์ฑํ์ง ์๊ณ , ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์์ฑํด์ ServletContext์ ์ ์ฅํ๋ฉด ํ์ํ ์๋ธ๋ฆฟ์์ ์ปค๋ฅ์ ์ธ์คํด์ค๋ฅผ ๊บผ๋ด ์ธ ์ ์๋ค.
1. ๊ณต์ ์์์ ์ค๋นํ๋ ์๋ธ๋ฆฟ ์์ฑ
๋จผ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ DB ์ปค๋ฅ์ ๊ฐ์ฒด๋ฅผ ์ค๋นํ๋ ์๋ธ๋ฆฟ์ ์์ฑํ๋ค.
AppInitServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public class AppInitServlet extends HttpServlet {
// init() : ์๋ธ๋ฆฟ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์ต์ด๋ก ํธ์ถ
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("AppInitServlet.init() called");
super.init(config);
// ๋ชจ๋ ์๋ธ๋ฆฟ์ด ์ฌ์ฉํ ์ ์๋๋ก ServletContext ์ธ์คํด์ค์ ์ ์ฅ
ServletContext sc = this.getServletContext();
try {
Class.forName(sc.getInitParameter("driver"));
Connection conn = DriverManager.getConnection(
sc.getInitParameter("url"),
sc.getInitParameter("username"),
sc.getInitParameter("password")
);
sc.setAttribute("conn", conn);
} catch (Throwable e) {
throw new ServletException(e);
}
}
// destroy() : ์๋ธ๋ฆฟ์ด ์ธ๋ก๋๋ ๋(์๋ฒ ์ข
๋ฃ, ์น ์ดํ๋ฆฌ์ผ์ด์
์ข
๋ฃ, ์๋ธ๋ฆฟ ์ฌ๋ก๋ฉ) ํธ์ถ
@Override
public void destroy() {
System.out.println("AppInitServlet.destroy() called");
super.destroy();
Connection conn = (Connection) this.getServletContext().getAttribute("conn");
try {
if(conn != null && !conn.isClosed()) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
|
cs |
๊ณต์ ์์(DB ์ปค๋ฅ์ ๊ฐ์ฒด)์ ์ค๋นํ๋ ์์ ์ ํ๊ธฐ ์ํด service()๋ฅผ overrideํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์๋ธ๋ฆฟ์ด ์ธ๋ก๋๋ ๋ DB ์ปค๋ฅ์ ๊ฐ์ฒด๋ฅผ ํด์ ์ํค๊ธฐ ์ํด(DB ์ฐ๊ฒฐ ์ข ๋ฃ) destory()๋ฅผ overrideํ๋ค.
๊ธฐ์กด์ ์ด๊ธฐํ, ๋ง๋ฌด๋ฆฌ ์์ ์ ๊ทธ๋๋ก ์ฐ๊ธฐ ์ํด ์ํผ ํด๋์ค์ ๋ฉ์๋ ํธ์ถ๋ถ ๋ค์์ ๊ฐ๊ฐ ํ์ํ ์ฝ๋๋ฅผ ์์ฑํด์ค๋ค.
2. ์๋ธ๋ฆฟ ๋ฐฐ์น์ <load-on-startup> ํ๊ทธ
web.xml์ ์์์ ์์ฑํ AppInitServlet์ ๋ฐฐ์น ์ ๋ณด๋ฅผ ์์ฑํ๋ค.
web.xml
1
2
3
4
5
6
|
<!-- ์๋ธ๋ฆฟ ์ ์ธ -->
<servlet>
<servlet-name>AppInitServlet</servlet-name>
<servlet-class>com.atoz_develop.spms.servlets.AppInitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
|
cs |
ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์์ด๋ ์๋ธ๋ฆฟ์ด ์์ฑ๋ผ์ผ ํ๋ฏ๋ก <load-on-startup> ํ๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.
ํด๋น ํ๊ทธ๋ฅผ ์ง์ ํ๋ฉด ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์๋์ผ๋ก ์์ฑ๋๋ค.
1์ด๋ผ๊ณ ์ ๋ ฅํ ๊ฐ์ ์์ฑ ์์๋ฅผ ์๋ฏธํ๋ค.
์์ฑ ์์๊ฐ ๊ฐ์ผ๋ฉด ๋จผ์ ์ ์ธ๋ ์๋ธ๋ฆฟ์ด ๋จผ์ ์์ฑ๋๋ค.
ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋ธ๋ฆฟ์ด ์๋๋ฏ๋ก URL ๋งคํ ์ ๋ณด๋ ์ง์ ํ์ง ์๋๋ค.
3. ServletContext์ ์ ์ฅ๋ DB ์ปค๋ฅ์ ์ฌ์ฉ
์๋ธ๋ฆฟ์์ ์ง์ DB ์ปค๋ฅ์ ๊ฐ์ฒด๋ฅผ ์ป๋ ์ฝ๋๋ฅผ ServletContext์์ ๊บผ๋ด์ฐ๋๋ก ๋ณ๊ฒฝํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
|
/*
// DB ์ปค๋ฅ์
๊ฐ์ฒด๋ฅผ ์ป๋ ๊ธฐ์กด ์ฝ๋ ์ฃผ์ ์ฒ๋ฆฌ
Class.forName(sc.getInitParameter("driver"));
conn = DriverManager.getConnection(
sc.getInitParameter("url"),
sc.getInitParameter("username"),
sc.getInitParameter("password")
);*/
// ServletContext์ ์ ์ฅ๋ DB ์ปค๋ฅ์
๊ฐ์ฒด ์ฌ์ฉ
conn = (Connection) sc.getAttribute("conn");
stmt = conn.createStatement();
|
cs |
์ถ๊ฐ๋ก DB ์ปค๋ฅ์ ๊ฐ์ฒด๋ฅผ ์๋ธ๋ฆฟ์์ ๊ด๋ฆฌํ์ง ์์ผ๋ฏ๋ก finally ๋ธ๋ก์ conn.close();์ ๊ฐ์ ์ฝ๋๋ ์ญ์ ํ๋ค.
์ฝ๋ ๋ณ๊ฒฝ ํ ๋ฐฐ์นํ์ฌ ํ ์คํธํด๋ณด๋ฉด ๋์ผํ๊ฒ ์ ์ ๋์ํจ์ ํ์ธํ ์ ์๋ค.
์ถ๊ฐ๋ก ๊ณต์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋๋ฐ์๋ ์ด๋ ๊ฒ ์๋ธ๋ฆฟ์ ๋ฐ๋ก ๊ตฌํํด์ ํ๋ ๋ฐฉ๋ฒ๋ณด๋ค ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
- ServletContextListener๋ก DB ์ปค๋ฅ์ , DAO ๊ณต์ ๊ฐ์ฒด ๊ด๋ฆฌํ๊ธฐ
๋๊ธ