Web programming

(22.11.07)Web ํ”„๋กœ๊ทธ๋ž˜๋ฐ: MVC ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž ์ฐพ๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2022. 11. 7.

User ๋ฆฌ์ŠคํŠธ์—์„œ ์ด๋ฆ„์„ ๋ˆ„๋ฅด๋ฉด ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•ด์„œ ๋งž๋Š” ๋ฒˆํ˜ธ์˜ ์ด์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ

 

 

User ๋ชจ๋ธ ํด๋ž˜์Šค

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
import java.io.Serializable;
 
public class User implements Serializable
{
    private int num;
    private String name;
    private String phone;
    private String email;
    
    public User() { }
    
    public User(int num, String name, String phone, String email) {
        this.num = num;
        this.name = name;
        this.phone = phone;
        this.email = email;
    }
    public User(int num) {
        this.num = num;
    }
    @Override
    public boolean equals(Object obj) {
        User u = (User)obj;
        if(this.num==u.num) {
            return true;
        }
        return false;
    }
 
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
}
cs

 

UserService ์„œ๋น„์Šค ํด๋ž˜์Šค

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
import java.io.FileOutputStream;
import java.io.*;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
 
public class UserService 
{
    private HttpServletRequest request;
    private String fpath = "D:/java_test/user.ser";
       
    public UserService(HttpServletRequest request)
    {
       this.request = request;
    }
 
    public boolean save() 
    {
       User u = new User();
       u.setNum(Integer.parseInt(request.getParameter("num")));
       u.setName(request.getParameter("name"));
       u.setPhone(request.getParameter("phone"));
       u.setEmail(request.getParameter("email"));
          
       File f = new File(fpath);
       List<User> list = null;
          
       if(!f.exists()) list = new ArrayList<>();
       else          list = deserialize();
 
       list.add(u);
       return serialize(list);
    }
       
    private boolean serialize(List<User> list)
    {
       try {
          ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream(fpath));
          objOut.writeObject(list);
          objOut.close();
          return true;
       } catch (Exception e) {
          e.printStackTrace();
       }
       return false;
    }
    public User getUser()
    {
       int num = Integer.parseInt(request.getParameter("num"));
       List<User> list = deserialize();
       User key = new User(num);
       if(list.contains(key)) {
           return list.get(list.indexOf(key));
       }
       return null;
    }
       
    private List<User> deserialize()
    {
       try {
          ObjectInputStream objInput = new ObjectInputStream(new FileInputStream(fpath));
          List<User> list = (List<User>)objInput.readObject();
          objInput.close();
          return list;
       } catch (Exception e) {
          e.printStackTrace();
       }
       return null;
    }
 
    public List<User> getlist() {
 
        return deserialize();
    }
}
cs

 

UserController ์ปจํŠธ๋กค ํด๋ž˜์Šค

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
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/userc")
public class UserController extends HttpServlet {
 
    protected void service(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException 
    {
        response.setContentType("text/html; charset=utf-8");
        request.setCharacterEncoding("utf-8");
          
        String cmd = request.getParameter("cmd");
          
        if(cmd==null ||cmd.equals("list"))
        {
           UserService svc = new UserService(request);
           List<User> list = svc.getlist();
           request.setAttribute("list", list);
           getServletContext().getRequestDispatcher("/userlist.jsp").forward(request, response);
        }
        else if(cmd.equals("regForm"))
        {
           getServletContext().getRequestDispatcher("/userRegForm.jsp").forward(request, response);
        }
        else if(cmd.equals("reg"))
        {
           UserService svc = new UserService(request);
           boolean saved = svc.save();
           request.setAttribute("saved", saved);
           getServletContext().getRequestDispatcher("/userRegResult.jsp").forward(request, response);
        }
        else if(cmd.equals("detail"))
        {
           UserService svc = new UserService(request);
           User u = svc.getUser();
           request.setAttribute("u", u);
           getServletContext().getRequestDispatcher("/userDetail.jsp").forward(request, response);
        }else {
            System.err.println("์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
        }
    }
}
cs

 

userlist.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
<%@page import="com.ezen.web.hello.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% List<User> list = (List<User>) request.getAttribute("list"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ €์žฅ๋œ ์ด์šฉ์ž ๋ชฉ๋ก ๋ณด๊ธฐ</title>
<style type="text/css">
    table { border: 1px solid black; border-spacing:1px;
            border-collapse:collapse; padding:0.3em;}
    th{background-color:#eee; border-bottom:3px double black;}
    th,td{padding:0.2em 1em; border-right:1px dashed black;}
    td{border-bottom: 1px dashed black;}
</style>
</head>
<body>
<table>
<tr><th>๋ฒˆํ˜ธ</th><th>์ด๋ฆ„</th><th>์ „ํ™”</th><th>์ด๋ฉ”์ผ</th></tr>
<% 
        for(int i =0;i<list.size();i++){
        User u = list.get(i);
        int num = u.getNum();
        String name = u.getName();
        String phone = u.getPhone();
        String email = u.getEmail();
%>
        <tr>        
            <td><%=num %></td>
            <td><a href="userc?cmd=detail&num=<%=num%>"><%=name%></a></td>
            <td><%=phone %></td>
            <td><%=email %></td>
        </tr>
<%    }    %>
</table>
[<a href="userc?cmd=regForm"> ์ด์šฉ์ž ์ •๋ณด ๋“ฑ๋ก  ๊ฐ€๊ธฐ </a>]
</body>
</html>
cs

 

listDetail.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@page import="com.ezen.web.hello.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% User u = (User)request.getAttribute("u"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ƒ์„ธ๋ณด๊ธฐ</title>
</head>
<body>
<h3>์ด์šฉ์ž ์ •๋ณด ์ƒ์„ธ๋ณด๊ธฐ</h3>
<div id= "container">
<div><label>๋ฒˆํ˜ธ</label> <span><%= u.getNum() %></span></div>
<div><label>์ด๋ฆ„</label> <span><%= u.getName() %></span></div> 
<div><label>์ „ํ™”</label> <span><%= u.getPhone() %></span></div> 
<div><label>์ด๋ฉ”์ผ</label> <span><%= u.getEmail() %></span></div> 
</div>
</body>
</html>
cs

 

์‹คํ–‰ ๊ฒฐ๊ณผ:

๋จผ์ € ๋ฆฌ์ŠคํŠธ์—์„œ containsOf() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ User ๋ชจ๋ธํด๋ž˜์Šค์—์„œ equals()๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ค˜์•ผํ•œ๋‹ค. num์ด ๋งž๋‹ค๋ฉด true๊ฐ€ ๋‚˜์˜ค๊ฒŒ๋” ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ค€๋‹ค.

์ดํ›„ UserController์—์„œ cmd๊ฐ€ detail์ผ ๊ฒฝ์šฐ์˜ ๋กœ์ง์„ ์ฝ”๋”ฉํ•ด์ค€๋‹ค.

๋˜ UserService ์„œ๋น„์Šคํด๋ž˜์Šค์—์„œ getUser ๋ฉ”์†Œ๋“œ๋ฅผ ์ฝ”๋”ฉํ•ด์ค˜์•ผํ•œ๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ๋ฒˆํ˜ธ๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด์ฃผ๊ณ  ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ญ์ง๋ ฌํ™” ์‹œ์ผœ์„œ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๊ณ  ๋ณ€์ˆ˜์™€ ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋งž๋Š”์ง€ ํ™•์ธํ•ด ์ค€๋‹ค.(containsOf() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ) ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด ๊ทธ ๋ฒˆํ˜ธ๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ฐ–๋Š”  User๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๊ณ  ์—†๋‹ค๋ฉด null๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๊ฒŒํ•œ๋‹ค.

userDetial.jsp๋Š” ์ƒˆ๋กœ ์ž‘์„ฑํ•ด์ฃผ๊ณ  userlist.jsp์˜ ์ด๋ฆ„์€ ๋งํฌ๋ฅผ ๊ฑธ์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์ˆ˜์ •ํ•œ๋‹ค.


 

์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ์ด์šฉ์ž ์ฐพ๊ธฐ, ๋™๋ช…์ด์ธ๊นŒ์ง€ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ธฐ

 

UserService ์„œ๋น„์Šค ํด๋ž˜์Šค

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
import java.io.FileOutputStream;
import java.io.*;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
 
public class UserService 
{
    private HttpServletRequest request;
    private String fpath = "D:/java_test/user.ser";
       
    public UserService(HttpServletRequest request)
    {
       this.request = request;
    }
 
    public boolean save() 
    {
       User u = new User();
       u.setNum(Integer.parseInt(request.getParameter("num")));
       u.setName(request.getParameter("name"));
       u.setPhone(request.getParameter("phone"));
       u.setEmail(request.getParameter("email"));
          
       File f = new File(fpath);
       List<User> list = null;
          
       if(!f.exists()) list = new ArrayList<>();
       else          list = deserialize();
 
       list.add(u);
       return serialize(list);
    }
       
    private boolean serialize(List<User> list)
    {
       try {
          ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream(fpath));
          objOut.writeObject(list);
          objOut.close();
          return true;
       } catch (Exception e) {
          e.printStackTrace();
       }
       return false;
    }
    public User getUser()
    {
       int num = Integer.parseInt(request.getParameter("num"));
       List<User> list = deserialize();
       User key = new User(num);
       if(list.contains(key)) {
           return list.get(list.indexOf(key));
       }
       return null;
    }
    public List<User> findUser()
    {
       String key = request.getParameter("name");
       List<User> list = deserialize();
       List<User> found = new ArrayList<>();
       
       for(int i=0;i<list.size();i++) {
           if(list.get(i).getName().equals(key)) {
               found.add(list.get(i));
           }
       }
       if(found.size()==0) found = null;
       return found;
    }
       
    private List<User> deserialize()
    {
       try {
          ObjectInputStream objInput = new ObjectInputStream(new FileInputStream(fpath));
          List<User> list = (List<User>)objInput.readObject();
          objInput.close();
          return list;
       } catch (Exception e) {
          e.printStackTrace();
       }
       return null;
    }
 
    public List<User> getlist() {
 
        return deserialize();
    }
}
cs

 

 

UserController ์ปจํŠธ๋กค ํด๋ž˜์Šค

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
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/userc")
public class UserController extends HttpServlet {
 
    protected void service(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException 
    {
        response.setContentType("text/html; charset=utf-8");
        request.setCharacterEncoding("utf-8");
          
        String cmd = request.getParameter("cmd");
          
        if(cmd==null ||cmd.equals("list"))
        {
           UserService svc = new UserService(request);
           List<User> list = svc.getlist();
           request.setAttribute("list", list);
           getServletContext().getRequestDispatcher("/userlist.jsp").forward(request, response);
        }
        else if(cmd.equals("regForm"))
        {
           getServletContext().getRequestDispatcher("/userRegForm.jsp").forward(request, response);
        }
        else if(cmd.equals("reg"))
        {
           UserService svc = new UserService(request);
           boolean saved = svc.save();
           request.setAttribute("saved", saved);
           getServletContext().getRequestDispatcher("/userRegResult.jsp").forward(request, response);
        }
        else if(cmd.equals("detail"))
        {
           UserService svc = new UserService(request);
           User u = svc.getUser();
           request.setAttribute("u", u);
           getServletContext().getRequestDispatcher("/userDetail.jsp").forward(request, response);
        }else if(cmd.equals("findByName"))
        {
           UserService svc = new UserService(request);
           List<User> list = svc.findUser();
           request.setAttribute("list", list);
           getServletContext().getRequestDispatcher("/userfind.jsp").forward(request, response);
        }else {
            System.err.println("์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
        }
    }
}
cs

 

userlist.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
<%@page import="com.ezen.web.hello.User"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% List<User> list = (List<User>) request.getAttribute("list"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ €์žฅ๋œ ์ด์šฉ์ž ๋ชฉ๋ก ๋ณด๊ธฐ</title>
<style type="text/css">
    table { border: 1px solid black; border-spacing:1px;
            border-collapse:collapse; padding:0.3em;}
    th{background-color:#eee; border-bottom:3px double black;}
    th,td{padding:0.2em 1em; border-right:1px dashed black;}
    td{border-bottom: 1px dashed black;}
</style>
</head>
<body>
<table>
<tr><th>๋ฒˆํ˜ธ</th><th>์ด๋ฆ„</th><th>์ „ํ™”</th><th>์ด๋ฉ”์ผ</th></tr>
<% 
        for(int i =0;i<list.size();i++){
        User u = list.get(i);
        int num = u.getNum();
        String name = u.getName();
        String phone = u.getPhone();
        String email = u.getEmail();
%>
        <tr>        
            <td><%=num %></td>
            <td><a href="userc?cmd=detail&num=<%=num%>"><%=name%></a></td>
            <td><%=phone %></td>
            <td><%=email %></td>
        </tr>
<%    }    %>
</table>
<form action="userc" method="post">
 <input type="hidden" name="cmd" value="findByName">
 <label>์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰</label><input type="text" name="name">
 <button type="submit">[๊ฒ€์ƒ‰]</button>
[<a href="userc?cmd=regForm"> ์ด์šฉ์ž ์ •๋ณด ๋“ฑ๋ก  ๊ฐ€๊ธฐ </a>]
</form>
</body>
</html>
cs

 

userfind.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
<%@page import="java.util.List"%>
<%@page import="com.ezen.web.hello.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% List<User> list = (List<User>)request.getAttribute("list"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰</title>
<style type="text/css">
    table { border: 1px solid black; border-spacing:1px;
            border-collapse:collapse; padding:0.3em;}
    th{background-color:#eee; border-bottom:3px double black;}
    th,td{padding:0.2em 1em; border-right:1px dashed black;}
    td{border-bottom: 1px dashed black;}
</style>
</head>
<body>
<h3>์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰</h3>
<table>
<tr><th>๋ฒˆํ˜ธ</th><th>์ด๋ฆ„</th><th>์ „ํ™”</th><th>์ด๋ฉ”์ผ</th></tr>
<% 
        for(int i =0;i<list.size();i++){
        User u = list.get(i);
        int num = u.getNum();
        String name = u.getName();
        String phone = u.getPhone();
        String email = u.getEmail();
%>
        <tr>        
            <td><%=num %></td>
            <td><a href="userc?cmd=detail&num=<%=num%>"><%=name%></a></td>
            <td><%=phone %></td>
            <td><%=email %></td>
        </tr>
<%    }    %>
</table>
[<a href="userc?cmd=list"> ๋“ฑ๋ก๋œ ์ด์šฉ์ž ์ •๋ณด ๋ณด๊ธฐ </a>]
</body>
</html>
cs

 

์‹คํ–‰ ๊ฒฐ๊ณผ:

์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋™๋ช…์ด์ธ๊นŒ์ง€ ์ฐพ๊ธฐ ์œ„ํ•ด์„  User ๊ฐ์ฒด ํ•˜๋‚˜๋งŒ์„ ๋ฆฌํ„ดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๊ทธ๋ž˜์„œ User list๋ฅผ ๋ฆฌํ„ดํ•ด์•ผํ•œ๋‹ค.

userlist.jsp ์—์„œ form ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์„œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋Š” ๋ฒ„ํŠผ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ค€๋‹ค. cmd์˜ ๊ฐ’์€ findByValue์„ ์ฃผ์–ด ๋กœ์ง์ด ์‹คํ–‰๋˜๊ฒŒ ํ•ด์ค€๋‹ค. ์ปจํŠธ๋กค ์—์„  findByValue ๊ฐ’์„ ๋ฐ›์œผ๋ฉด ์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ ๋ฆฌํ„ด ๋ฐ›์€ list ๋ฅผ userfind.jsp๋กœ ๋ณด๋‚ด์ค€๋‹ค.

์„œ๋น„์Šคํด๋ž˜์Šค์˜ findUser() ๋ฉ”์†Œ๋“œ์—์„  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ์ด๋ฆ„์„ ํ‚ค ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ํ‚ค๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋“ค์„ ๋ฐ˜๋ณต๋ฌธ ์จ์„œ ๋ชจ๋‘ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•˜๊ณ  ๊ทธ ์ €์žฅ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

๋Œ“๊ธ€