본문 바로가기

SpringMVC

[인프런 강의 복습]스프링 MVC 1편 - [회원 관리 APP] JSP 이용

■ 회원 등록 Form JSP

- JSP는 서버 내부에서 서블릿으로 변환되는데, 앞 전에 생성했던 MemberFormServlet 클래스와 거의 비슷한 모습으로 변환
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
 <title>Title</title>
</head>
<body>
    <form action="/jsp/members/save.jsp" method="post">
        username: <input type="text" name="username" />
        age: <input type="text" name="age" />
        <button type="submit">전송</button>
    </form>
</body>
</html>

 

■ 회원 저장 JSP

- JSP는 자바 코드를 그대로 다 사용 할 수 있다.
- <% ~ %> : 이 부분에 자바 코드를 입력
- <%= ~ %> : 이 부분에 자바 코드를 출력
- HTML을 중심으로 하고, 자바 코드를 <% ~ %>를 사용해서 부분부분 입력해주었다.
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    //request, response 객체 사용 가능
    MemberRepository memberRepository = MemberRepository.getInstance();
    System.out.println("MemberSaveServlet.service");

    String username = request.getParameter("username");
    int age = Integer.parseInt(request.getParameter("age"));

    Member member = new Member(username, age);
    System.out.println("member = " + member);
    memberRepository.save(member);
%>
<html>
<head>
 <meta charset="UTF-8">
</head>
<body>
    성공
    <ul>
         <li>id=<%=member.getId()%></li>
         <li>username=<%=member.getUsername()%></li>
         <li>age=<%=member.getAge()%></li>
    </ul>
    <a href="/index.html">메인</a>
</body>
</html>

 

■ 회원 목록 조회 JSP

<%@ page import="java.util.List" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    MemberRepository memberRepository = MemberRepository.getInstance();
    List<Member> members = memberRepository.findAll();
%>
<html>
<head>
     <meta charset="UTF-8">
     <title>Title</title>
</head>
<body>
    <a href="/index.html">메인</a>
    <table>
         <thead>
             <th>id</th>
             <th>username</th>
             <th>age</th>
         </thead>
         <tbody>
            <%
             for (Member member : members) {
                 out.write(" <tr>");
                 out.write(" <td>" + member.getId() + "</td>");
                 out.write(" <td>" + member.getUsername() + "</td>");
                 out.write(" <td>" + member.getAge() + "</td>");
                 out.write(" </tr>");
             }
            %>
         </tbody>
    </table>
</body>
</html>

 

■ 서블릿과 JSP의 한계

- 서블릿으로 개발을 할때는 뷰(View)화면을 위한 HTML을 만드는 작업이 자바 코드에 섞여서 지저분하고 복잡
- JSP를 사용한 덕분에 뷰를 생서하는 HTML 작업을 깔끔하게 가져가고, 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용
- 예를 들어 회원 저장 JSP를 살펴보면, 코드의 상위 절반은 회원을 저장하기 위한 비즈니스 로직이고, 나머지 하위 절반은 결과를 보여주기 위한 HTML 뷰 영역이다. 
- JSP가 너무 많은 역할을 담당하고 있다. 이럴 경후 추후의 유지보수가 어려워진다.

[MVC 패턴의 등장]
- 하나의 서블릿이나 JSP만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리하게 되면 너무 많은 역할을 하게 되고 결과적으로 유지보수가 어려워진다. 
- 비즈니스 로직은 서블릿처럼 다른 곳에서 처리하고, JSP는 목적에 맞게 HTML로 화면(View)을 그리는 일에 집중할 수 있도록 하기 위해 MVC 패턴이 등장

 

[출처 : 인프런 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술]