클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

서블릿의 기초 3 - 입력된 숫자에 따라 방 생성하기 실습 본문

웹 · 앱 개발/JSP & Servlet

서블릿의 기초 3 - 입력된 숫자에 따라 방 생성하기 실습

huenuri 2024. 8. 22. 16:17

이제 남은 아침 시간 동안 나머지 수업을 들으며 공부를 진행해야겠다. 여전히 해결하지 못한 이클립스 문제를 찾아보느라 시간을 많이 허비했지만 이제는 그냥 넘어가야 할 것 같다.

그리고 나서 다른 문제가 또 발생해서 그 문제를 해결 중인데.. 오늘은 왜 이렇게 문제가 많이 발생하는지 모르겠다. 하지만 문제를 통해 많은 것들을 배우는 것 같다. 그러니 이렇게 예기치 못한


 

 

 

실습 문제 풀어보기

 

 

이제 문제를 하나 풀어보기로 하자. 다 풀지 못하고 점심시간이 될 수도 있겠지만 하는 데까지 해봐야지. 만들고 싶은 방을 숫자로 입력하면 그 수만큼의 방이 만드는 문제이다.

방을 만들기 위한 기본 코드는 다음과 같이 작성해보았다.


 

 

 

1. HTML 파일 만들고 기본 코드 작성하기

이제 서블릿으로 사용자가 입력할 수 있도록 동적 페이지를 만들어볼 것이다.


 

 

 

2. 서블릿 파일 만들기

값은 한 개만 받을 것이므로 다음과 같이 코드를 작성한다. 요청한 객체는 request 안에 있고 그것은 파라미터로 접근한다. 그리고 입력한 숫자만큼 표가 나와야 하는데 표는 form 태그로 작성한다. 어떤 숫자를 입력하든 행은 무조건 1개이다. 사용자가 입력하면 td가 나오도록 테이블을 작성하면 된다. 

 

 

room 이라는 문자를 숫자로 변환해주는 작업이 필요하다. 그리고 테이블 안에 글을 쓸 수 있는 객체도 만든다. 이러한 것들을 이제 코드로 작성해보았다. 테두리도 설정해주었고 행은 1개만 있으면 되니 tr은 한번만 써주었다.

 

 

반복문을 사용하여 열을 가져올 수 있다. result를 사용하면 입력한 숫자가 될 때까지 반복된다. td가 반복되는데 그 변하는 숫자는 i를 넣을 수 있으니 이렇게 써볼 수 있다.


 

 

 

 

3. 열이 반복될 수 있도록 나머지 코드 작성하기

 

 

 

하지만 무엇 때문인지 계속 오류가 발생하고 있다. 점심시간이 훨씬 지났음에도  이 문제를 해결하지 못해 그냥 식사를 하러 갔다. 다 끝내고 싶었는데 말이다. 이제 오후 공부할 시간이 3시간도 남지 않았지만 문제를 꼭 풀어보려고 한다.


 

 

 

문제의 원인 분석하기

 

HTTP 상태 500 오류가 발생한 이유는 서블릿에서 request.getParameter("room")을 통해 전달된 값을 Integer.parseInt(room)으로 변환하려 할 때, 해당 값이 null이기 때문이다. 즉, "room"이라는 이름으로 전달된 파라미터가 없거나, 값이 비어 있는 상태에서 Integer.parseInt() 메서드를 호출하려 했기 때문에 NumberFormatException이 발생한 것이다.

코드를 보면, HTML 파일에서 입력 필드의 name 속성이 "room"이 아니라 "만들기"로 설정되어 있다. 따라서 서블릿에서 "room" 파라미터를 가져오려 하면, 실제로는 아무런 값이 전달되지 않아 null이 반환되고, 이를 정수로 변환하려고 시도하면서 예외가 발생한다.

 

 

 

input 속성에서 name 값이 만들기로 되어 있어서 그런 거였다. room으로 바꾸니 이제 출력은 잘 되었으나 약간의 문제가 있었다.

 


 

 

코드 최종 수정하기

표가 하나도 나타나지 않은 것이다. 코드를 5번더 더 넘게 고치고 또 고치다가 마침내 해결했다. html은 이 코드가 맞는데, 서블릿 파일에서 수정할 게 많았다.

 

 

 

 

 

이렇게 어렵게 풀어서야 어느 세월에 진도를 나갈까 모르겠다. html 태그를 작성하는 것이 아직 많이 어려운 것 같다. HTML 공부를 할 때 단축키를 이용해서 완성된 것을 수정해서 고치다 보니 구성이 어떻게 되는지 잘 몰랐다. 하나를 열고 하나를 닫아주어야 하는데 짝이 맞지 않았던 거였다.


 

 

 

학습을 마치고

여기까지가 둘째날 수업이었다. 그래도 이틀치 수업을 하루만에 다 듣고 이 정도 속도면 나름 괜찮은 것 같다. 남은 2시간도 열심히 공부를 해보자.