O componente central do Spring MVC e um controlador (controller) que e um servlet configurado no web.xml chamado Dispatcher Servlet. Este servlet segue o padrao Front Controller.Quando uma requisicao web e enviada para uma aplicacao Spring MVC, um controlador recebe esta requisicao e faz o tratamento necessario.Para se definir uma classe de controle, a classe precisa ser anotada com @Controlller. Quando esta classe recebe uma requisicao, ela procura por um apropriado metodo para tratar esta requisicao. Entao e necessario mapear cada requisicao para um metodo da classe de controle, usando um ou mais mapeamentos. Para fazer isso, os metodos sao decorados com a anotacao @RequestMapping.A assinatura desses metodos pode ter qualquer nome, uma variedade de argumentos e pode ter qualquer um de uma serie de retornos, como exemplo, String ou void.A seguir encontra-se uma lista parcial de argumentos validos para os metodos do controlador:HttpServletRequest ou HttpServleResponseParametros de Requisicao anotados com @RequestParamAtributos de Modelo anotados com @ModelAttributeCookies incluidos na requisicao anotados com @CookieValueMap ou ModelMap, para o metodo adicionar atributos ao modeloErrors ou BindingResult, para o metodo fazer o binding e validar o resultado de de objetosSessionStatus, para notificacoes de completude de processamento de sessaoDepois que o metodo do controle finaliza seu processamento, ele delega o controle para a view, que e representada pelo valor de retorno do metodo, no caso uma String. Esse valor de retorno e um valor logico (ex: user ou report) e nao uma implementacao da view (ex: user.jsp ou report.pdf). Se o retorno e void, um valor default logico e usado. Os objetos dos argumentos do metodo recebidos como parametros, como por exemplo um Map ou SessionStatus estarao acessiveis na view, tendo sido modificados ou nao pelo metodo do controlador.Um bean do Spring do tipo ViewResolver, configurado na aplicacao, resolve o valor logico de retorno do metodo para uma implementacao. Usa-se @RequestMapping para mapear URLs para uma classe ou um metodo tratador particular. O seguinte exemplo apresenta a aplicacao Petcare, que e uma das aplicacoes de exemplo da Spring: @Controller @RequestMapping("/appointments") public class AppointmentsController { private final AppointmentBook appointmentBook; @Autowired public AppointmentsController(AppointmentBook appointmentBook) { this.appointmentBook = appointmentBook; } @RequestMapping(method = RequestMethod.GET) public Map<String, Appointment> get() { return appointmentBook.getAppointmentsForToday(); } @RequestMapping(value="/{day}", method = RequestMethod.GET) public Map<String, Appointment> getForDay( @PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model { return appointmentBook.getAppointmentsForDay(day); } @RequestMapping(value="/new", method = RequestMethod.GET) public AppointmentForm getNewForm() { return new AppointmentForm(); } @RequestMapping(method = RequestMethod.POST) public String add(@Valid AppointmentForm appointment, BindingResult result) { if (result.hasErrors()) { return "appointments/new"; } appointmentBook.addAppointment(appointment); return "redirect:/appointments"; } } Neste exemplo, @RequestMapping e usada em varios lugares. Primeiro, e usada em nivel de classe, indicando que todos os metodos tratadores neste controle sao relativos ao path /appointments. O metodo get() tem um melhor refinamento: aceita requisicoes do tipo GET, quer dizer, qualquer HTTP GET para /appointments invocara este metodo. O metodo add() e similar: aceita requisicoes do tipo POST, quer dizer, qualquer HTTP POST para /appointments invocara este metodo. O metodo getNewForm() combina a definicao de metodo HTTP e path, entao, qualquer requisicao do tipo GET para appointments/new sera tratada por esse metodo. O metodo getForDay()