ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링MVC - 1편] JSP 회원관리 웹 애플리케이션 만들기
    스프링&스프링부트 2025. 1. 11. 15:12

    1. JSP 라이브러리 추가

    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	compileOnly 'org.projectlombok:lombok'
    	annotationProcessor 'org.projectlombok:lombok'
    	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
    	// 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' //스프링부트
    	implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl' //스프링부트 3.0 이상
        // JSP 추가 끝
    }

     

     

    2. 회원 등록 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 문서는 이렇게 시작해야 한다

     

     

    3. 회원 저장 JSP

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page import="hello.servlet.domain.member.Member" %>
    <%@ page import="hello.servlet.domain.member.MemberRepository" %>
    
    <%
        // 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);
        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>

    • JSP 자바 코드를 그대로 사용할 있다
    • <% ~~ %> : 이 부분에는 자바 코드를 입력할 있다
    • <%= ~~ %> :이 부분에는 자바 코드를 출력할 있다.

     

     

    4. 회원 목록 JSP

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page import="java.util.List" %>
    <%@ page import="hello.servlet.domain.member.MemberRepository" %>
    <%@ page import="hello.servlet.domain.member.Member" %>
    
    <%
        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>");
                }
            %>
        </tbody>
    </table>
    </body>
    </html>

     

     

    5. 서블릿과 JSP 한계

    JSP 사용한 덕분에 뷰를 생성하는 HTML 작업을 깔끔하게 가져가고,

    중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용했다

     

    회원 저장 JSP 보면 코드의 상위 절반은 회원을 저장하기 위한 비즈니스 로직이고,

    나머지 하위 절반만 결과를 HTML 보여주기 위한 영역이다

    코드를 보면, JAVA 코드, 데이터를 조회하는 리포지토리 등등 다양한 코드가 모두 JSP 노출되어 있어 

    JSP 너무 많은 역할을 한다

     

    >> MVC 패턴의 등장

    728x90
Designed by Tistory.