The catalina.out
log clearly shows that your @Controller
is mapped to the path /contacts
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/contacts],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.apress.prospring3.ch17.web.controller.ContactController.list(org.springframework.ui.Model)
However you are trying to access this handler with the path
localhost:8080/contacts
This will only work if you webapp is configured to have a context path of /
and I'm pretty sure it isn't.
Try using
localhost:8080/[myapp]/contacts
where [myapp]
is the name of your application's folder in the webapps
folder.
See this answer on how to change that path.