이번 실습에서는 학생정보 조회 컨트롤러를 JSP로 구현 한다.

실습을 통해 서블릿 컨트롤러를 구현하고 웹 애플리케이션 개발에 활용할 수 있다.

실습 내용

다음과 같이 WebContent/student 폴더에 studentController.jsp 를 생성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="jwprj.student.*"%>

다음으로 사용자 입력을 처리하기 위해 useBean 액션을 선언한다. 여기서는 id 값 하나만 처리하면 되기 때문에 굳이 이렇게 하지 않아도 되지만 일반적인 CRUD 처리를 위한 컨트롤러 구조를 고려한다.

<jsp:useBean id="student" class="jwprj.student.Student" />
<jsp:setProperty name="student" property="*" />

서블릿 컨트롤러에서는 request.getParameter()를 사용했지만 입력값이 많은 경우 불편하기 때문에 apache-commons-beanUtils 등을 사용해야 한다. useBean 사용은 jsp 를 컨트롤러로 사용했을때 얻을 수 있는 장점중 하나이다.

먼저 학생정보 조회를 위해 검색창에서 입력된 id 값을 가지고 온다. 이때 서블릿 컨트롤러와 달리 파라미터가 정상적으로 전달되었는지 확인을 위한 null 체크가 필요 없다. request.getParameter()는 문자열을 리턴하기 때문에 이를 int 로 변환해야 StudentService 클래스의 getStudent() 메서드를 사용할 수 있었지만 useBeansetProperty 를 이용하면 대상 객체의 필드 타입에 맞춰 자동변환이 이루어지므로 별도의 형변환이 없어도 된다.

<%
	StudentService studentService = new StudentService();
	studentService.getStudent(student.getId())
	.ifPresent(s -> request.setAttribute("student", s));
%>

이제 요청을 처리하고 적절한 뷰로 이동시키기만 하면 된다. 여기서는 뷰에서 보여줄 데이터가 있기 때문에 포워딩 방식으로 이동 한다.

jsp 의 경우 포워딩은 forward 액션 혹은 pageContext.forward()로 간단하게 처리할 수 있다.

	pageContext.forward("/student/studentInfo.jsp");

실행하기전에 기존 studentSearch.jsp 파일에서 컨트롤러 호출하는 부분을 다음과 같이 서블릿에서 jsp 로 변경하도록 한다.

<form method="get" action="${pageContext.request.contextPath}/student/studentController.jsp">
Student ID: <input type="text" name="id"><input type="submit" value="Search">
</form>

수정후 studentSearch.jsp를 실행하고 서블릿에서와 동일한 방법으로 테스트해보도록 한다.