1. 스프링에서의 요청핸들러 메소드

@Controller
@RequestMapping("/emp")
public class EmployeeController {

	@Autowired
	private EmployeeService employeeService;

    @RequestMapping(path = "/list.do")
	public String list(Model model) {
		List<Employee> employees = employeeService.getAllEmployees();
		model.addAttribute("employees", employees);
		
		return "employee/list.jsp";
	}
}

빈 조립이 다 되어있다고 가정을 하고 EmployeeController를 살펴보자.

  • 위의 코드는 localhost/emp/list.do 요청을 처리하는 요청핸들러 메소드이다.
  • 사용자가 list.do url을 요청하면 이 메소드가 실행된다.
  • 요청핸들러 메소드가 반환하는 값은 내부이동 혹은 재요청 URL이다.
  • 요청 처리를 완료하면 return으로 반환되는 jsp로 내부이동을 시킨다.
  • 이전에 JSP로만 요청 파라미터를 꺼내기 위해서는,
	String id = request.getParameter("id");
	String password = request.getParameter("password");
  • 위 코드와 같이 request.getParameter() 메소드를 사용해서 객체를 꺼내왔었다.
  • 스프링에서는 HttpServletRequest 대신 Model 객체를 사용한다.
  • Model이란 ui에 표현할 데이터를 담아놓는 객체로, list.jsp에서 표현할 데이터를 모델 객체에 저장한다.
<table>
    <thead>
        <tr>
            <th>아이디</th>
            <th>이름</th>
            <th>전화번호</th>
            <th>직종</th>
            <th>급여</th>
            <th>입사일</th>
        </tr>
    </thead>
    <tbody>
        <c:forEach var="emp" items="${employees }">
            <tr>
                <td>${emp.id }</td>
                <td><a href="detail.do?id=${emp.id }">${emp.firstName } ${emp.lastName }</a></td>
                <td>${emp.phoneNumber }</td>
                <td>${emp.jobId }</td>
                <td><fmt:formatNumber value="${emp.salary }" pattern="##,###"></fmt:formatNumber> 달러</td>
                <td><fmt:formatDate value="${emp.hireDate }" pattern="yyyy년 M월 d일"/></td>
            </tr>
        </c:forEach>
    </tbody>
</table>
  • 모델 객체에서 employees 객체를 “employees”라는 이름으로 저장하였기 때문에 view page에서도 employees라는 이름으로 꺼내주어야 한다.
  • items는 모델 객체에서 저장한 이름이 들어간다. for문으로 표현하면 아래와 같다.
for (Employee emp : employees) {
    // 편의상 System.out.println으로 표현
    System.out.println(emp.id);
    System.out.println(emp.phoneNumber);
}



2. 같은 URL 요청도 처리할 수 있다

아래의 두 요청핸들러 메소드는 /insert.do라는 같은 url을 요청으로 받지만, 메소드에 붙어있는 어노테이션이 다른 것을 볼 수 있다. 요청 방식이 Get이면 @GetMapping을, Post 방식이면 @PostMapping을 사용한다.

@GetMapping("/insert.do")
public String form() {
    return "employee/form.jsp";
}

@PostMapping("/insert.do") 
public String save(EmployeeSaveForm employeeForm) {
    employeeService.addNewEmployee(employeeForm.toEmployees());
    return "redirect:list.do";
}


전체 코드는 깃허브에서 확인 가능합니다.