본문 바로가기

웹 개발(OLD)/전자정부프레임워크(OLD)

전자정부프레임워크 jsp, 컨트롤러간 json데이터 ajax통신

-pom.xml



-web.xml(확장자 나눌거면 하는데 그냥 .do로 통일시킬거면 할필요 없음 즉 optional)

필자는 아래 설정 후 ajax로 서버 url 지정할때 .ajax붙이고 컨트롤러에서도 매핑url을 .ajax로 해서 테스트 해본 후 되는 걸 확인하고, 다시 아래 설정을 없애고 원래 .do로도 되는지 테스트 해본 결과 이상없어서 그냥 .do로 통일시켰다.


- dispatcher-servlet.xml

컨트롤러의 메소드에서 return "jsonView" 라고 하면 알아서 객체를 json형식으로 파싱하여 ajax통신을 요청한 곳으로 응답하도록 설정하는 부분..(아마도)


- main.jsp 부분 

: 서버의 listAll.do 로 ajax요청을 한다. 


- 컨트롤러

요청으로 날아온 주소, 위도, 경도 정보를 파라미터 수집하기 위해 매개변수로 MemberVO를 선언하고 리턴타입은 ModelAndView로 한다.

그리고 "jsonView"를 생성자 인자로 넘겨서 ModelAndView객체를 만들어준다. 멤버 리스트를 받아와서 List타입을 ModelAndView에다가 담아준다. 이후 이 ModelAndView 객체를 리턴해주면 ajax요청들어온 jsp페이지로 데이터를 json형식으로 파싱하여 응답한다.

이때 StoreVO 까지 매개변수로 받은이유는 아래 테스트 결과를 보면 알겠지만 컨트롤러 메소드의 매개변수로 선언한 객체는 무조건 응답에 담겨서 json으로 파싱되어 jsp페이지로 넘어가는걸 테스트해보기 위함이었다.(무조건 넘어감)

 

그리고 아래와 같이 Spring에서 jackson-databind를 이용하였을때 처럼 리턴타입에 @ResponseBody를 붙여서도 테스트를 해봤는데 결과는 똑같이 파싱되어 나왔다. 과정상의 차이가 있는건지 아닌건지는 지금 잘 모르겠다.


참고로 위와 같이 ModelAndView를 리턴타입으로 한 이유는 그냥 VO객체 하나가 아니라 리스트나 맵 같은 컬렉션타입이 json으로 파싱되어 화면으로 잘 넘어가나 테스트 해보기 위함이었다. 그냥 VO객체 하나만 화면으로 응답해도 되는 상황이라면 아래와 같이 그냥 리턴타입을 String으로 하고 "jsonView"를 리턴해주면 ajax통신을 요청한 jsp페이지로 데이터를 파싱해서 넘겨준다.


-결과

아무튼 결과를 보면 List를 ModelAndView에 담을때 mList라는 문자열을 키로 담았기 때문에 { "mList":[{리스트원소1},{리스트원소2}] } 와 같은 형식으로 파싱되었고, 그 뒤로 메소드 매개변수로 선언했던 MemberVO와 StoreVO가 차례로 json 형태로 파싱되어 응답된 것을 확인할 수 있다. 이때 이 형식이 {}로 감싸져있기 때문에 화면쪽에서 jquery를 이용한다면 jquery객체로 만들어지기 때문에 ajax의 success함수의 calllback함수에서 data.mList 와같이 접근할 수 있는것이다.



http://blog.nachal.com/790 여기 참고했음. 끝.