쌓고 쌓다

JSP 애플리케이션과 MVC 패턴 본문

프로그래밍/JSP & Servlet

JSP 애플리케이션과 MVC 패턴

승민아 2023. 7. 25. 14:15

JSP 의존성 추가

//JSP 추가 시작
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'jakarta.servlet:jakarta.servlet-api' //스프링부트 3.0 이상
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api' //
스프링부트 3.0 이상
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' //스프링부트 3.0 이상
//JSP 추가 끝

 

 

new-form.jsp (회원 입력)

<%@ 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>

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

JSP 문서라는 의미를 포함한 문장이다. JSP 문서는 이렇게 시작한다.

JSP는 서버 내부에서 서블릿으로 변환된다.

 

save.jsp (회원 저장)

<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    // JSP에서 request, response 사용 가능. JSP도 서블릿으로 결국 변환됨
    MemberRepository memberRepository = MemberRepository.getInstance();
    String username = request.getParameter("username");
    int age = Integer.parseInt(request.getParameter("age"));

    Member member = new Member(username, age);
    memberRepository.save(member);
%>
<html>
<head>
    <title>Title</title>
</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>
  • <%@ page import="..." %> : 자바 import와 동일
  • <% ... %> : 자바 코드를 입력할 수 있다.
  • <%= ... %> : 자바 코드 출력.
  • request, response를 사용할 수 있다.

 

members.jsp (회원 목록)

<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    MemberRepository memberRepository = MemberRepository.getInstance();
    List<Member> members = memberRepository.findAll();
%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table>
    <thead>
    <th>id</th>
    <th>username</th>
    <th>age</th>
    </thead>
    <tbody>
    <%
        // out도 쓸수 있는 예약어이다.
        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>

 

서블릿으로 할땐 View를 위한 HTML을 만드는 작업이 지저분했다.

JSP로 HTML안에 자바 코드를 넣어 문제를 해결 했지만

회원 저장 부분을 보자. JSP 코드의 절반은 저장을 위한 비즈니스 로직이 남은 절반은 View를 위한 뷰 영역이다.

JSP가 비즈니스 로직과 View 등등... 많은 역할을 책임지고 있다.

 

MVC 패턴으로 해결하자.

 

MVC 패턴

비즈니스 로직 부분과 화면을 그리는 부분으로 나눈다.

Comments