๐ฅ [Spring] ํ์ด์ง ์ด๋๊ณผ Attribute, ResourceFactory
Servlet-API
init(config) ์ ์ํด Servlet๊ณผ ServletConfig์ ๊ด๊ณ๊ฐ ์ด๋ค์ง๋ค.(has a Relation)
Servlet์ ๊ธฐ๋ณธ ์์ฑ์๋ง ์กด์ฌํ๊ณ ์ฌ์ฉ์๊ฐ ์๋ Container์ ์ํด ์์ฑ๋๋ค.
๋ฐ๋ผ์ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ Servlet์ ์ด๊ธฐํ ํด์ค์ผ ํ๋ค.
ServletConfig๋ ํ๊ฐ์ Servlet์ ์ด๊ธฐํ(= A Servlet instance initilization)
์ด๋ฌํ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ์ด getInitParameter() ์ด๋ค.
getInitParameter()๋ Container์์ ์ด๊ธฐ์ ์ค์ ํ ๊ฐ์ผ๋ก Servlet๋ฅผ ์ด๊ธฐํ ํ๋ค.
โ(web.xml) ์ด๊ธฐ์ค์ ํ DD ํ์ผ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ด
init() ๋ด์ getInitParameter() ๊ฐ ๋ค์ด๊ฐ init() ์ด ํธ์ถ ๋ ๋ ์ด๋ฌํ ๊ณผ์ ์ด ์ด๋ฃจ์ด์ง๋ค.
ServletContext
ServletContext๋ ๋ ๋์ ServletConfig ์ด๋ค.
globalํ ์ด๊ธฐํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. โ getInitParameter()
ServletConfig์ getInitParameter() ์ ํ ๊ฐ์ Servlet์ ์ด๊ธฐํ
ServletContext์ getInitParamter() ์ ๊ธ๋ก๋ฒํ Servlet์ ์ด๊ธฐํ
ServletRequest
ServletRequest( = Client โ Server)
getParameter(String name) return String(ํ๊ฐ์ ๊ฐ)
getParameterValues(String name) return String[] (์ฌ๋ฌ๊ฐ์ ๊ฐ)
setAttribute(String name, Object o) return void (name์ด key, o๊ฐ value)
getAttrubute(String name) return Object (name์ด key์ด๋ฏ๋ก ์ด๊ฒ์ผ๋ก value ๋ฐ์์ด)
ServletResponse
ServletResponse(= Response โ Server)
getWriter() return PrintWriter
HttpServletRequest
HttpServletRequest (HTTP ํต์ ์ ํนํ)
getSession()
getCookie()
Servlet ์ฃผ์ ๋ก์ง ์์
Client๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์- ๋ฐ์ ๊ฐ์ผ๋ก
VO์์ฑ (pvo)DAO๋ฅผDB๋ก ๋ถํฐ return ๋ฐ๊ณ ๋น์ฆ๋์ค ๋ก์ง ํธ์ถ (rvo)- ๋ฐํ ๊ฐ Attribute ์ ๋ฐ์ธ๋ฉ (vo)
- ํ์ด์ง ์ด๋, ๋ค๋น๊ฒ์ด์ ์ฒ๋ฆฌ (jsp)
ํ์ด์ง ์ด๋
Servlet ์ logic ์ค์ฌ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ๋ ฅ๋ถ๋ถ์ JSP ์์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
๊ทธ๋ผ Servlet์์ ์ฒ๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ JSP๋ก ๋ณด๋ด์ผ ํ๋ค. ์ด๋ป๊ฒ ํด์ผํ ๊น?
์ปจํ
์ด๋ ์์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ Attribute ๋ผ๊ณ ํ๋ค.
Servlet์์ setAttribute() ํธ์ถํด Attribute ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
Attribute ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ JSP์์ getAttribute()๋ฅผ ํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
Servlet์ getAttribute()๋ฅผ ์ธ์ผ์ด ์๋ค.
getAttribute() ๋ ๊ฒฐ๊ณผํ์ด์ง์์๋ง ํธ์ถ๋๋ค.
doProcess()๋ ํ๋์thread์ด๋ค.์ฆ, client์์ ์์ฒญ์ ์๋ต ํ๋ฉด request, response์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ข ๋ global ํ scope ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผํ๋ค. (ServletContext)
์ด์ ์๋
1
request.getRequestDispatcher("result.jsp").forward(request, response);
๋ฅผ ์ฌ์ฉํด์ MemberServlet์ด ์๋ตํ๊ธฐ ์ ์ result.jsp๋ก ํ์ด์ง ์ด๋์ ํ๊ฒ ๋์ด
req, res๊ฐ ์ด์์๋ ๊ฒ์ด๋ค.
์ฆ, Client ์ ์๋ต์ ํ๊ฒ ๋๋ ๊ฒ์ result.jsp ์ด๋ค.
์ง๊ธ๊ณผ ๊ฐ์ ์ฃผ์๋ฅผ ๊ฒ์ํ๋ ๋จ์ํ ๋ก์ง์ด๋ฉด request.setAttribute()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
session์ ๊ตณ์ด ์ฌ์ฉํ ํ์๊ฐ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ MemberServlet ์์ result.jsp ๋ก ๊ฐ๋ ๊ฒ์ ๋๋ค๋ฅธ Requst ์ Response ๋ฅผ ๋ง๋๋ ๊ฒ์ผ๊น?
์๋๋ค.
์ฐ๋ฆฌ๊ฐ find.html ์์ MemberServlet ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ๋๋ Request ์ Response ๊ฐ ๋ง๋ค์ด์ก๋ค.
ํ์ง๋ง MemberServlet ์์ result.jsp ๋ก ๊ฐ๋๊ฒ์
Request ์ Response ๊ฐ ๋ง๋ค์ด์ง์ง ์๋๋ค.
์๋ํ๋ MembertServlet ์์ result.jsp ์ ์์ฒญ์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
์์ฒญ์ด๋ ๋ธ๋ผ์ฐ์ ์์ Server๋ก ์ด๋ํ๋ ๊ฒ์ด๋ค.
์ฆ,
MemberServlet์์result.jsp๋ก ๊ฐ๋ ๊ฒ์ ์ด๋์ด ์๋๋ผ ์์ฒญ์ด๋ค.
Container๋ด์์ ์๋ก ์ด๋ํ๋ ๊ฒ ๊ทธ๋ผresult.jsp๊ฐ ์ ๊ทผํ๋attribute๋MemberServlet์ ๊ฒ
result.jsp๋Attribute์ ์ ์ฅ๋MemberService์request๋ฅผ ๋ฐ์์find๋ก ์๋ตํด์ฃผ๋ ๊ฒ์ด๋ค.์ด ๋
Attribute์ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค.
Forward
๊ฐ์ ์๋ฒ ์์์ ๋ฐ๋ก ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๋ ๋ฐฉ์
Redirect
๋ฐฉํฅ์ ๋ฐ๊พธ๋ ๊ฒ
C๋ A์ ์๋ Request, Response ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ ServletRequest ๋ณด๋ค ์ข ๋ ๋์ Scope๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค.
Redirect ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ฑฐ์น๊ณ ๋ค์ ์๋ฒ๋ก ์ด๋ํ๋ค.
์ด ๋ ์๋ฒ๋ก ์ด๋ํ ๋๋ ๋ค๋ฅธ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
์น ์๋น์ค ์คํ์์
- ์ฝ๋๋ฅผ ์์ฑ
Static Document / Dynamic Document
- ํ๋ก๊ทธ๋จ Dynamic Document
โ ์ปดํ์ผ ์ฑ๊ณต(์คํํ์ผ ~.class)
- ์๋ฒ ๊ฐ๋ start
- ์์ค์ฝ๋ ์๋ฒ์์ผ๋ก ๋ฐฐํฌ
WEB-INF ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์์๋ ํ๋ก๊ทธ๋จ(Dynamic Document)๋ค์ด๊ฐ๊ณ
์์์๋ ์ ์ ์ธ ํ์ผ(Static Document)
- ๋ธ๋ผ์ฐ์ ๋ก ์์ฒญ
http://server IP:port/ContextPath/์์ฒญ์ด๋ฆ
JSP๋ ํ๋ก๊ทธ๋จ์ด๋ค. ๋ณด์ด๋ ๊ฒ๋ง ํ๊ทธ๋ก ๋์์ด์ Static Document๋ก ๋ณด์ผ ์ ์๋ค.
์ปจํ
์ด๋๋ logic ์ค์ฌ์ด๋ค. ๋ฐ๋ผ์ tag ๋ฅผ ์ดํดํ์ง ๋ชปํ๋ค.
์ด๊ฒ์ tomcat ์ด Servlet ์ผ๋ก ๋ฐ๊พธ๊ณ ์์์ ๋ฒ ํฌํ๋ค.
result_jsp.java(Servlet ๋ณํ) โ ์ปดํ์ผ(~.class) โ Servlet์์ฑ โ init() โ Service()
Attribute ์ Scope
Attribute์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ผ์ข ์ ๊ณต๊ฐ
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉ (
setAttribute(โ์ด๋ฆโ, ๊ฐ์ฒด)) - ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ค๋ (
getAttribute(โ์ด๋ฆโ)โ์ด๋ฆโ์ผ๋ก ๋ฐ์ธ๋ฉ๋ ๊ฐ์ฒด๊ฐ return (Object๊ฐ return ๋๊ธฐ ๋๋ฌธ์ ์บ์คํ ์ ํด์ค์ ์ฐพ์์์ผ ํ๋ค.)
Attribute ์ ์ธ๊ฐ์ง ์ข ๋ฅ
์๋ 3๊ฐ์ง๊ฐ Attribute์ ์ข ๋ฅ์ด๋ค. (๋ชจ๋ setAttribute, getAttribute ๊ฐ์ง๊ณ ์๋ค.)
์ ์ฅ ์ ํจ๊ธฐ๊ฐ์ ๋ฐ๋ผ ์ข ๋ฅ๊ฐ ๋ฌ๋ผ์ง๋ค.
ServletRequest
์๋ต์ ํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ฌ๋ผ์ง๋ค. ์ฆ, ์๋ตํ๊ธฐ ์ ๊น์ง ๋ฐ์ดํฐ ์ ํจ
HttpSession
๋ก๊ทธ์ธ ๋๋ ๋์์๋ง ๋ฐ์ดํฐ ์ ํจ
ServletContext
์๋ฒ๊ฐ ๋ฉ์ถ์ง ์๋ํ ๋ฐ์ดํฐ ์ ํจ
DriverManager๋ฐฉ์์ Connection
๋๋ผ์ด๋ฒ ๋ก๋ฉํ๊ณ , Connection ์์ฑํ๋ฉด ๋น์ฉ๋ ๋ง์ด ๋ค๊ณ ๋นํจ์จ์ ์ด๋ค
๋ฐ๋ผ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ Connection ๋ค์ด ๋ค์ด์๋ ๊ณต๊ฐ์ Resource Factory๋ผ๊ณ ํ๋ค.
Resource Factory
Resource Factory๋ WAS์ ์กด์ฌํ๋ค.
WAS ์ ํต์ ํ ์ ์๋ ๋ฌธ์๋
xml์ธ๋ฐConnection ์ WAS์ ๋ฑ๋กํ๋ ๋ฌธ์๋
Context(name, auth(์ด๋ค container์ธ์ง), url, user/pass)๋ผ๊ณ ํ๋ค.
JNDI(Naming) ๊ธฐ์ ์ ์ด์ฉํด Resource Factory์ ์ ๊ทผํ ์ ์๋ค.
ํด์์ ๊ตฌ์กฐ๊ฐ ๋น์ทํ๋ค.
key = jdbc/oracle
value = Resource Factory์ ์ ์ฅ๋ Connection ์ ์ฃผ์๊ฐ
์ฒ์์ Resource Factory์ ์ ์ฅ๋ Connection๋ค์ ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ DB์ ๋ชจ๋ ์ฐ๊ฒฐ
์ด๊ฒ์ ํ๋์ฉ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๊ฐ์ ธ์์ ์ฌ์ฉํ๊ณ close() ํ๋ฉด ๋ค์ Resource Factory์ Connection ์ ๋ค์ ๋ฃ์ด๋๋ค.
๋ง์ฝ close๋ฅผ ์ํ๊ฒ ๋๋ฉด
Connection์ด ๋๋๊ฒ ๋๋ค.
WAS์DB์ฌ์ด์ ๋คํธ์ํฌ๊ฐ ๋์ด์ง๊ฒ ๋๋ค.
Connection ์ ๋ง๋ค ๋๋ DataSource(์ธํฐํ์ด์ค) ํ์
์ผ๋ก ๋ง๋ ๋ค. (Sun ํ์ฌ์์ ๋ง๋ฆ)
์ด๊ฒ์ ์์ํด ๋ง๋ ๊ฒ์ด BasicDataSource ํ์
์ด๋ค.(Apache ํ์ฌ์์ ๋ง๋ฆ)
BasicDataSource ๋ฅผ ์ด์ ๋ง๋ค์ด Context ์ ์ํด Resource Factory์ ๋ฑ๋กํด์ผ ํ๋ค.
BasicDataSource Resource Factory ๋ฑ๋ก ๋ฐฉ๋ฒ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/oracleDB"
auth="Container"
type="javax.sql.DataSource"
username="mykb"
password="1234"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
url="jdbc:oracle:thin:@127.0.0.1:1521:XE"
maxActive="500"
maxIdle="30"
/>
</Context>
Context ๋ฅผ
META-INF์ ์์ฑ
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
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.naming.Context"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Connection Pooling Test..... Using JNDI Service</h2>
<%
Context ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/oracleDB");
out.println("<b>1. DataSource Lookup....</b>");
Connection conn =ds.getConnection(); //Resource Factory๋ก ๋ถํฐ Connection๋น๋ ค์จ๋ค..
out.println("<b>2. Connection Rent Success!!.....</b><br>");
%>
</body>
</html>
connectionPool.jsp๋ฅผ ๋ง๋ค์ด ์ค๋ค





