Web programming

(22.11.22)Web ํ”„๋กœ๊ทธ๋ž˜๋ฐ: JSP ๊ฐœ๋ฐœ๋ชจ๋ธ1 MVC๋ฐฉ์‹(๋กœ๊ทธ์ธํ•˜์—ฌ ๊ฒŒ์‹œํŒ ์ž‘์„ฑํ•˜๊ธฐ)

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


๋กœ๊ทธ์ธ์„ ํ•˜์—ฌ ๋กœ๊ทธ์ธ ์•„์ด๋””๋ฅผ ์ž‘์„ฑ์ž๋กœ ์“ฐ๊ณ  ๊ฒŒ์‹œํŒ CRUD ์‹ค์Šต
๋กœ๊ทธ์ธํ•˜์ง€ ์•Š๊ณ  ๊ฒŒ์‹œํŒ์— ๋“ค์–ด๊ฐ€๋ ค ํ•ด๋„ ๋กœ๊ทธ์ธ ๋จผ์ € ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ
Controller ์—ญํ• ์„ ํ•˜๋Š” JSP๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•˜๊ฒŒ ํ•ด์ฃผ๊ธฐ

 

โ—โ—๋กœ๊ทธ์ธ Partโ—โ—

 

User.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class User 
{
    private String uid;
    private String pwd;
    
    public User() {}
    
    public String getUid() {
        return uid;
    }
    public void setUid(String uid) {
        this.uid = uid;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}
 
cs

๋กœ๊ทธ์ธ ํŒŒํŠธ์˜ VOํด๋ž˜์Šค๋กœ, ์ฆ‰ ๋ชจ๋ธ ํด๋ž˜์Šค๋กœ ์“ธ ๋ฐ์ดํ„ฐ๋“ค์ด ๊ตฌ์ถ• ๋˜์–ด ์žˆ๋‹ค.

๋ณ€์ˆ˜๋“ค์„ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ  getter์™€ setter ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ jsp์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

UserService.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import javax.servlet.http.HttpSession;
 
public class UserService 
{
    private HttpSession session;
    
    public UserService() {}
    
    public boolean login(User user)
    {
        if(user.getUid().equals("smith"&& user.getPwd().equals("1111"))
        {
            session.setAttribute("uid", user.getUid());
            return true;
        }
        return false;
    }
    public void setSession(HttpSession session) {
        this.session = session;
    }
}
 
cs

์„œ๋น„์Šค ํด๋ž˜์Šค๋กœ์„œ ๋กœ๊ทธ์ธ ํ•œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋Œ€์กฐํ•˜์—ฌ ๋…ผ๋ฆฌAND๋ฅผ ์จ์„œ ๋งž๋‹ค๋ฉด ์„ธ์…˜๊ฐ์ฒด์— ์•„์ด๋””๋ฅผ ์ €์žฅํ•˜์—ฌ ์ค€๋‹ค. ์ด ์•„์ด๋””๋Š” ๋‚˜์ค‘์— session.getAttribute๋ฅผ ํ•ด์„œ ์ž‘์„ฑ์ž๋ฅผ ์•„์ด๋””๋ช…์œผ๋กœ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ ์„ฑ๊ณต์ด๋ผ๋ฉด true๋ฅผ ์•„๋‹ˆ๋ผ๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 

loginForm.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
55
56
57
58
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>๋กœ๊ทธ์ธ ํผ</title>
<style type="text/css">
    main {width:fit-content; margin:1em auto; }
    main h3{ text-align: center;}
    form {border:1px solid black; padding:1em;}
    label {display:inline-block; width:3em; text-align: right; padding-right:1em; }
    div.btn { width:fit-content; margin: 0.5em auto; }
</style>
<script src="https://code.jquery.com/jquery-3.6.1.min.js" 
    integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
<script type="text/javascript">
function getLogin()
{
    var obj = $('#loginForm').serialize();
    $.ajax({
        url : 'loginController.jsp',
        method:'post',
        data : obj,
        cache:false,
        dataType:'json',
        success:function(res){
            alert(res.login ? '๋กœ๊ทธ์ธ ์„ฑ๊ณต':'๋กœ๊ทธ์ธ ์‹คํŒจ');
            if(res.login){
                location.href=res.url;
            }
        },
        error : function(xhr, status, err){
            alert('์—๋Ÿฌ:' + err);
        }
    });
    return false;
}
</script>
</head>
<body>
<main>
<h3>๋กœ๊ทธ์ธ ํผ</h3>
<form id="loginForm" onsubmit="return getLogin();">
    <input type="hidden" name="cmd" value="login">
    <div><label for="uid">์•„์ด๋””</label>
        <input type="text" id="uid" name="uid" value="smith">
    </div>
    <div><label for="pwd">์•”ํ˜ธ</label>
        <input type="password" id="pwd" name="pwd" value="1111">
    </div>
    <div class="btn">
        <button type="reset">์ทจ์†Œ</button>
        <button type="submit">๋กœ๊ทธ์ธ</button>
    </div>
</form>
</main>
</body>
</html>
cs

๋กœ๊ทธ์ธ ํŒŒํŠธ์˜ ๋ทฐ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” jsp๋กœ ์•„์ด๋””์™€ ์•”ํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ์ž…๋ ฅ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™” ํ•˜์—ฌ ajax ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” loginController.jsp ๊ฐ€์„œ cmd๊ฐ€ login์ด๊ธฐ ๋•Œ๋ฌธ์— loginProc.jsp๋กœ ๊ฐ„๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐ›์€ ์‘๋‹ต์ด ์ฐธ์ด๋ฉด ๋กœ๊ทธ์ธ ์„ฑ๊ณต์„ ๊ฑฐ์ง“์ด๋ฉด ๋กœ๊ทธ์ธ ์‹คํŒจ๋ฅผ alert์ฐฝ์— ๋„์šด๋‹ค.

๋กœ๊ทธ์ธ์ด ์„ฑ๊ณต์ด๋ฉด ์ฆ‰ ์‘๋‹ต์œผ๋กœ ๋„˜์–ด์˜จ login ๊ฐ’์ด true๋ฉด ๊ฐ™์ด ์‘๋‹ต์—์„œ ๊ฐ™์ด ๋„˜์–ด์˜จ url ๊ฐ’์œผ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋งํฌ๋ฅผ ๊ฑธ์–ด์ค€๋‹ค.

 

loginController.jsp

1
2
3
4
5
6
7
8
9
10
11
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
    String cmd = request.getParameter("cmd");
    if (cmd==null) cmd = "loginform";
    
    if(cmd.equals("loginform")){ %>
        <jsp:forward page="loginForm.jsp"/>
<%    }else if(cmd.equals("login")){ %>
        <jsp:forward page="loginProc.jsp"/>
<%    }
%>
cs

๋กœ๊ทธ์ธ ํŒŒํŠธ์˜ ์ปจํŠธ๋กค๋กœ์„œ cmd์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋‹น jsp๋กœ ๋ณด๋‚ด์ค€๋‹ค.

์š”์ฒญ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„ cmd๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด cmd๋ฅผ loginform๋ผ ํ•ด์ค€๋‹ค.

cmd๊ฐ€ loginform๋ผ๋ฉด loginForm.jsp์˜ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  cmd๊ฐ€ login์ด๋ผ๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ loginProc.jsp๋กœ ๋ณด๋‚ธ๋‹ค.

 

loginProc.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@page import="org.json.simple.JSONObject"%>
<%@ page contentType="application/json; charset=utf-8" pageEncoding="utf-8"%>
 
<jsp:useBean id="login_svc" class="com.ezen.web.user.UserService" scope="session"/>
<jsp:setProperty name="login_svc" property="session" value="<%=session%>" />
 
<jsp:useBean id="user" class="com.ezen.web.user.User">
    <jsp:setProperty name="user" property="*" />
</jsp:useBean>
 
<%
    boolean ok = login_svc.login(user);
    JSONObject jsObj = new JSONObject();
    jsObj.put("login", ok);
    jsObj.put("url", (String)session.getAttribute("url"));
    out.print(jsObj.toJSONString());
    out.flush();
%>
cs

setProperty๋ฅผ ํ†ตํ•ด ๋„˜์–ด์˜จ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ setUid, setPwdํ•ด์„œ user ๊ฐ์ฒด์— ๋‹ด์•„ login service ํด๋ž˜์Šค๋กœ ๋ณด๋‚ธ๋‹ค. ์ด๊ณณ์—์„œ ์ฒ˜๋ฆฐ๋œ ๊ฐ’์„ boolean ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ  json ์˜ค๋ธŒ์ ํŠธ์— {login, ok}, {url, ์„ธ์…˜๊ฐ์ฒด์— ๋‹ด์•„์ ธ์˜จ url} ๋ฅผ ๋‹ด์•„ loginForm.jsp์— json ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‘๋‹ต์œผ๋กœ ๋„˜๊ธด๋‹ค.


โ—โ—Board Partโ—โ—

Board.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
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
import java.io.Serializable;
 
public class Board implements Serializable, Comparable<Board>
{
    private int num;
    private String title;
    private String author;
    private java.sql.Date regDate;
    private String contents;
    private int hit;
 
    public Board() {}
    
    public Board(int num) {
        this.num = num;
    }
 
    @Override
    public boolean equals(Object obj) {
        Board other = (Board)obj;
        return this.num==other.num;
    }
    @Override
    public String toString() {
        return String.format("%d %s %s %s %s %d"
                num,title,author,regDate,contents,hit);
    }
    @Override
    public int compareTo(Board o) {
        if(this.num>o.num) return 1;
        else if(this.num==o.num) return 0;
        else return -1;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public java.sql.Date getRegDate() {
        return regDate;
    }
    public void setRegDate(java.sql.Date regDate) {
        this.regDate = regDate;
    }
    public String getContents() {
        return contents;
    }
    public void setContents(String contents) {
        this.contents = contents;
    }
    public int getHit() {
        return hit;
    }
    public void setHit(int hit) {
        this.hit = hit;
    }
}
cs

๋ณด๋“œ ํŒŒํŠธ์˜ ๋ชจ๋ธ ํด๋ž˜์Šค(VOํด๋ž˜์Šค)์ด๋‹ค. ๋‚˜์ค‘์— contain() ๋ฉ”์†Œ๋“œ์—์„œ equals()๋ฅผ ์“ธ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆํ˜ธ๋กœ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•˜์—ฌ equals()๋ฉ”์†Œ๋“œ๋ฅผ  ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ค€๋‹ค. ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•ด์ค„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— compareTo() ๋ฉ”์†Œ๋“œ๋„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ค€๋‹ค. ๊ฐ ๋ณ€์ˆ˜๋“ค์„ getter, setter ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ณ  num๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ–๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์„œ๋น„์Šค ํด๋ž˜์Šค์—์„œ ์“ธ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— num๋งŒ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž ๋˜ํ•œ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

 

BoardService.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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import java.io.*;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
 
public class BoardService 
{
    private HttpServletRequest request;
    private HttpSession session;
    
    private String fpath = "D:/java_test/boardList.ser";
    
    public BoardService() {}
 
    public boolean add(Board board)
    {
        List<Board> list = deserialize(); 
        int num = 1;
        if(list.size()>0) { 
            Board last = list.get(list.size()-1);  
            num = last.getNum() + 1
        }
        board.setNum(num);
        board.setAuthor((String) session.getAttribute("uid"));
        
        java.util.Date today = new java.util.Date(); 
        java.sql.Date sqlDate = new java.sql.Date(today.getTime());
        board.setRegDate(sqlDate);
        
        boolean added = list.add(board);
        return added && serialize(list);
    }
    
    public List<Board> getList()
    {
        return deserialize();
    }
    
    public Board find(Board key)
    {
        List<Board> list = deserialize();
        if(list.contains(key)) {
            return list.get(list.indexOf(key));
        }
        return null;
    }
    
    public Board read(Board key)
    {
        String cmd = request.getParameter("cmd");
        Board found = find(key);
        
        if(cmd.equals("FIND")){
            return found;
        }
        
        found.setHit(found.getHit()+1);
        List<Board> list = deserialize();
        list.get(list.indexOf(found)).setHit(found.getHit());
        serialize(list);
        return found;
    }
    public boolean update(Board newBoard) {
        List<Board> list = deserialize();
        if(list.contains(newBoard)) {
            Board b = list.get(list.indexOf(newBoard));
            b.setTitle(newBoard.getTitle());
            b.setContents(newBoard.getContents());
            return serialize(list);
        }
        return false;
    }
    public boolean deleteBoard(Board key)
    {
        List<Board> list = deserialize();
        if(list.contains(key)) {
            list.remove(list.indexOf(key));
            return serialize(list);
        }
        return false;
    }
    
    private boolean serialize(List<Board> list)
    {
        File f = new File(fpath);
        try {
            ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream(f));
            oout.writeObject(list);
            oout.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    
    private List<Board> deserialize()
    {
        File f = new File(fpath);
        List<Board> list = null;
        if(!f.exists()) {
            list = new ArrayList<Board>();
        }else {
            try {
                ObjectInputStream oin = new ObjectInputStream(new FileInputStream(f));
                list = (List<Board>)oin.readObject();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }    
        return list;
    }
    
    public HttpServletRequest getRequest() {
        return request;
    }
 
    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }
 
    public HttpSession getSession() {
        return session;
    }
 
    public void setSession(HttpSession session) {
        this.session = session;
    }
}
cs

request๊ฐ์ฒด์™€ session๊ฐ์ฒด๋ฅผ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ  ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•˜์—ฌ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด getter, setter ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

11ํ–‰ : ๋ฐ์ดํ„ฐ๊ฐ€ ์ง๋ ฌํ™” ๋˜์–ด ์ €์žฅ๋  ํŒŒ์ผ์ด ์ €์žฅ๋  ์œ„์น˜๋ฅผ ์ •ํ•ด์ค€๋‹ค.

83~94ํ–‰ : ์ง๋ ฌํ™” ๋ฉ”์†Œ๋“œ. ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ™” ํ•˜์—ฌ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ์ €์žฅ์ด ์ •์ƒ์ ์„ ๋๋‹ค๋ฉด true๋ฅผ ์•„๋‹ˆ๋ผ๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

97~111ํ–‰ :  ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•˜์—ฌ ์ €์žฅ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์–ป๋Š”๋‹ค. ๋งŒ์•ฝ ํŒŒ์ผ์ด ์กด์žฌ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด(ํ”„๋กœ๊ทธ๋žจ์„ ์ฒ˜์Œ ๋Œ๋ ธ์„ ๊ฒฝ์šฐ) 

15~31 ํ–‰ : ํŒŒ์ผ์—์„œ ์—ญ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š”๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ ํ†ตํ•ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ๋ฝ‘์•„ ๊ทธ ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์˜ num๊ฐ’์— +1์„ ํ•˜์—ฌ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด์˜ num ๊ฐ’์œผ๋กœ ์ •ํ•ด์ค€๋‹ค. ์„ธ์…˜ ๊ฐ์ฒด์—์„œ uid๋ฅผ ๋ฝ‘์•„ ์ž‘์„ฑ์ž๋กœ ์ •ํ•ด์ค€๋‹ค. java.util์—์„œ ์˜ค๋Š˜๋‚ ์งœ๋ฅผ ๊ตฌํ•˜๊ณ  java.sql์— .getTime()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ณด๋“œ ๊ฐ์ฒด์˜ ์ž‘์„ฑ๋‚ ์งœ๋กœ ์ •ํ•ด์ค€๋‹ค. ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ ๋ณด๋“œ๊ฐ์ฒด๋ฅผ ๋ฆฌ์ŠคํŠธ์— ๋‹ด์•„์„œ ์ง๋ ฌํ™” ํ•ด์ฃผ๊ณ  ๊ฒฐ๊ณผ๋ฅผ true, false๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

34~37ํ–‰ :  getList()๋ฉ”์†Œ๋“œ๋Š” ๊ทธ๋ƒฅ ๋ฆฌ์ŠคํŠธ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์ง๋ ฌํ™”๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ค€๋‹ค.

39~45ํ–‰ : ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐพ๋Š” ๋ฉ”์†Œ๋“œ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜์–ด์˜จ key(num)์œผ๋กœ ๋ฆฌ์ŠคํŠธ์—์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ๊ทธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

48~55 ํ–‰ : find()๋ฉ”์†Œ๋“œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ์ƒ์„ธ๋ณด๊ธฐ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์กฐํšŒ์ˆ˜(hit)๋ฅผ ๋Š˜๋ ค์ฃผ๋Š” ๋กœ์ง์„ ๋”ฐ๋กœ ๋นผ๊ธฐ์œ„ํ•œ read()๋ฉ”์†Œ๋“œ์ด๋‹ค. ๋กœ์ง์ด ์‹คํ–‰๋˜์–ด ๋Œ์•„๊ฐˆ๋•Œ ๋งˆ๋‹ค ์ฐพ์€ ๋ฆฌ์ŠคํŠธ์˜ ์กฐํšŒ์ˆ˜(hit)์— ๊ธฐ์กด ์กฐํšŒ์ˆ˜+1์„ ํ•ด์ค€๋‹ค. ์ƒˆ๋กœ ๋ฆฌ๋‰ด์–ผ ๋œ  ๋ฐ์ดํ„ฐ๋Š” ์ง๋ ฌํ™”ํ•˜์—ฌ ํŒŒ์ผ์—์„œ๋„ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฐพ์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

63~71ํ–‰ : ํŒŒ์ผ์—์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•˜์—ฌ ๋„˜์–ด์˜จ num์œผ๋กœ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ  ๋„˜์–ด์˜จ ์ œ๋ชฉ๊ณผ ๊ธ€๋‚ด์šฉ์„ set ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ ์ •ํ•ด์ค€๋‹ค. ๊ฐฑ์‹ ๋œ ๋ฆฌ์ŠคํŠธ๋Š” ์ง๋ ฌํ™” ํ•˜์—ฌ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ true, false๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

73~80 ํ–‰ : ๋„˜์–ด์˜จ num์œผ๋กœ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ์ฐพ๊ณ  remove๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ๊ฐฑ์‹ ๋œ ์ •๋ณด๋Š” ์ง๋ ฌํ™”ํ•˜์—ฌ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ true, false๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

boardController.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
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
    String uid = (String)session.getAttribute("uid");
    if(uid==null) {
        session.setAttribute("url", request.getRequestURL().toString());
        response.sendRedirect("../login/loginController.jsp?cmd=loginform");
        return;
    }
    
    String cmd = request.getParameter("cmd");
    if (cmd==null) cmd="LIST";
    
    switch(cmd)
    {
    case "ADD_FORM":
%>
        <jsp:forward page="boardAddForm.jsp"/>
<%        break;
    case "ADD":
%>
        <jsp:forward page="boardAddProc.jsp"/>
<%        break;
    case "LIST":
%>
        <jsp:forward page="boardListForm.jsp"/>
<%        break;
    case "READ":
%>
        <jsp:forward page="boardDetailForm.jsp"/>
<%        break;
    case "FIND":
%>
        <jsp:forward page="boardDetailForm.jsp"/>
<%        break;    
    case "EDIT":
%>
        <jsp:forward page="boardEditForm.jsp"/>
<%        break;
    case "UPDATE":
%>
        <jsp:forward page="boardUpdateForm.jsp"/>
<%        break;    
    case "DELETE":
%>
        <jsp:forward page="boardDeleteForm.jsp"/>
<%        break;    
    }
%>
cs

3~7ํ–‰ : ์„ธ์…˜๊ฐ์ฒด์—์„œ ๋ฐ›์•„์˜จ uid๋ฅผ ๋ฌธ์ž์—ด uid์— ์ €์žฅํ•˜๊ณ  uid๊ฐ€ null์ด๋ผ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•˜๋ คํ–ˆ๋˜ url์„ ์„ธ์…˜๊ฐ์ฒด์— setํ•ด์ฃผ๊ณ  loginform์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๋ณด๋‚ด ๋กœ๊ทธ์ธ ํ•˜๊ณ  ๊ฒŒ์‹œํŒ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค.

10~46ํ–‰ : cmd๊ฐ€ null์ด๋ผ๋ฉด cmd=LIST์ด๋ผ ํ•œ๋‹ค. ๊ฐ cmd์— ๋งž๋Š” ๋ทฐjsp๋‚˜ ๋กœ์ง ์ฒ˜๋ฆฌjsp๋กœ forwardํ•ด์ค€๋‹ค.

 

boardAddForm.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
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>๊ฒŒ์‹œ๊ธ€ ์ถ”๊ฐ€ ํผ</title>
<script src="https://code.jquery.com/jquery-3.6.1.min.js" 
integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous">
</script>
<script type="text/javascript">
function addBoard()
{
    var obj = $('#addForm').serialize();
    $.ajax({
        url : 'boardController.jsp',
        method: 'post',
        data: obj,
        cache : false,
        dataType:'json',
        success:function(res){
            alert(res.added ? '์ถ”๊ฐ€ ์„ฑ๊ณต' : '์ถ”๊ฐ€ ์‹คํŒจ');
            location.href="boardController.jsp?cmd=LIST";
        },
        error : function(xhr,status,err){
            alert('์—๋Ÿฌ:' + err);
        }
    });
    return false;
}
</script>
</head>
<body>
<main>
<h3>๊ฒŒ์‹œ๊ธ€ ์ž…๋ ฅ</h3>
<form id="addForm" action="boardController.jsp" method="post" onsubmit="return addBoard();">
    <input type="hidden" name="cmd" value="ADD">
    <div>
        <label for="title">์ œ๋ชฉ</label> 
        <input id="title" type="text" name="title" value="๊ฒŒ์‹œํŒ ํ…Œ์ŠคํŠธ">
    </div>
    <div>
        <label for="contents">๋‚ด์šฉ</label>
        <textarea id="contents" name="contents" rows="5" cols="50"></textarea>
    </div>
    <div class="btn">
        <button type="reset">์ทจ์†Œ</button>
        <button type="submit">์ €์žฅ</button>
    </div>
</form>
</main>
</body>
</html>
cs

์ œ๋ชฉ, ๋‚ด์šฉ์„ ์ž…๋ ฅ๋ฐ›์•„์„œ submit ํ•ด์ค€๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์—๋Š” cmd๋ฅผ ADD๋กœ ํ•ด์ฃผ๊ณ  submit ๋˜๊ธฐ์ „์— addBoard()ํ•จ์ˆ˜๋ฅผ ๋Œ๋ ค ์ถ”๊ฐ€ ์„ฑ๊ณต, ์ถ”๊ฐ€ ์‹คํŒจ๋ฅผ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ alert์ฐฝ์— ๋„์šด๋‹ค. boardAddProc.jsp์—์„œ ๋„˜์–ด์˜จ ์‘๋‹ต์ด ์ฐธ์ด๋ฉด ์ถ”๊ฐ€์„ฑ๊ณต์„ ๊ฑฐ์ง“์ด๋ฉด ์ถ”๊ฐ€์‹คํŒจ๋ฅผ ๋„์šฐ๊ณ , ์ถ”๊ฐ€๊ฐ€ ๋๋‹ค๋ฉด ๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ.jsp๋กœ ๋ณด๋‚ด ์ž‘์„ฑํ•œ ๊ธ€์ด ๊ฒŒ์žฌ๋ผ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

boardAddProc.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@page import="org.json.simple.JSONObject"%>
<%@ page contentType="application/json; charset=utf-8" pageEncoding="utf-8"%>
 
<jsp:useBean id="board_svc" class="com.ezen.web.hello.BoardService" scope="session"/>
<jsp:setProperty name="board_svc" property="session" value="<%=session%>" />
 
<jsp:useBean id="board" class="com.ezen.web.hello.Board">
    <jsp:setProperty name="board" property="*"/>
</jsp:useBean>
 
<%
    boolean added = board_svc.add(board); 
    JSONObject jsObj = new JSONObject();
    jsObj.put("added", added);
%>
<%=jsObj.toJSONString()%>
cs

jsp:useBean ์•ก์…˜ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณด๋“œ ์„œ๋น„์Šค๊ฐ์ฒดํ™” ์‹œํ‚ค๊ณ  ๋ณด๋“œ์„œ๋น„์Šค์— ๋„˜์–ด์˜จ ์ œ๋ชฉ๊ณผ ๊ธ€๋‚ด์šฉ์„ ๋ณด๋‚ด์„œ add๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ฆฌ์ŠคํŠธ๋ฅผ ํŒŒ์ผ์— ์ง๋ ฌํ™” ํ•ด์ค€๋‹ค. added ๊ฒฐ๊ณผ๋Š” json๊ฐ์ฒด์— ๋‹ด์•„์„œ boardAddForm.jsp์— ์‘๋‹ต์œผ๋กœ ๋ณด๋‚ธ๋‹ค.

 

boardListForm.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="com.ezen.web.hello.*"%>
<%@page import="java.util.List"%>
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<jsp:useBean id="board_svc" class="com.ezen.web.hello.BoardService" scope="session"/>
<%
    List<Board> list = board_svc.getList(); 
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก</title>
<style type="text/css">
    main { width:fit-content; margin:1em auto; }
    main h3{ text-align: center; }
    table { border:1px solid black; border-spacing:0; border-collapse: collapse; 
        padding:0.5em;
    }
    td,th { border-bottom:1px dashed black; padding:0.3em 1em; 
        border-right: 1px solid black;
    }
    th { background-color:rgb(210,210, 255);}
    a {text-decoration: none;}
    div.links { width:fit-content; margin:1em auto; }
</style>
</head>
<body>
<main>
<h3>๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก</h3>
<table>
<tr><th>๋ฒˆํ˜ธ</th><th>์ œ๋ชฉ</th><th>์ž‘์„ฑ์ž</th><th>์ž‘์„ฑ์ผ</th><th>ํžˆํŠธ์ˆ˜</th></tr>
<%
    for(int i=0;i<list.size();i++) {
        Board board = list.get(i); 
%>
        <tr>
            <td><%=board.getNum()%></td>
            <td>
                <a href="boardController.jsp?cmd=DETAIL&num=<%=board.getNum()%>">
                    <%=board.getTitle()%></a>
            </td>
            <td><%=board.getAuthor()%></td>
            <td><%=board.getRegDate()%></td>
            <td><%=board.getHit()%></td>
        </tr>
<%    }
%>
</table>
<div class="links">
    [<a href="boardController.jsp?cmd=ADD_FORM">๊ธ€์“ฐ๊ธฐ</a>]
</div>
</main>
</body>
</html>
cs

๋ณด๋“œ ์„œ๋น„์Šค์—์„œ ๊บผ๋‚ธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•˜์—ฌ ๋ฒˆํ˜ธ,์ œ๋ชฉ,์ž‘์„ฑ์ž,์ž‘์„ฑ์ผ,ํžˆํŠธ์ˆ˜๋ฅผ ํ‘œํ˜•์‹์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค.

์ œ๋ชฉ์€ ๋งํฌ๋ฅผ ๋‹ฌ์•„์„œ ํ•ด๋‹น ๋„˜์–ด๋ฅผ ๋„˜๊ฒจ์ฃผ์–ด ์ƒ์„ธ๋ณด๊ธฐํ•  ์ˆ˜ ์žˆ๋„๋กํ•œ๋‹ค.

 

 

boardDetailForm.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<%@page import="com.ezen.web.hello.Board"%>
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<jsp:useBean id="board_svc" class="com.ezen.web.hello.BoardService" scope="session"/>
    <jsp:setProperty name="board_svc" property="request" value="<%=request %>" />
<jsp:useBean id="board" class="com.ezen.web.hello.Board">
    <jsp:setProperty name="board" property="*"  />
</jsp:useBean>
<%
    Board b = board_svc.read(board);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>๊ฒŒ์‹œ๊ธ€ ์ฝ๊ธฐ</title>
<style type="text/css">
    main{width:fit-content; margin:1em auto; }
    main h3{text-align: center;}
    label { display:inline-block; padding:0.2em 1em; border-bottom:1px solid black;
        text-align: right; width:3em; margin-right:1em;
    }
</style>
</head>
<script src="https://code.jquery.com/jquery-3.6.1.min.js" 
integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous">
</script>
<script type="text/javascript">
    function deleteBoard(num)
    {
        if(!confirm("์ •๋ง๋กœ ํ˜„์žฌ ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๊นŒ?")) return;
 
        var obj ={};
        obj.cmd='DELETE';
        obj.num=<%=b.getNum()%>;
        $.ajax({
            url:'boardController.jsp'
            method:'post',
            data: obj,
            cache : false,
            dataType: 'json',
            success: function(res){ 
                if(res.deleted){
                    alert(res.deleted ? '์‚ญ์ œ ์„ฑ๊ณต':'์—๋Ÿฌ'); 
                    location.href ='boardListForm.jsp';
                }
            },
            error : function(xhr,status,err){
                alert(err);
            }
        });
        return false;
    }
</script>
<body>
<main>
<h3>๊ฒŒ์‹œ๊ธ€ ์ฝ๊ธฐ</h3>
<div><label>๊ธ€๋ฒˆํ˜ธ</label> <%=b.getNum()%></div>
<div><label>์ œ ๋ชฉ</label> <%=b.getTitle()%></div>
<div><label>์ž‘์„ฑ์ž</label> <%=b.getAuthor()%></div>
<div><label>์ž‘์„ฑ์ผ</label> <%=b.getRegDate()%></div>
<div><label>ํžˆํŠธ์ˆ˜</label> <%=b.getHit()%></div>
<div><label>๊ธ€๋‚ด์šฉ</label> <%=b.getContents()%></div>
[<a href="boardController.jsp?cmd=ADD_FORM"> ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ํŽ˜์ด์ง€ ๊ฐ€๊ธฐ </a>]
[<a href="boardController.jsp?cmd=EDIT&num=<%=b.getNum()%>"> ์ˆ˜์ • </a>]
[<a href="javascript:deleteBoard(<%=b.getNum()%>);">์‚ญ์ œ</a>]
</main>
</body>
</html>
cs

์ƒ์„ธ๋ณด๊ธฐํ•˜์—ฌ ๊ธ€๋‚ด์šฉ๊นŒ์ง€ ๋‚˜์˜ค๋„๋กํ•œ๋‹ค. 64ํ–‰ ์ˆ˜์ •์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๋ณด๋“œ๊ฐ์ฒด์˜ num๊ณผ ํ•จ๊ป˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ cmd=EDIT์œผ๋กœ ๋ณด๋‚ด๊ณ  65ํ–‰ ์‚ญ์ œ๋ฅผ ํ•˜๋ฉด ๋ณด๋“œ๊ฐ์ฒด์˜ num์„ deleteBoardํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ค€๋‹ค. !confirm์ด ์ฐธ์ด๋ผ๋ฉด return์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋๋‚ด๊ณ  !confirm์ด ๊ฑฐ์ง“์ด๋ฉด ํ•จ์ˆ˜๊ฐ€ ๊ณ„์† ๋Œ์•„๊ฐ„๋‹ค. json๊ฐ์ฒด์—cmd๋Š” DELETE๋กœ num๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ํ•ด๋‹น ๋ณด๋“œ๊ฐ์ฒด์˜ num์„ ๋‹ด์•„์ค€๋‹ค. ๋‹ด์€ json๊ฐ์ฒด๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋ณด๋‚ด ๋ณด๋“œ์„œ๋น„์Šค์˜ deleteBoard๋ฉ”์†Œ๋“œ๊ฐ€ ๋Œ์•„๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ง€์šธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 


boardEditForm.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
55
56
57
58
59
60
61
<%@page import="com.ezen.web.hello.Board"%>
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<jsp:useBean id="board_svc" class="com.ezen.web.hello.BoardService" scope="session"/>
<jsp:useBean id="board" class="com.ezen.web.hello.Board">
    <jsp:setProperty name="board" property="*"  />
</jsp:useBean>
<%
    Board b = board_svc.find(board);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ํผ</title>
<script src="https://code.jquery.com/jquery-3.6.1.min.js" 
integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous">
</script>
<script type="text/javascript">
function updateBoard()
{
    var obj = $('#updateForm').serialize();
    $.ajax({
        url : 'boardController.jsp',
        method: 'post',
        data: obj,
        cache : false,
        dataType:'json',
        success:function(res){
            alert(res.updated ? '์ˆ˜์ • ์„ฑ๊ณต' : '์ˆ˜์ • ์‹คํŒจ');
            location.href="boardController.jsp?cmd=FIND&num=<%=b.getNum()%>";
        },
        error : function(xhr,status,err){
            alert('์—๋Ÿฌ:' + err);
        }
    });
    return false;
}
</script>
</head>
<body>
<main>
<h3>๊ฒŒ์‹œ๊ธ€ ์ž…๋ ฅ</h3>
<form id="updateForm" onsubmit="return updateBoard();">
    <input type="hidden" name="cmd" value="UPDATE">
    <input type="hidden" name="num" value="<%=b.getNum()%>">
    <div>
        <label for="title">์ œ๋ชฉ</label> 
        <input id="title" type="text" name="title" value="<%=b.getTitle()%>">
    </div>
    <div>
        <label for="contents">๋‚ด์šฉ</label>
        <textarea id="contents" name="contents" rows="5" cols="50" ><%=b.getContents()%></textarea>
    </div>
    <div class="btn">
        <button type="reset">์ทจ์†Œ</button>
        <button type="submit">์ €์žฅ</button>
    </div>
</form>
</main>
</body>
</html>
cs

๊ฒŒ์‹œ๋ฌผ์˜ ๋‚ด์šฉ๊ณผ ์ œ๋ชฉ๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๋ณด๋“œ์„œ๋น„์Šค์˜ find๋ฉ”์†Œ๋“œ๋กœ ์ฐพ์€ ๋ณด๋“œ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ์ œ๋ชฉ๊ณผ ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ๋ฐ›์•„ ์ง๋ ฌํ™”ํ•˜์—ฌ updateBoard()ํ•จ์ˆ˜์— json๊ฐ์ฒด๋กœ ๋ณด๋‚ธ๋‹ค. cmd๋Š” UPDATE์ด๊ธฐ ๋•Œ๋ฌธ์— boardUpdateForm์—์„œ ๋กœ์ง์ด ๋Œ์•„๊ฐ€๊ณ  ์—ฌ๊ธฐ์„œ ๋ฐ›์€ ์‘๋‹ต์„ ํ†ตํ•ด true๋ฉด ์ˆ˜์ •์„ฑ๊ณต์„ false๋ฉด ์ˆ˜์ •์‹คํŒจ๋ฅผ ๋„์šด๋‹ค.


boardUpdateForm.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@page import="org.json.simple.JSONObject"%>
<%@ page contentType="application/json; charset=utf-8" pageEncoding="utf-8"%>
 
<jsp:useBean id="board_svc" class="com.ezen.web.hello.BoardService" scope="session"/>
<jsp:setProperty name="board_svc" property="session" value="<%=session%>" />
 
<jsp:useBean id="board" class="com.ezen.web.hello.Board">
    <jsp:setProperty name="board" property="*"/>
</jsp:useBean>
 
<%
    boolean updated = board_svc.update(board);  
    JSONObject jsObj = new JSONObject();
    jsObj.put("updated", updated);
%>
<%=jsObj.toJSONString()%>
cs

๋„˜์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋“œ ์„œ๋น„์Šค์˜ update()๋ฉ”์†Œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ค€๋‹ค. ๋ฆฌํ„ด๋œ boolean๊ฐ’์„ json ๊ฐ์ฒด์— ๋‹ด์•„์„œ ์‘๋‹ต์œผ๋กœ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 


boardDeleteForm.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@page import="org.json.simple.JSONObject"%>
<%@ page contentType="application/json; charset=utf-8" pageEncoding="utf-8"%>
 
<jsp:useBean id="board_svc" class="com.ezen.web.hello.BoardService" scope="session"/>
<jsp:setProperty name="board_svc" property="session" value="<%=session%>" />
 
<jsp:useBean id="board" class="com.ezen.web.hello.Board">
    <jsp:setProperty name="board" property="*"/>
</jsp:useBean>
 
<%
    boolean deleted = board_svc.deleteBoard(board);  
    JSONObject jsObj = new JSONObject();
    jsObj.put("deleted", deleted);
%>
<%=jsObj.toJSONString()%>
cs

๋„˜์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋“œ ์„œ๋น„์Šค์˜  deleteBoard()๋ฉ”์†Œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ค€๋‹ค. ๋ฆฌํ„ด๋œ boolean๊ฐ’์„ json ๊ฐ์ฒด์— ๋‹ด์•„์„œ ์‘๋‹ต์œผ๋กœ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.


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

ํ”„๋กœ๊ทธ๋žจ ์ฒซ ์‹œ์ž‘ํŽ˜์ด์ง€ ๋กœ๊ทธ์ธํ•ด์•ผ์ง€๋งŒ ๊ฒŒ์‹œํŒ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค



๋กœ๊ทธ์ธ ์„ฑ๊ณต

 

๋กœ๊ทธ์ธ ํ›„ ๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ



๊ฒŒ์‹œํŒ ๊ธ€์“ฐ๊ธฐ



์ €์žฅ์„ ๋ˆ„๋ฅธ ํ›„ ๊ฒŒ์‹œํŒ ๋ชฉ๋ก

 

์ œ๋ชฉ์„ ๋ˆŒ๋Ÿฌ ์ƒ์„ธ๋ณด๊ธฐ ํ•˜๊ธฐ

 

์ˆ˜์ •๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ

 

์ˆ˜์ •๋‚ด์šฉ

 

์ˆ˜์ • ์„ฑ๊ณต

 

์ˆ˜์ • ํ›„ ๊ฒŒ์‹œ๊ธ€

 

์‚ญ์ œ๋งํฌ ๋ˆ„๋ฅด๊ธฐ

 

์‚ญ์ œ ์„ฑ๊ณต

 

์‚ญ์ œ ํ›„ ๊ฒŒ์‹œํŒ ๋ชฉ๋ก

๋Œ“๊ธ€