O controller no Spring MVC deve ser anotado com @Controller
e as actions (métodos dos controllers que são mapeados para o front-controller redirecionar) devem ser anotadas com @RequestMapping
, passando o caminho a qual ela responderá.
Após processar as regras de negócio, a action deve retornar uma String
com o nome da view (página que será retornada para apresentação no cliente) sem a extensão.
@Controller
public class HelloController {
@RequestMapping("/hello")
public String myHello() {
System.out.println("Hello World.");
return "hello";
}
}
A view que será chamada deve estar no caminho declarado no arquivo /WEB-INF/spring-context.xml
. Geralmente, as views ficam na pasta /WEB-INF/views
.
Ao invés de retornar uma JSP, o controller pode também redirecionar para outra action, sendo possível fazer esse redirecionamento no cliente ou no servidor. Para fazê-lo no cliente, deve-se passar o termo "redirect:"
na string de retorno da action e, logo depois, o nome que foi mapeado para a mesma.
@Controller
public class HelloController {
@RequestMapping("/hello")
public String myHello() {
System.out.println("Hello World.");
return "redirect:hello2";
}
@RequestMapping("/hello2")
public String anotherHello() {
//Code…
}
}
Caso haja a necessidade de ser feito um redirecionamento no servidor (forward), é possível utilizar o termo "forward:"
dentro da string de retorno, passando uma action (caminho mapeado como @RequestMapping
) do controller, ao invés do nome da JSP. Assim, a URL mostrada no browser continuará a mesma.
@Controller
public class HelloController {
@RequestMapping("/hello")
public String myHello() {
System.out.println("Hello World.");
return "forward:hello2";
}
@RequestMapping("/hello2")
public String anotherHello() {
//Code…
}
}
Através de um formulário, é possível passar os dados para o controller apenas nomeando os campos com os valores de um objeto e recebendo como parâmetro da action o objeto. O Spring trata de verificar quais os campos equivalem e já os popular.
@Controller
public class HelloController {
@RequestMapping("/hello")
public String sayHello(User user) {
System.out.println("Hello, " + user.getNome());
return "hello";
}
}