๐ฅ [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
๋ฅผ ๋ง๋ค์ด ์ค๋ค