본문 바로가기
Framework & Library/Spring Boot

[Spring Boot] : JSP로 회원 관리 구현하기

by 오주현 2022. 1. 21.
반응형

JSP를 사용하기 위해 라이브러리를 먼저 추가해 주었다.

//JSP 추가 시작
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'
//JSP 추가 끝

build.gradile에 dependencies {} 안에 추가해 주면 된다.

추가하고 refresh해 주는 것을 잊지 않도록 한다.

<%@ 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>
</body>
</html>

먼저 회원 등록 form을 코딩해 주었다. 맨 윗 줄에 있는 코드는 jsp를 사용하기 위해 꼭 있어야 하는 코드라고 한다.(JSP문서라는 뜻이고 JSP문서는 이렇게 시작한다고 한다.) 보면 html을 사용하기 위한 형식과 utf-8로 인코딩을 설정해주고 java 사용을 명시해 둔 것 같다.

이렇게 회원 등록 양식이 정상적으로 나온다 화면이 검은색인 이유는 따로 다크모드 크롬 확장 프로그램을 사용하고 있어서 그러니 신경쓰지 않아도 된다.

주의할 점으로는 위에 보면 주소에 .jsp로 되어 있다. 이 부분을 체크하고 넘어가자.

<%@ 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는 그냥 사용 가능하다.
    // jsp도 서블릿으로 자동으로 변환되어 사용되기 때문에 서비스 로직이 그대로 호출되어 사용된다.
    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);
%>

저장하기 위한 jsp java 코드이다. jsp에서 <% %>를 통해 java 코드를 작성할 수 있고 맨 위에 보면 import 또한 java와 같게 해 주어야 한다. 인텔리제이를 사용하고 있는데 자동으로 import가 생성된다. 이클립스는 안 그랬던 것 같은데..

강의를 들으면서 공부하다 주석도 달아뒀다. jsp에서 request와 response를 따로 안 써줘도 사용이 가능한데 jsp가 서블릿으로 자동 변환되어 사용되기 때문에 서비스 로직이 그대로 호출되어 그렇다고 한다.

아래 코드는 복붙으로 전에 사용한 코드를 가져온 부분이다.

<ul>
    <li>id=<%=member.getId()%></li>
    <li>username=<%=member.getUsername()%></li>
    <li>age=<%=member.getAge()%></li>
</ul>

html 코드를 보면 이런 식으로 작성해 주었다. 여기서는 <% %> 대신에 <%= %>를 사용했는데 =표시가 들어간 코드는 안에 있는 내용을 출력한다는 뜻이라고 한다. 때문에 이렇게 실행했을 때 안에 있는 메소드가 실행되어 아이디, 이름, 나이를 불러오게 된다.

정상적으로 등록이 되고 html 코드 부분에서 java로 작성한 부분이 정상적으로 잘 불러와지는 것을 확인할 수 있다.

이제 목록을 보면 된다.

<%@ 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 부분에도 넣어주면 된다.

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

전에 목록 확인 부분에서도 사용했던 for문을 통한 동적 페이지 만드는 방법이다. 그대로 적용해서 실행을 시켜본다.

역시 정상적으로 나오는 것을 확인할 수 있다.

참고로 같은 메모리에 저장된 값을 불러오기 때문에 .jsp가 아닌 전에 작성한 서블릿을 활용한 방법으로도 값이 조회가 된다. 위에 주소를 비교해 보면 알 수 있다.

서블릿과 JSP를 통한 등록,저장,조회를 해 봤는데 한계가 있다고 한다. 서블릿의 단점은 전 글을 확인하면 되고 JSP는 위에 import나 Java 코드, 데이터 조회 등 많은 코드가 적히는데 프로젝트가 커지면 이렇게 적히는 게 매우 많을 것이다. 그럼 찾기도 힘들고 유지 보수가 어려워진다는 단점이 있다. 가벼운 프로젝트는 괜찮을 수도 있다.


스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.

 

반응형

댓글