스프링 MVC 기본 흐름

DispatcherServlet : 클라이언트의 요청을 전달받는다. 컨트롤러에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 한다.

HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지를 결정한다.

HandlerAdapter : DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달하고, 컨트롤러의 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환한다. 웹브라우저 캐시 등의 설정도 담당한다.

Controller : 클라이언트의 요청을 처리한 뒤, 결과를 리턴한다. 응답 결과에서 보여줄 데이터를 모델에 담아 전달한다.

ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.

ViewResolver : 컨트롤러의 처리 결과를 보여줄 뷰를 결정한다.

View : 컨트롤러의 처리 결과 화면을 생성한다. JSP나 Velocity 템플릿 파일 등을 이용해서 클라이언트에 응답 결과를 전송한다.

빨강색 네모가 표시된 부분은 직접 구현해주는 부분이다.

스프링MVC 컨트롤러

스프링MVC 컨트롤러는 클라이언트(웹 브라우저)의 요청을 처리하는 기능을 제공한다.

@Controller
public class HelloController {
    @RequestMapping(value = "/hello.do", method=RequestMethod.POST)
     public String hello(Model model){
     model.addAttribute("greeting", "안녕하세요");
    return "hello";
   }
}

 

 

위 코드의 경우 웹 브라우저가 “/hello.do” URL을 Post방식으로 요청을 하면 hello()메소드를 이용해서 그 요청을 처리한다고 지정했다.

컨트롤러에서 직접 응답결과를 생성할 수도 있지만, 보통은 결과를 보여줄 때 사용할 뷰이름을 리턴한다.
위 코드에서는 “hello”를 리턴했는데, 스프링MVC는 “hello”에 해당하는 뷰 구현을 찾은 뒤, 해당 뷰를 이용해서 응답 결과를 생성한다.

뷰에서 응답 결과를 생성할 때 데이터가 필요할 수도 있는데, 이때에는 모델에 담긴 데이터를 이용해서 알맞은 응답 결과를 생성하게 된다.

IE8에서 radio button click이벤트 안될때!

진행중이던 프로젝트 하나가 IE8에 맞춰서 작업되어 있었어요.
그런데 IE7에 맞추어달라는 이벤트가 있어서 확인하다 보니.
라디오버튼에 click이벤트가 작동이 안되더라구요!

그래서 해결했던 방법!!

$("label").click(function(){
         if ($(this).attr("for") != ""){
          	$("#" + $(this).attr("for")).click();	
          }
});

이렇게 코드를 추가했더니 IE7,IE8 모두 다 작동이 되었어요!