๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java·๏ปฟServlet·๏ปฟJSP

[IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(MVC) - (4) ๋ทฐ(JSP) ๋ถ„๋ฆฌํ•˜๊ธฐ

by Leica 2020. 2. 12.
๋ฐ˜์‘ํ˜•
  • ๊ด€๋ จ ๊ธ€

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(JAVA + MySQL) - (1) ํšŒ์› ๋ชฉ๋ก ์กฐํšŒ

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(JAVA + MySQL) - (2) ํšŒ์› ๊ฐ€์ž…

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(JAVA + MySQL) - (3) ํšŒ์› ์ •๋ณด ์ˆ˜์ •

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(MVC) - (4) ๋ทฐ(JSP) ๋ถ„๋ฆฌํ•˜๊ธฐ


[IntelliJ] JAVA ์„œ๋ธ”๋ฆฟ + MySQL + MVC ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ - (1) ๋ทฐ(JSP) ๋ถ„๋ฆฌํ•˜๊ธฐ

 

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ํ•™์ƒ ๋ชฉ๋ก ์„œ๋ธ”๋ฆฟ(StudentListServlet)์€ ์ปจํŠธ๋กค๋Ÿฌ, ๋ชจ๋ธ, ๋ทฐ ์—ญํ• ์„ ๋ชจ๋‘ ํ•˜๋‚˜์—์„œ ๋‹ด๋‹นํ–ˆ๋‹ค.

 

Model-View-Controller ์˜ฌ์ธ์› ๋ฐฉ์‹

 

์ด๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ StudentListServlet์œผ๋กœ๋ถ€ํ„ฐ ์ถœ๋ ฅ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜์—ฌ JSP๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. ์ถœ๋ ฅ์€ JSP์—์„œ ๋งก๋Š”๋‹ค.

 

๋ทฐ์˜ ๋ถ„๋ฆฌ - Model-Controller + View

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด StudentListServlet์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„(๋ชจ๋ธ ์—ญํ• )ํ•˜์—ฌ JSP์— ์ „๋‹ฌ(์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• )ํ•œ๋‹ค. JSP๋Š” ์„œ๋ธ”๋ฆฟ์ด ์ค€๋น„ํ•œ ๋ฐ์ดํ„ฐ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์ถœ๋ ฅํ•  ํ™”๋ฉด์„ ๋งŒ๋“ ๋‹ค.

 

VO = DTO

๋ฐ์ดํ„ฐ๋ฅผ JSP์— ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „๋‹ฌํ•  ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ Value Object(VO, ๊ฐ’ ๊ฐ์ฒด) ๋˜๋Š” Data Transfer Object(DTO, ๋ฐ์ดํ„ฐ ์ˆ˜์†ก ๊ฐ์ฒด)๋ผ๊ณ  ํ•œ๋‹ค.

๋˜ํ•œ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” Business Domain(์—…๋ฌด ์˜์—ญ)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Domain Object(๋„๋ฉ”์ธ ๊ฐ์ฒด)๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 

VO ์ƒ์„ฑ

vo ํŒจํ‚ค์ง€์™€ Student ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

Student.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
public class Student {
    protected String studentNo;
    protected String department;
    protected String studentName;
    protected int grade;
    protected String gender;
    protected int age;
    protected String phoneNumber;
    protected String address;
 
    public String getStudentNo() {
        return studentNo;
    }
 
    public Student setStudentNo(String studentNo) {
        this.studentNo = studentNo;
        return this;
    }
 
    public String getDepartment() {
        return department;
    }
 
    public Student setDepartment(String department) {
        this.department = department;
        return this;
    }
 
    public String getStudentName() {
        return studentName;
    }
 
    public Student setStudentName(String studentName) {
        this.studentName = studentName;
        return this;
    }
 
    public int getGrade() {
        return grade;
    }
 
    public Student setGrade(int grade) {
        this.grade = grade;
        return this;
    }
 
    public String getGender() {
        return gender;
    }
 
    public Student setGender(String gender) {
        this.gender = gender;
        return this;
    }
 
    public int getAge() {
        return age;
    }
 
    public Student setAge(int age) {
        this.age = age;
        return this;
    }
 
    public String getPhoneNumber() {
        return phoneNumber;
    }
 
    public Student setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
        return this;
    }
 
    public String getAddress() {
        return address;
    }
 
    public Student setAddress(String address) {
        this.address = address;
        return this;
    }
}
cs

 

Setter์˜ ๋ฆฌํ„ด๊ฐ’์„ Student๋กœ ํ•˜์—ฌ Setter๋ฅผ ์—ฐ์†์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.

 

์˜ˆ)

1
2
3
4
5
6
7
8
9
new Student()
.setStudentNo(rs.getString("STUDENT_NO"))
.setDepartment(rs.getString("DEPARTMENT"))
.setStudentName(rs.getString("STUDENT_NAME"))
.setGrade(rs.getInt("GRADE"))
.setGender(rs.getString("GENDER"))
.setAge(rs.getInt("AGE"))
.setPhoneNumber(rs.getString("PHONE_NUMBER"))
.setAddress(rs.getString("ADDRESS"))
cs

 

StudentListServlet.java ๋ณ€๊ฒฝ

๋‹ค์Œ๊ณผ ๊ฐ™์ด StudentListServlet.java๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

StudentListServlet.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
@WebServlet("/student/list")
public class StudentListServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
 
        try {
            // context parameter๋ฅผ ์ด์šฉํ•œ JDBC ์—ฐ๊ฒฐ
            ServletContext sc = this.getServletContext();
            Class.forName(sc.getInitParameter("driver"));
            conn = DriverManager.getConnection(
                    sc.getInitParameter("url"),
                    sc.getInitParameter("username"),
                    sc.getInitParameter("password")
            );
 
            stmt = conn.createStatement();
            rs = stmt.executeQuery(
                    "SELECT STUDENT_NO, DEPARTMENT, STUDENT_NAME, GRADE, GENDER, AGE, PHONE_NUMBER, ADDRESS" +
                            " FROM STUDENT" +
                            " ORDER BY STUDENT_NO");
 
            resp.setContentType("text/html; charset=UTF-8");
            /*
            ๋ทฐ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด ์ถœ๋ ฅ ์ฝ”๋“œ ์ฃผ์„์ฒ˜๋ฆฌ
            PrintWriter out = servletResponse.getWriter();
            out.println("<html><head><title>ํ•™์ƒ ๋ชฉ๋ก</title></head>");
            out.println("<body><h1>ํ•™์ƒ ๋ชฉ๋ก</h1>");
            out.println("<p><a href='add'>์‹ ๊ทœ ํ•™์ƒ</a></p>");
            while (rs.next()) {
                out.println(
                        rs.getString("STUDENT_NO") + ", " +
                                rs.getString("DEPARTMENT") + ", " +
                                "<a href='update?student_no=" + rs.getString("STUDENT_NO") + "'>" +
                                rs.getString("STUDENT_NAME") + "</a>, " +
                                rs.getInt("GRADE") + ", " +
                                rs.getString("GENDER") + ", " +
                                rs.getInt("AGE") + ", " +
                                rs.getString("PHONE_NUMBER") + ", " +
                                rs.getString("ADDRESS") + "<br>");
            }
            out.println("</body></html>");*/
 
            List<Student> students = new ArrayList<>();
            while (rs.next()) {
                students.add(new Student()
                        .setStudentNo(rs.getString("STUDENT_NO"))
                        .setDepartment(rs.getString("DEPARTMENT"))
                        .setStudentName(rs.getString("STUDENT_NAME"))
                        .setGrade(rs.getInt("GRADE"))
                        .setGender(rs.getString("GENDER"))
                        .setAge(rs.getInt("AGE"))
                        .setPhoneNumber(rs.getString("PHONE_NUMBER"))
                        .setAddress(rs.getString("ADDRESS"))
                );
            }
 
            req.setAttribute("students", students);
 
            RequestDispatcher rd = req.getRequestDispatcher(
                    "/student/StudentList.jsp"
            );
            rd.include(req, resp);
        } catch (SQLException | ClassNotFoundException e) {
            throw new ServletException(e);
        } finally {
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
cs

๋ณ€๊ฒฝ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1) HTML ์ถœ๋ ฅ ์ฝ”๋“œ ์ œ๊ฑฐ

์šฐ์„  HTML์„ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ํ•™์ƒ ๋ชฉ๋ก ํ™”๋ฉด์„ ์ƒ์„ฑํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์€ StudentList.jsp๊ฐ€ ๋‹ด๋‹นํ•  ๊ฒƒ์ด๋‹ค.

 

2) JSP์— ์ „๋‹ฌํ•  ํ•™์ƒ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ ์ค€๋น„

JSP๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด List ๊ฐ์ฒด์— DB์—์„œ ๊ฐ€์ ธ์˜จ ํ•™์ƒ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š”๋‹ค.

 

3) RequestDispatcher๋ฅผ ์ด์šฉํ•œ forward, include

RequestDispatcher ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด JSP๋กœ ํ™”๋ฉด ์ƒ์„ฑ์„ ์œ„์ž„ํ•œ๋‹ค.

์ด ๊ฐ์ฒด๋Š” HttpServletRequest์˜ getRequestDispatcher()๋ฅผ ํ†ตํ•ด ์–ป๋Š”๋‹ค.

getRequestDispatcher()๋ฅผ ํ˜ธ์ถœํ• ๋•Œ ์–ด๋””๋กœ ์œ„์ž„ํ•  ๊ฒƒ์ธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

RequestDispatcher ๊ฐ์ฒด๋ฅผ ์–ป์€ ํ›„์—๋Š” foward ํ˜น์€ include ๋ฐฉ์‹์œผ๋กœ ์œ„์ž„ํ•œ๋‹ค.

foward๋กœ ์œ„์ž„ํ•˜๋ฉด ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ„ ํ›„ ๋‹ค์‹œ ๋Œ์•„์˜ค์ง€ ์•Š๋Š”๋‹ค.

include๋กœ ์œ„์ž„ํ•˜๋ฉด ์ž‘์—…์ด ๋๋‚œ ํ›„ ๋‹ค์‹œ ์ œ์–ด๊ถŒ์ด ๋Œ์•„์˜จ๋‹ค.

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” include ๋ฐฉ์‹์œผ๋กœ StudentList.jsp์— ์ž‘์—…์„ ์œ„์ž„ํ–ˆ๋‹ค.

 

4) ServletRequest(HttpServletRequest)๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

StudentListServlet์˜ HttpServletRequest ๊ฐ์ฒด๋Š” StudentList.jsp์™€ ๊ณต์œ ๋˜๊ธฐ ๋•Œ๋ฌธ์— request์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘๋ฉด StudentList.jsp์—์„œ ๊บผ๋‚ด์“ธ ์ˆ˜ ์žˆ๋‹ค.

StudentList.jsp๋ฅผ includeํ•  ๋•Œ HttpServletRequest์™€ HttpServletResponse์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•จ๊ป˜ ๋„˜๊ฒผ๋‹ค.

์ฆ‰ StudentListServlet๊ณผ StudentList.jsp๋Š” request์™€ response๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

์ด ๋ถ€๋ถ„์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ServletRequest๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋‹ค๋ฃจ๋Š” ๊ธฐ๋Šฅ ์™ธ์— ์–ด๋–ค ๊ฐ’์„ ๋ณด๊ด€ํ•˜๋Š” ๋ณด๊ด€์†Œ ๊ธฐ๋Šฅ๋„ ๊ฐ–๋Š”๋‹ค.

setAttribute()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฐ’์„ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๊ณ  getAttribute()๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฐ’์„ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ๋Š” ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ students(ํ•™์ƒ ๋ชฉ๋ก)์„ StudentList.jsp์— ์ „๋‹ฌํ•œ๋‹ค.

 

StudentList.jsp ์ž‘์„ฑ

ํ”„๋กœ์ ํŠธ์˜ ์›น ์ฝ˜ํ…์ธ  ๋””๋ ‰ํ† ๋ฆฌ์— student ๋””๋ ‰ํ† ๋ฆฌ์™€ StudentList.jsp๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์„œ ์ž‘์„ฑํ•œ๋‹ค.

 

StudentList.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
<%@ page import="com.atoz_develop.spms.vo.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>ํ•™์ƒ ๋ชฉ๋ก</title>
</head>
<body>
<h1>ํ•™์ƒ ๋ชฉ๋ก</h1>
<p><a href="add">์‹ ๊ทœ ํ•™์ƒ</a></p>
<%
    List<Student> students = (ArrayList<Student>)request.getAttribute("students");
    for(Student student: students) {
%>
<%=student.getStudentNo()%>,
<%=student.getDepartment()%>,
<a href="update?student_no=<%=student.getStudentNo()%>"><%=student.getStudentName()%></a>,
<%=student.getGrade()%>,
<%=student.getGender()%>,
<%=student.getAge()%>,
<%=student.getPhoneNumber()%>,
<%=student.getAddress()%><br>
<%
    }
%>
</body>
</html>
cs

 

page ์ง€์‹œ์ž์˜ import ์†์„ฑ์œผ๋กœ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ importํ•œ๋‹ค.

์ฐธ๊ณ ๋กœ page ์ง€์‹œ์ž์˜ import ์†์„ฑ์€ JSP ์—”์ง„์ด ์„œ๋ธ”๋ฆฟ ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด import ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

 

 

StudentListServlet์ด ๋„˜๊ฒจ์ค€ ํ•™์ƒ ๋ชฉ๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด request.getAttribute()๋ฅผ ํ˜ธ์ถœํ•˜์˜€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต๋ฌธ๊ณผ ํ‘œํ˜„์‹ <%= %>์„ ์‚ฌ์šฉํ•ด์„œ ํ•™์ƒ ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•˜์˜€๋‹ค.

 

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

 

์ „์ฒด ์›น ํ”„๋กœ์ ํŠธ๊ฐ€ ๋™์ผํ•œ MVC ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ–๋„๋ก ํšŒ์› ๊ฐ€์ž…, ํšŒ์› ์ •๋ณด ์ˆ˜์ •์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ธ”๋ฆฟ๋„ ์œ„์™€ ๊ฐ™์ด ๋ทฐ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.


  • ๊ด€๋ จ ๊ธ€

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(JAVA + MySQL) - (1) ํšŒ์› ๋ชฉ๋ก ์กฐํšŒ

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(JAVA + MySQL) - (2) ํšŒ์› ๊ฐ€์ž…

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(JAVA + MySQL) - (3) ํšŒ์› ์ •๋ณด ์ˆ˜์ •

- [IntelliJ] ํšŒ์›๊ฐ€์ž… ์˜ˆ์ œ(MVC) - (4) ๋ทฐ(JSP) ๋ถ„๋ฆฌํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€