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편 - 백엔드 웹 개발 핵심 기술을 참고하여 공부하였습니다.
'Framework & Library > Spring Boot' 카테고리의 다른 글
[Spring Boot] : MVC 패턴 적용해보고 한계 체크하기(2) (0) | 2022.01.21 |
---|---|
[Spring Boot] : MVC 패턴 적용해보고 한계 체크하기(1) (0) | 2022.01.21 |
[Spring Boot] : Servlet을 통한 회원 관리 웹 애플리케이션 구현 (0) | 2022.01.21 |
[Spring Boot] : 회원 정보를 간단하게 저장하고 조회를 할 수 있는 기능을 구현 (0) | 2022.01.21 |
[Spring Boot] : HTTP 응답을 JSON으로 반환하기 (0) | 2022.01.20 |
댓글