ServletContextListener๋ก DB ์ปค๋ฅ์ , DAO ๊ณต์ ๊ฐ์ฒด ๊ด๋ฆฌํ๊ธฐ
ํ์ํ ๋๋ง๋ค ๋งค๋ฒ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ๋ง์ garbage๊ฐ ๋ฐ์ํ๊ณ ์คํ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ค. ์ฌ๋ฌ ์๋ธ๋ฆฟ์ด ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์ํ ๋ ์ค๋นํด๋ฌ์ ์๋ก ๊ณต์ ํ๋ ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ์คํ ์๋ ์ธก๋ฉด์์ ์ข๋ค.
Listener
ํฐ์บฃ๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๋๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ์์๋ถํฐ ์ข ๋ฃ๊น์ง ์ฃผ์ํ ์ด๋ฒคํธ์ ๋ํด ์๋ฆผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด๋ฒคํธ์ ๋ฐ๋ผ ์ ํด์ง Listener ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ DDํ์ผ(web.xml)์ ๋ฑ๋กํ๋ฉด ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ํ๋ ์์ ์ ์ํํ๋๋ก ํ ์ ์๋ค.
๋ถ๋ฅ | ์ด๋ฒคํธ | Listener ์ธํฐํ์ด์ค |
์น ์ดํ๋ฆฌ์ผ์ด์ | ์์, ์ข ๋ฃ | javax.servlet.ServletContextListener |
ServletContext์ ๊ฐ ์ถ๊ฐ, ์ ๊ฑฐ, ๋์ฒด | javax.servlet.ServletContextAttributeListener | |
์ธ์ | ์์ฑ, ์๋ฉธ | javax.servlet.http.HttpSessionListener |
ํ์ฑ, ๋นํ์ฑ | javax.servlet.http.HttpSessionActivationListener | |
HttpSession์ ๊ฐ ์ถ๊ฐ, ์ ๊ฑฐ, ๋์ฒด | javax.servlet.http.HttpSessionAttributeListener | |
์์ฒญ | ์์ฒญ, ์๋ต | javax.servlet.ServletRequestListener |
ServletRequest์ ๊ฐ ์ถ๊ฐ, ์ ๊ฑฐ, ๋์ฒด | javax.servlet.ServletRequestAttributeListener |
ํ - ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ์ด๋ฒคํธ์ Listener ์ธํฐํ์ด์ค
ServletContextListener์ ํ์ฉ
์ด ์ค ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์, ์ข ๋ฃ ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ํ์ฉํด์ ๊ฐ์ฒด๋ฅผ ์ค๋นํ ๋ค ServletContext์ ์ ์ฅํด์ ๊ณต์ ๊ฐ์ฒด๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด์ ์ ์๋ธ๋ฆฟ์ ๋ฐ๋ก ๋ง๋ค์ด์ <load-on-startup> ํ๊ทธ ์ค์ ์ผ๋ก DB ์ปค๋ฅ์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃจ์๋๋ฐ ๊ทธ ๋ณด๋ค ๋ ์ข์ ๋ฐฉ๋ฒ์ ์ด๋ ๊ฒ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ๋ฐ์์ํค๋ ์ด๋ฒคํธ๋ฅผ ์ด์ฉํ๋๊ฒ์ด๋ค.
์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์์๋๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ServletContextListener์ ๊ตฌํ์ฒด์ ๋ํด contextInitialized()๋ฅผ ํธ์ถํ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋๋ฉด contextDestroyed()๋ฅผ ํธ์ถํ๋ค.
๋ฐ๋ผ์ ServletContextListener๋ฅผ ํ์ฉํด์ DB ์ปค๋ฅ์ ๊ณผ DAO์ ๊ณต์ ๊ฐ์ฒด๋ก ๋ง๋ค๋ ค๋ฉด SerlvetContextListener์ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค๊ณ contextInitialized() ๋ฉ์๋์ ๊ฐ์ฒด๋ฅผ ์์ฑ, contextDestroyed()์ ์์์ ํด์ ํ๋๋ก ๊ตฌํํ๋ฉด ๋๋ค.
1. ServletContextListener ๊ตฌํ
listeners ํจํค์ง์ ContextLoaderListener ํด๋์ค๋ฅผ ์์ฑํ๋ค.
ContextLoaderListener.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
|
public class ContextLoaderListener implements ServletContextListener {
Connection conn;
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
try {
// Connection ์ค๋น
Class.forName(sc.getInitParameter("driver"));
conn = DriverManager.getConnection(
sc.getInitParameter("url"),
sc.getInitParameter("username"),
sc.getInitParameter("password")
);
// Dao ์ค๋น
StudentDao studentDao = new StudentDao();
studentDao.setConnection(conn);
// Dao ์ ์ฅ
sc.setAttribute("studentDao", studentDao);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// Connection ํด์
try {
conn.close();
} catch (SQLException e) { }
}
}
|
cs |
2. ๋ฆฌ์ค๋ ๋ฐฐ์น
๋ฆฌ์ค๋ ๋ฐฐ์น๋ ์ด๋ ธํ ์ด์ ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ๊ณผ DDํ์ผ(web.xml)์ ๋ฆฌ์ค๋ ์ ์ธ๋ถ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
1) ์ด๋ ธํ ์ด์
ํด๋์ค ์ ์ธ ์์ @WebListener ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
1
2
3
4
5
6
7
|
@WebListener
public class ContextLoaderListener implements ServletContextListener {
Connection conn;
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext sc = sce.getServletContext();
|
cs |
2) web.xml
web.xml์ <web-app> ํ๊ทธ ์์ ์์ฑํ๋ค.
์ฐธ๊ณ ๋ก Servlet 2.4 ์ดํ์์๋ <filter-mapping> → <listener> → <serlvet> ์์๋ก ์์ฑํด์ผํ๋ค.
Servlet 2.5๋ถํฐ๋ ์์์ ์๊ด ์๋ค.
web.xml
1
2
3
4
|
<!-- ๋ฆฌ์ค๋ ์ ์ธ -->
<listener>
<listener-class>com.atoz_develop.spms.listeners.ContextLoaderListener</listener-class>
</listener>
|
cs |
3. ๊ธฐ์กด ์๋ธ๋ฆฟ ๋ณ๊ฒฝ
DAO ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๋์ ServletContext์ ์ ์ฅ๋ DAO ๊ฐ์ฒด๋ฅผ ๊บผ๋ด ์ฐ๋๋ก ๋ณ๊ฒฝํ๋ค.
๊ธฐ์กด ์ฝ๋
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
|
@WebServlet("/student/list")
public class StudentListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
ServletContext sc = this.getServletContext();
Connection conn = (Connection) sc.getAttribute("conn");
StudentDao studentDao = new StudentDao();
studentDao.setConnection(conn);
req.setAttribute("students", studentDao.selectList());
resp.setContentType("text/html; charset=UTF-8");
RequestDispatcher rd = req.getRequestDispatcher(
"/student/StudentList.jsp"
);
rd.include(req, resp);
} catch (SQLException e) {
req.setAttribute("error", e);
RequestDispatcher rd = req.getRequestDispatcher("/Error.jsp");
rd.forward(req, resp);
}
}
}
|
cs |
๋ณ๊ฒฝ ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@WebServlet("/student/list")
public class StudentListServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
ServletContext sc = this.getServletContext();
req.setAttribute("students", ((StudentDao) sc.getAttribute("studentDao")).selectList());
resp.setContentType("text/html; charset=UTF-8");
RequestDispatcher rd = req.getRequestDispatcher(
"/student/StudentList.jsp"
);
rd.include(req, resp);
} catch (SQLException e) {
req.setAttribute("error", e);
RequestDispatcher rd = req.getRequestDispatcher("/Error.jsp");
rd.forward(req, resp);
}
}
}
|
cs |
์ ๋๋ก ๊ตฌํ ํ๋ค๋ฉด ์ฝ๋ ๋ณ๊ฒฝ ํ์๋ ๋์ผํ๊ฒ ์ ์ ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ ๊ฒ ServletContext์ ์ ์ฅ๋ผ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์คํ ์๋๊ฐ ๋นจ๋ผ์ง๊ณ garbage๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
'Javaยท๏ปฟServletยท๏ปฟJSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌํ๋์ API๋ฅผ ์ด์ฉํ Front Controller ์๋ํ (0) | 2020.02.20 |
---|---|
Tomcat ์๋ฒ DataSource ์ค์ ๋ฐฉ๋ฒ (+JNDI) (1) | 2020.02.17 |
[IntelliJ] ํ์๊ฐ์ ์์ (MVC) - (7) DAO ๋ถ๋ฆฌํ๊ธฐ (0) | 2020.02.15 |
[JSP] JSTL ํ์ฉ ๋ฐฉ๋ฒ - JSP์์ ์๋ฐ ์ฝ๋ ์ ๊ฑฐ (0) | 2020.02.15 |
[JSP] JSTL ์ฌ์ฉ ๋ฐฉ๋ฒ - ์ฃผ์ ํ๊ทธ ๋ฌธ๋ฒ ์ ๋ฆฌ (4) | 2020.02.15 |
๋๊ธ