๐ฅ [Spring] Pooling ๊ธฐ๋ฒ & Cookie, Session, MVC
Pooling ๊ธฐ๋ฒ
Apache Tomcat HOME
ํ๋จ lib
์ driver
๋ฅผ ๋ฃ์ด์ฃผ๋ฉด
์๋ฒ์ ๋ชจ๋ ๊ณณ์์ DB
๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํด ์ง๋ค.
factory
๋ผ๋ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ ์ ํ์ ๋ณด๊ดํ๋ ๊ฐ๋
์ผ๋ก ์ฌ์ฉํ๋๋ฐ,
Resource Factory
๋ ์ฌ๋ฌ๊ฐ์ง Connection
์ ๋ฏธ๋ฆฌ ๊ฐ์ง๊ณ ์๋ค.
ํด๋นํ๋ Connection ๋ค์ ๋ฏธ๋ฆฌ WAS
์ ๋ฑ๋ก ์์ผ๋์์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ xml
์ ํ์ฉํด์ผ ํ๋ค
Connection
์ ์ฐพ์์ฌ ๋๋Context(Interface)
๋ฅผ ์ฌ์ฉ- ํนํ
Context
์ ๋ฉ์๋ ์คlookup()
์ ํ์ฉํด ์ฐพ์ ์ ์๋ค.- ์ฐพ์์ ๋ฐํ ํ ์์๋
DataSource
ํ์ ์ด๋ค. (Resource Factory)DataSource
์getConnection()
์ ํ์ฉํ๋ฉดConnection
์ ์ป์ ์ ์๋ค.์ด๋ฌํ ๋ฐฉ์์
Pooling ๊ธฐ๋ฒ
์ด๋ผ๊ณ ํ๋ค.
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
40
41
42
43
public class MemberDAOImpl implements MemberDAO{
//ํ๋ ์ถ๊ฐ
private DataSource ds;
//์ฑ๊ธํค
private static MemberDAOImpl dao = new MemberDAOImpl();
//0. InitialContext ๊ฐ์ฒด๋ฅผ ์์ฑ
//1. DataSource๋ฅผ ํ๋ ๋ฐ์์จ๋ค.
private MemberDAOImpl() {
//0. InitialContext ๊ฐ์ฒด๋ฅผ ์์ฑ
//1. DataSource๋ฅผ ํ๋ ๋ฐ์์จ๋ค.
try {
InitialContext ic = new InitialContext();
ds = (DataSource)ic.lookup("java:comp/env/jdbc/oracleDB"); //๊ณต์ฅ ์ฐพ์
System.out.println("Datasource Lookup Sucess.....");
}catch(NamingException e) {
System.out.println("Datasource Lookup faill.....");
}
}
public static MemberDAOImpl getInstance() { //์ฑ๊ธํค
return dao;
}
@Override
public Connection getConnection() throws SQLException {
System.out.println("๋๋น์ฐ๊ฒฐ ์ฑ๊ณต....");
return ds.getConnection(); //Connection ํ๋์ฉ Pool์์ ๋ฐ์์จ๋ค..
}
@Override
public void closeAll(PreparedStatement ps, Connection conn) throws SQLException{ //Factory์ Connection ๋ฐ๋ฉ
if(ps!=null) ps.close();
if(conn != null) conn.close();
}
@Override
public void closeAll(ResultSet rs, PreparedStatement ps, Connection conn) throws SQLException{
if(rs != null) rs.close();
closeAll(ps, conn);
}
์ฝ๋๋ DB ์ฐ๊ฒฐ์ ์ํ ๊ธฐ๋ณธ ์ฝ๋์ด๋ค.
Singletone
๊ธฐ๋ฒ์ผ๋ก ๋ง๋ค์๋ค.
Context
ํด๋์ค๋ฅผ ์ฌ์ฉํดlookup()
์ ํตํด Connection์ ๋น๋ฆดFactory
๋ฅผ ๋ฐํ ๋ฐ์์ผ๋ฉฐ๋ฐํ ๋ฐ์
Factory
๋ ํ๋๊ฐ์ธDataSource ds
์ ๋ฃ์๋ค.๊ทธ ๋ค์
getConnection()
์ ๋ณด๋ฉดFactory
์ ์ ์ฅ๋Connection
ํ๋๋ฅผ ๋น๋ ค์จ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Override
public void registerMember(MemberVO vo) throws SQLException { //ํ์ ๋ฑ๋ก
Connection conn = null;
PreparedStatement ps = null;
try{
conn = getConnection();
String query = "INSERT INTO member (id, password, name, address) VALUES(?,?,?,?)";
ps = conn.prepareStatement(query);
ps.setString(1, vo.getId());
ps.setString(2, vo.getPassword());
ps.setString(3, vo.getName());
ps.setString(4, vo.getAddress());
System.out.println(ps.executeUpdate()+" row INSERT OK~~!!");
}finally{
closeAll(ps, conn);
}
}
(ํ์๊ฐ์ ํ์ด์ง)
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
@Override
public ArrayList<MemberVO> showAllMember() throws SQLException { //์ ์ฒด ๋ฉค๋ฒ ์กฐํ
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
ArrayList<MemberVO> list = new ArrayList<>();
try {
conn = getConnection();
String query = "SELECT id, password, name, address FROM member";
ps = conn.prepareStatement(query);
System.out.println("PreparedStatement....showAllMember()..");
rs = ps.executeQuery();
while(rs.next()) {
list.add(new MemberVO(
rs.getString("id"),
rs.getString("password"),
rs.getString("name"),
rs.getString("address")));
}
}finally {
closeAll(rs, ps, conn);
}
return list;
}
(์ ์ฒดํ์ ๋ถ๋ฌ์ค๊ธฐ)
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
@Override
public MemberVO findByIdMember(String id) throws SQLException { //id๋ก ๋ฉค๋ฒ ์ฐพ๊ธฐ
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
MemberVO vo = null;
try{
conn=getConnection();
String query = "SELECT id, password, name, address FROM member WHERE id=?";
ps = conn.prepareStatement(query);
ps.setString(1, id);
rs = ps.executeQuery();
if(rs.next()) {
vo=new MemberVO(id,
rs.getString("password"),
rs.getString("name"),
rs.getString("address"));
}
System.out.println(id + ", findByIdMember Sucess");
}finally{
closeAll(rs, ps, conn);
}
return vo;
}
(ID ๋ก ํ์ ์ฐพ๊ธฐ)
๋ฉ์ธ ํ๋ฉด์์ โํ์๊ฐ์ ํ๊ธฐโ ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋ฉด register.jsp ๋ก ์ด๋ํ๊ฒ ๋๋ค
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
<%@ 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>
<style type="text/css">
h2{
text-align: center;
color: purple;
}
#wrap{
margin-left: 220px;
}
</style>
<script type="text/javascript">
function btnclick(){
alert("button Click~~!!!");
}
</script>
</head>
<body>
<h2>REGISTER MEMBER FORM</h2>
<div id="wrap">
<form action="Register" method="post">
ID <input type="text" name="id" required="required"><br><br>
PASS <input type="password" name="password" required="required"><br><br>
NAME <input type="text" name="name" required="required"><br><br>
ADDR <input type="text" name="address" required="required"><br><br>
<input type="submit" value="REGISTER">
<input type="button" value="CLICK" onclick="btnclick()">
</form>
</div>
</body>
</html>
(ํ์๊ฐ์ ํผ)
REGISTER
๋ฒํผ์ ๋๋ฅด๋ฉด /Register ์ฃผ์๋ก ์ด๋ํ๊ฒ ๋๋ค.๊ทธ๋ผ ํด๋น form ๊ฐ์ ๋ฐ๊ณ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ํ
Servlet
์ ๋ง๋ค์ด ์ค๋ค.
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
40
41
@WebServlet("/Register")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//๋ก์ง์ ์ฌ๊ธฐ์ ์์ฑ
//1. ํผ๊ฐ ๋ฐ์์
String id = request.getParameter("id");
String password = request.getParameter("password");
String name = request.getParameter("name");
String address = request.getParameter("address");
//2. VO ์์ฑ... PVO
MemberVO pvo = new MemberVO(id, password, name, address);
String path = "index.html";
//3. DAO ๋ฆฌํด๋ฐ๊ณ ๋น์ฆ๋์ค ๋ก์ง ํธ์ถ
try {
MemberDAOImpl.getInstance().registerMember(pvo);
//path = "register_result.jsp"; //๊ตณ์ด ๊ฒฐ๊ณผ ํ์ด์ง ํ์์์
//path="allView.jsp"; ์ด๋ ๊ฒ ํ๋ฉด 500 ์ค๋ฅ๊ฐ ๋๋ค. allView.jsp๋ ์ ์ฒด ๋ฉค๋ฒ๋ฅผ ์กฐํํ๋ DAO๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๋ฐ๋ผ์ AllMemberServlet์ ๊ฐ๋ค๊ฐ allView.jsp๋ก ๊ฐ์ผํ๋ค.
}catch(Exception e) {
}
//4. ๋ฐ์ธ๋ฉ?? => ํ์์๋ค.
//5. ๋ค๋น๊ฒ์ด์
register_result.jsp (๊ตณ์ด ๊ฒฐ๊ณผํ์ด์ง ํ์์์)
//request.getRequestDispatcher(path).forward(request, response);
response.sendRedirect("AllMember");
}
}
form๊ฐ์ ๋ฐ๊ณ ๋น์ฆ๋์ค ๋ก์ง์ธ registerMember()
๋ฅผ ํธ์ถํด ํ์๋ฑ๋ก์ ํ๋ค.
๊ทธ ๋ค์ ํ์๊ฐ์ ์ด ์๋ฃํ๋ค๋ ์ฑ๊ณต ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋๋ฐ ๊ตณ์ด ํ์์๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์
์์ ์ด ํ์๊ฐ์ ์ด ๋๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ ์ฒด ํ์์ ๋ณด์ฌ์ฃผ๋ ํธ์ด ๋ซ๋ค.
๋ฐ๋ผ์ request.getRequestDispatcher("AllMember").forward(request, response)
๋ฅผ ํธ์ถํ๋๊ฒ์ด ์๋๋ผ response.sendRedirect("AllMember")
๋ฅผ ํธ์ถํด์ผ ํ๋ค.
Client๋ก ๋ค์ ๊ฐ์ AllMember Servlet์ ๊ฑฐ์ณ์ ๊ทธ ์์์ showAllMember()
๋ก์ง์ ํธ์ถํด์ผ
์ ์ฒด ํ์์ ์กฐํํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
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
@WebServlet("/AllMember")
public class AllMemberServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//1. DAO ๋ฆฌํด ๋ฐ๊ณ business logic ํธ์ถ
//2. ๋ฐํ๋ ๊ฐ ๋ฐ์ธ๋ฉ
//3. ๊ฒฐ๊ณผ ํ์ด์ง๋ก ๋ค๋น๊ฒ์ด์
...allView.jsp
try {
ArrayList<MemberVO>list =MemberDAOImpl.getInstance().showAllMember();
request.setAttribute("list", list);
request.getRequestDispatcher("allView.jsp").forward(request, response);
}
catch(Exception e) {
}
}
}
ArrayList๋ฅผ ์ด์ฉํด showAllMember()
์ return๊ฐ์ ๋ฐ๋๋ค.
DB๋ฅผ ํตํด ๋ฐ์์จ๊ฐ์ request
๊ฐ์ฒด์ ๋ฃ์ ์ ์์ผ๋ฏ๋ก setAttribute()
๋ฅผ ํตํด ๋ฃ์ด์ค๋ค.
๊ทธ๋์ผ allView.jsp ์์ ํด๋น ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<%@page import="servlet.model.MemberVO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
ArrayList<MemberVO> list = (ArrayList) request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<script
src="https://cdn.jsdelivr.net/npm/jquery@3.6.4/dist/jquery.slim.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<!--๋์ค์ ์ด๋ถ๋ถ์ BootStrap ํด๋์ค ์์ฑ ์ฐ๊ฒฐํด์ ์์ ํ ๋์์ธ์ผ๋ก ์ง์ ๋ง๋ค์ด ์ฃผ์ธ์ -->
<div class="jumbotron text-center">
<h2>ํ์ ์ ์ฒด ๋ช
๋จ ๋ณด๊ธฐ</h2>
</div>
<div class="container">
<table class="table table-hover">
<thead>
<tr>
<th>ID</th>
<th>์ด๋ฆ</th>
<th>์ฃผ์</th>
</tr>
</thead>
<tbody>
<%
for (MemberVO vo : list) {
%>
<tr>
<td><%=vo.getId()%></td>
<td><%=vo.getName()%></td>
<td><%=vo.getAddress()%></td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
</body>
</html>
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
@WebServlet("/Find")
public class FindServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//๋ก์ง์ ์ฌ๊ธฐ์ ์์ฑ
//1 getParameter๋ก ID ๋ฐ์์ค๊ธฐ -Front์ ์ฐ๊ฒฐ
String id = request.getParameter("id");
//2 DB ์ ํด๋น ID ์๋์ง ํ์ธ -- DB ์ฐ๊ฒฐ
String path="find_fail.jsp";
try {
MemberVO rvo = MemberDAOImpl.getInstance().findByIdMember(id);
if(rvo != null) { //ID๋ฅผ ํตํด ํ์์ ์ฐพ์ผ๋ฉด
request.setAttribute("vo", rvo);//3 ๋ฐํ๋ ๊ฐ์ ๋ฐ์ธ๋ฉ
path="find_ok.jsp";
}
}
catch(Exception e) {
}
//4 ๋ค์ด๊ฒ์ด์
...jsp ๊ฒฐ๊ณผํ์ด์ง๋ก -- View์ ์ฐ๊ฒฐ
request.getRequestDispatcher(path).forward(request, response);
}
}
findByIdMember()
๋ฅผ ํ์ฉํด ID๋ฅผ ํตํด ํ์์ ์ฐพ๋๋ค.
rvo๊ฐ null ์ด ์๋๋ฉด ํ์์ ์ฐพ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก rvo๋ฅผ setAttribute()
๋ก ์ ์ฅํด์ฃผ๊ณ
path๋ฅผ find_ok.jsp๋ก ์ค์ ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@page import="servlet.model.MemberVO"%>
<%@ 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>
<%
MemberVO vo =(MemberVO)request.getAttribute("vo");
%>
<h2>ํ์ ๊ฒ์ ๊ฒฐ๊ณผ</h2>
ID : <%= vo.getId() %><br>
NAME :<%= vo.getName() %><br>
ADDRESS: <%= vo.getAddress() %>
</body>
</html>
Session Management With Cookie
Attribute
์๋ ๋ฐ์ดํฐ ์ ํจ๊ธฐ๊ฐ์ ๋ฐ๋ผ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋จใด
ServletRequest
์๋ต ์ ๊น์ง ๋ฐ์ดํฐ ๋ณด๊ด
HttpSession
๋ก๊ทธ์ธ ํ๋ ๋์ ๋ฐ์ดํฐ ๋ณด๊ด
๋ก๊ทธ์ธ ์ํ์ธ ๊ฒ์ ์ด๋ป๊ฒ ํ์ธํ ๊น?
์ด์ ์ฌ์ฉ์์ ๋ฐฉ๊ธ ์์ฒญํ ์ฌ์ฉ์์ ์ ๋ณด๊ฐ ๊ฐ๋ค๋๊ฑธ ์ธ์ํ๋ ๊ฒ์ด
๋ก๊ทธ์ธ
ServletContext
์๋ฒ๊ฐ ๋ฉ์ถ๊ธฐ ์ ๊น์ง ์ ๋ณด ๋ณด๊ด
Cookie
์ฟ ํค๋ A Server์์ ๋ง๋ค์ด ์ง๋ค. ์ ๋ณด๊ฐ String์ผ๋ก ์ ์ฅ๋๋ค.
(A ์๋ฒ์ ์ ๋ณด๊ฐ ์ฟ ํค์ ๋ค์ด๊ฐ)
Cookie c = new Cookie(โidโ, โkbโ);
Server๊ฐ ์๋ตํ๋ฉด ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด์ง๊ฒ ๋๋ค.
response.addCookie(c);
B server๋ก ์์ฒญ๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋ ์ฟ ํค๊ฐ B Server๋ก ์ ๋ฌ๋๋ค.
์ ๋ฌ ๋ ๋ ๋ชจ๋ ์ฟ ํค๊ฐ ์ ๋ฌ ๋๋ฉฐ ๊ทธ ์ค์์ ์ํ๋ ์ฟ ํค๋ฅผ ์ฐพ๋๋ค.
Cookie[] cookies = request.getCookies();
=> ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋ ๋ชจ๋ ์ฟ ํค๊ฒฐ๊ตญ A์๋ฒ์์ ๋ง๋ ์ ๋ณด๊ฐ B ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ๋ฌ์ด ์ผ์ด๋๋ค.
Attribute์์ ๋ฐ์ดํฐ ์ ๋ฌ๊ณผ Cookie์์ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ฐจ์ด
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("/CookieServlet")
public class CookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//1. ์ฟ ํค ์์ฑ
Cookie c1 = new Cookie("id", "KBLife");
Cookie c2 = new Cookie("today", "2023-08-18");
//์ฟ ํค์์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ธฐ๊ฐ์ ์ง์
c1.setMaxAge(24*60*60); //ํ๋ฃจ๋์ ์ ๋ณด ๋ณด๊ด
c2.setMaxAge(2*24*60*60); //2์ผ ๋์ ์ ๋ณด ๋ณด๊ด
//2. ์์ฑ๋ ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ ... ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ
response.addCookie(c1);
response.addCookie(c2);
//3, ํ์ด์ง ์ด๋... redirect๋ก ํด์ผํจ ์ฟ ํค๋ฅผ ๊ฒฐ๊ณผํ์ด์ง์ ์ ๋ฌํด์ผ ํ๊ธฐ ๋๋ฌธ
response.sendRedirect("getCookie.jsp");
}
}
ํ์ฌ ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ์์ผ๋ฏ๋ก ๊ฒฐ๊ณผ ํ์ด์ง๋ก ๋ฐ๋ก forward ๋ฐฉ์์ด ๋ถ๊ฐ๋ฅ
๋ฐ๋ผ์ Redirect๋ฅผ ์ฌ์ฉํด ๋ธ๋ผ์ฐ์ ๋ก ๊ฐ๋ค๊ฐ getCookie.jsp๋ก ๊ฐ์ผํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
Cookie[]cs = request.getCookies();
for(Cookie c : cs){
%>
<li>Name : <%= c.getName() %></li>
<li>Value : <%= c.getValue() %></li>
<%
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
๋ธ๋ผ์ฐ์ ๊ฐ
Server
๋ก ์์ฒญ์ ํ๋ฉดRequest
,Response
,thread
,Session
์ด ๋ง๋ค์ด์ง๋ค.์ด ๋
Session
์ ๊ฐ์ด ์๋์ผ๋ก ๋ค์ด๊ฐ๋ค.์ด๊ฒ ๋ฐ๋ก
JSESIONID
๊ฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>Login Page</h2>
<form action="LoginServlet" method="post">
ID : <input type="text" name="id" required="required"><br><br>
PASSWORD : <input type="password" name="password" required="required"><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
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
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
/*
1. ํผ๊ฐ ๋ฐ์์...
2. DAO ๋ฆฌํด๋ฐ๊ณ .. ๋น์ฆ๋์ค ๋ก์ง ํธ์ถ...
3. ๋ฐํ๊ฐ ๋ฐ์ธ๋ฉ
4. ๊ฒฐ๊ณผ ํ์ด์ง๋ก ๋ค๋น๊ฒ์ด์
*/
//์ธ์
์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์์ ์๋ฒ์ ๋ง๋ค์ด์ง๋ค.
//๋ง๋ค์ด์ง ์ธ์
์ ๋ฐ์์ ์ฌ์ฉํ๋ค.
//login.html์์ LoginServlet์ผ๋ก ์์ฒญํด์ ์ธ์
์์ฑ๋จ
HttpSession session =request.getSession();
System.out.println("JSESSION::" + session.getId()); //JSESSION ํ์ธ
String id = request.getParameter("id");
String password = request.getParameter("password");
MemberVO vo = new MemberVO(id, password, "๊ธธ๋ณต์", "์ฌ์๋");
//๋น์ฆ๋์ค ๋ก์ง ํธ์ถ... ๊ฒฐ๊ณผ๊ฐ ๋ฐํ...
//๋ฐ์ธ๋ฉ ******************!!
//attribute๋ฅผ session์ ๋ฐ์ธ๋ฉ ํ๋ ๊ฒฝ์ฐ 2๊ฐ์ง
// ๋ก๊ทธ์ธ, ํ์์ ๋ณด ์์ ์ด 2๊ฐ ๋ง๊ณ ๋๋จธ์ง๋ ๊ฒฝ์ฐ ์๋ค.
session.setAttribute("vo", vo); //์ธ์
์ ํ์ฌ ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ
//๋ค๋น๊ฒ์ด์
response.sendRedirect("BuyServlet");
}
}
ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ธ์ง ํ์ธํ๊ธฐ ์ํด
Client
๋ฅผ ๊ฐ๋ค๊ฐ ๋ค์ ์ฑ ์ ์ฌ๊ธฐ ์ํดBuyServlet
์ผ๋ก ์ด๋ํ๋ค.๊ทธ๋ผ
BuyServlet
์์ ํ์ฌSession
์ ํ์ธํด ์ด์ ์ ๋ก๊ทธ์ธ ํ ํ์์ธ์ง ํ๋ณํด์ผ ํ๋ค
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
@WebServlet("/BuyServlet")
public class BuyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//๋ก์ง์ ์ฌ๊ธฐ์ ์์ฑ... ์ด๊ฒ์ ์๋ก์ด ์ธ์
์ด ์๋๋ผ ์ด์ ์ธ์
์ผ ๊ฒ์ด๋ค...ํ์ธ ํ์
HttpSession session = request.getSession();
if(session.getAttribute("vo") != null) { //๋ก๊ทธ์ธ ๋ ์ํ๋ผ๋ฉด
System.out.println("JSESSIONID... ButServlet" + session.getId());
session.setAttribute("book", "์คํํ์ด๋จธ");
request.getRequestDispatcher("buy_result.jsp").forward(request, response);
}
else { //๋ก๊ทธ์ธ ์๋ ์ํ๋ผ๋ฉด... ๋ค์ ๋ก๊ทธ์ธ ํ๋ฌ ๋ณด๋ด์ผ ํจ
response.sendRedirect("login.html");
}
}
}
BuyServlet์์ ๋ฝ์๋ธ Session์์ getAttribute()
๋ฅผ ํ์ ๋ null ์ด ์๋๋ฉด ์ด์ ์ ๋ก๊ทธ์ธํ
ํ์์ด๋ผ๋ ์๋ฏธ์ด๋ค.
์ฌ๊ธฐ์ ํ์ฌ ํ์์ด โ์คํํ์ด๋จธโ ๋ผ๋ ์ฑ
์ ์๋ค๊ณ setAttribute()
ํด์ฃผ๊ณ buy_result.jsp๋ก forward ํ๋ค
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
///buy_result.jsp
<%@page import="servlet.model.MemberVO"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
MemberVO vo=(MemberVO)session.getAttribute("vo");
String book=(String)session.getAttribute("book");
if(vo==null){ //๋ก๊ทธ์ธ ํ ์ํ๊ฐ ์๋๋ผ๋ฉด
%>
<h3>๋ก๊ทธ์ธ๋ถํฐ ํ์ธ์ฌ</h3>
<a href="login.html">LOGIN</a>
<%
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>Information...</h2>
LOGIN ID : <b><%= vo.getId() %></b><br>
LOGIN Name : <b><%= vo.getName() %></b><br>
ProductName : <b><%= book %></b><br>
</body>
</html>
ํด๋น JSP ๋ก ํ์ธํ๋ฉด LoginServlet์ ์ธ์ ๊ณผ BuyServlet์ ์ธ์ ์ด ๊ฐ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
MVC
FrontController
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Servlet
์ด ์ด 4๊ฐ ๋์ค๊ฒ ๋๋ค.
ํ๋์ Servlet์ ๋ง๋ค๋ฉด ์ฌ๋ฌ ์ธํฐํ์ด์ค๋, ์์ฒญ์ ๋ฐ๊ฒ ๋๋ฉด Request, Response, thread, Session์ด ๋ง๋ค์ด์ง๋ค.
์ด๊ฒ x4๊ฐ ๋ง๋ค์ด ์ง๋ ๊ฒ์ด๋ค.
์ฆ, Servlet
์ด ๋๋ฌด ๋ง๋ค์ด์ง๋ ๋ฌธ์ ์ ์ด ์กด์ฌํ๊ฒ ๋๋๋ฐ
๋ฐ๋ผ์ 4๊ฐ์ Servlet
์ 1๊ฐ์ Servlet
์ผ๋ก ๋ฌถ์ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด Servlet
์ ์ด๋ค ์์ฒญ์ด ์ค๋์ง ํ๋ํ๋ ํ๋ณ์ ํด์ค์ผ ํ๋ค.
โ FrontController
ํจํด์ผ๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
Servlet
์ผ๋ก ์์ฒญ์ ๋ชจ๋ ๊ณณ์์ FrontController
๋ก ๊ฐ๊ฒ ํ๋ ๊ฒ์ด๋ค.
find.jsp
, login.jsp
, register.jsp
, allView.jsp
์์ ์์ฒญ์ ๊ฐ๊ฐ์ Servlet
์ด ์๋๋ผ
front.do
๋ผ๋ FrontCotroller๋ก ๊ฐ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ๋จผ์ ์ด๋ค ์์ฒญ์ด ์๋์ง ์์์ผ ํ๋ค.
1
2
// find.jsp
<input type="hidden" name="command" value="find">
ํด๋น ์ฝ๋๋ฅผ form ํ๊ทธ ์์ ๋ฃ์ด ์ค๋ค. ์ ์ฝ๋๋
hidden
์ด๊ธฐ ๋๋ฌธ์Client
ํ๋ฉด์๋ ๋ณด์ด์ง ์๋๋ค.
1
2
// index.html
<p><a href="front.do?command=showAll">์ ์ฒด ํ์ ๋ณด๊ธฐ</a></p>
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
@WebServlet("/front.do")
public class FrontController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doProcess(request, response);
}
protected void doProcess(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// ๋ก์ง์ ์ฌ๊ธฐ์ ์์ฑ...์ด๋ค ์์ฒญ์ด ๋ค์ด์๋์ง๋ฅผ ... ๊ตฌ๋ถ
// register, login, find, showAll...
String command = request.getParameter("command");
String path = "index.html";
if (command.equals("register")) { // ํ์๊ฐ์
๋ก์ง..
path = register(request, response);
} else if (command.equals("find")) {
path = find(request, response);
} else if (command.equals("login")) {
path = login(request, response);
} else if (command.equals("showAll")) {
path = showAll(request, response);
}
request.getRequestDispatcher(path).forward(request, response);
}// do process
private String register(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 1. ํผ๊ฐ ๋ฐ์์
String id = request.getParameter("id");
String password = request.getParameter("password");
String name = request.getParameter("name");
String address = request.getParameter("address");
// 2. VO ์์ฑ... PVO
MemberVO pvo = new MemberVO(id, password, name, address);
String path = "index.html";
// 3. DAO ๋ฆฌํด๋ฐ๊ณ ๋น์ฆ๋์ค ๋ก์ง ํธ์ถ
try {
MemberDAOImpl.getInstance().registerMember(pvo);
} catch (Exception e) {
}
return path;
}
private String find(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ๋ก์ง์ ์ฌ๊ธฐ์ ์์ฑ
// 1 getParameter๋ก ID ๋ฐ์์ค๊ธฐ -Front์ ์ฐ๊ฒฐ
String id = request.getParameter("id");
// 2 DB ์ ํด๋น ID ์๋์ง ํ์ธ -- DB ์ฐ๊ฒฐ
String path = "find_fail.jsp";
try {
MemberVO rvo = MemberDAOImpl.getInstance().findByIdMember(id);
if (rvo != null) {
request.setAttribute("vo", rvo);// 3 ๋ฐํ๋ ๊ฐ์ ๋ฐ์ธ๋ฉ
path = "find_ok.jsp";
}
} catch (Exception e) {
}
// 4 ๋ค์ด๊ฒ์ด์
...jsp ๊ฒฐ๊ณผํ์ด์ง๋ก -- View์ ์ฐ๊ฒฐ
return path;
}
private String login(HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
String password = request.getParameter("password");
String path = "index.html";
try {
MemberVO rvo = MemberDAOImpl.getInstance().login(id, password);
HttpSession session = request.getSession();
if (rvo != null) {
session.setAttribute("vo", rvo);
System.out.println("JSESSIONID ::" + session.getId());
path = "login_result.jsp";
}
} catch (Exception e) {
path = "login.jsp";
}
return path;
}
private String showAll(HttpServletRequest request, HttpServletResponse response) {
String path="index.html";
try {
ArrayList<MemberVO> list = MemberDAOImpl.getInstance().showAllMember();
request.setAttribute("list", list);
path = "allView.jsp";
} catch (Exception e) {
}
return path;
}
}
์ด์ ์ด๋ค ์์ฒญ์ธ์ง ์์์ผ๋ฏ๋ก ์์ฒญ์ ๋ฐ๋ฅธ
Servlet
์FrontController
์ ์ ์ํด์ฃผ๋ฉด ๋๋ค.์ด๋ ๊ฒ ์์ฑํ๋ฉด ๊ฒฐ๊ตญ
Servlet
์FrontController
1๊ฐ๋ง ๋ง๋ ๊ฒ๊ณผ ๊ฐ๋ค.