Day84 - [Spring]컨트롤러 객체의 구현

2021. 6. 16. 00:16Spring

이전 포스트를 통해서, 기본 설정이 되어 있는 프로젝트 입니다.

https://rsorry.tistory.com/259 

 

Day84 - [Spring]개발환경 구축(Spring 프로젝트 생성)

이번에는 Spring 프로젝트를 생성해보면서, 개발환경을 구축 해봅시다. 개발환경 구축(Spring 프로젝트 생성) 먼저, JAVA / Eclipse / Tomcat 에 대한 환결 설정을 모두 마쳐야 합니다. 제 개발 환경은 , JAVA

rsorry.tistory.com

이번에는 Spring 프로젝트에 있는 컨트롤러를 이용해서, 특정한 뷰로 보내는 걸 해봅시다.

 

컨트롤러 객체의 구현

제 Spring Project 의 구조는 아래처럼 되어 있습니다.

이 중에, src/main/java -> com.simple.test 에 Controller 를 만들면 되고, 이를 이용해서 컨트롤러 객체를 구현하면 됩니다.

 

컨트롤러 객체는, URL 매핑을 통해서, 입력된 주소값에 따라 컨트롤러를 경유하게 되며, 메서드를 통해서, views 에 있는 .jsp 파일로 이동하게 됩니다.

 

"views" 폴더에 "request" 폴더를 만들고, 그 아래에 "req_ex01.jsp" 파일을 만들어 봅시다.

"req_ex01.jsp" 파일에는 구분될 수 있도록 아무거나 써주세요.

 

이제 해당 파일을 실행시키면, 브라우저 창에서 볼 수 있을 것 같지만, 볼 수 없습니다. 해당 프로젝트의 구조는 mvc 구조로 되어 있어서, 꼭 컨트롤러를 경유해서 가야하기 때문입니다.

 

"RequestController" 라는 이름의 컨트롤러를 만들어 줍시다.

해당 컨트롤러에서는, 아래처럼 작성을 해줍니다. ( import도 해주세요 작성 후 ctrl + space bar )

@Controller 를 붙임으로써, 해당 클래스가 컨트롤러 임을 명시 합니다.

 

@RequestMapping("경로") : url 주소 중에, 경로와 일치한다면 해당 클래스를 거치게 됩니다.

 

이는, 메서드에 붙여서, 페이지마다 분기를 나눕니다.

 

return 값을 통해, 어떤 view 파일을 보여줄지 정합니다.

 

이렇게 작성이 완료 되었다면, 서버를 실행시키고 "localHost:포트번호/컨텍스트 패스/request/req_ex01" 을 넣어줍니다.

void형 메서드는 들어오는 경로자체가 뷰 리졸버로 돌아가게 됩니다.

 

@RequestMapping 은 value , method 를 사용할 수 있는데, value 에는 경로가, method 는 GET, POST 가 들어 갈 수 있습니다.

 

method 를 명시할 경우, 명시되어 있는 방식으로만 접근할 수 있습니다. ( 생략시 두 방식 모두 접근 가능 )

 

위에서 만들었던 "req_ex01" 파일에 아래의 코드를 추가 합시다.

"RequestController.java" 에는 아래의 코드를 추가 한 후에, 각각의 방식을 실행시켜 봅시다.

이 외에, basic01, basic02, basic03 를 하나의 메서드로 받고 싶다면, 배열을 사용 합니다.

 

매개변수를 사용하고 싶을 때

컨트롤러에 매개변수를 같이 보내서, 컨트롤러에서 이를 사용하고 싶을 때는 3가지 방법이 있습니다.

 

먼저, 페이지에서 파라미터 값을 컨트롤러에 보낼 수 있도록, 간단한 <form> 태그를 만들어 봅시다.

파일명은 "req_ex02.jsp" 로 하겠습니다.

그리고, 해당 view 가 작동할 수 있도록, "RequestController.java" 에 아래 코드를 추가 합니다.

 

1. HttpServletRequest 객체 사용하기.

HttpServletRequest 객체를 사용하면, 페이지를 통해서 넘어온 parameter 를 사용할 수 있습니다.

 

단일 parameter 는 getParameter 를 이용해, 다중(배열)일 경우는 getParameterValues 를 이용해서 값을 받아서 사용할 수 있습니다.

 

2. 어노테이션 이용하기 ( 단일 )

@RequestParam 을 이용해서, 위의 코드처럼 받아 줄 수 있습니다.

 

이 때 중요한 점은, 단일 parameter 만 받을 수 있기 때문에, 다중(배열) 으로 넘어오는 "inter" 같은 경우는 위의 코드처럼 'required = false, defaultValue ="" ' 와 ArrayList 또는 배열로 값을 받아 주어야 합니다.

 

이는, inter ( checkbox ) 를 1개도 선택하지 않았을 경우에 null 이 되기 때문입니다.

null 이 되는 것을 "required = false" 를 통해서, 에러를 넘기고 실행을 하는데, 메서드 안에서 또 inter 를 사용하게 되면, 값이 없는데 사용하려고 하는 오류를 범하게 됩니다.

그래서, 'defaultValue = "" ' 를 통해 기본값을 "" 으로 만들어 주는 방법 입니다.

 

3. 커맨드객체를 이용하기

커맨드 객체는, <form> 태그로 넘어오는 parameter 들을 가지고 있는 VO 객체를 하나 만드는 방법 입니다.

VO 객체에는 <form> 태그의 parameter 들의 "name" 과 같은 변수, setter, getter 메서드를 가지고 있어야 합니다.

※ toString() 은 값의 확인을 위해서 Overriding 해주었습니다

 

VO 객체를 만들었다면, 매개변수로 VO 객체를 넣으면 끝 입니다.

주의할 점은, <form> 태그를 통해서 넘어오는 parameter 들과 VO 에 있는 변수들의 name 이 같아야 한다는 것.

그리고, setter 메서드를 가지고 있어야 한다는 것 !

 

기본 생성자 는 만드는 습관이 좋고, getter 는 값을 넘어온 파라미터 를 사용하려면 필요 합니다.

 

※ VO 객체가 <form> 태그로 넘어오는 parameter 보다 다른 걸 가지고 있다면, 해당하는 멤버변수들은 null 값이 됌

예제.

위의 <form> 태그에서는 "id" 와 "pw" 만 parameter 로 전달하게 되고, VO 객체는 id, pw, name, inter 를 있는데, name 과 inter 는 null 값이 됌