springmvc有两种实现控制器的主要方法一种实现接口方法,还有一种是用注解实现(@Controller)
实现接口Controller(不建议使用,因为一个接口一个方法,十分繁琐)导入包
import org.springframework.web.servlet.mvc.Controller;
注意是web下的包
重写Controller中的方法
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return null;
}
第一步:创建ModeAndView对象
第二步:调用对象中的方法,接受前端的信息并返回
第三步:封装跳转到视图,放在ModeAndView
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//ModelAndView 模型和视图
ModelAndView mv = new ModelAndView();
//封装对象,放在ModelAndView中。Model
mv.addObject("msg","HelloSpringMVC!");
//封装要跳转的视图,放在ModelAndView中
mv.setViewName("hello"); //: /WEB-INF/jsp/hello.jsp
return mv;
}
}
- 实现接口Controller定义控制器是较老的办法
- 缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦;
导入包
import org.springframework.stereotype.Controller;
注意这个是和前边的不一样
@Controller
@RequestMapping("/HelloController")
public class HelloController {
//真实访问地址 : 项目名/HelloController/hello
@RequestMapping("/hello")
public String sayHello(Model model){
//向模型中添加属性msg与值,可以在JSP页面中取出并渲染
model.addAttribute("msg","真漂亮");
//web-inf/jsp/hello.jsp
return "hello";
}
}
@Controller
在类面前添加不用实现接口的方法,只需要新建一个方法返回的是String类型,参数为视图model加上其他,就直接可以在这个方法中实现与前端交互
@RequestMapping
这个注解表示在locolhost:8080/后加上HelloController,之后再加上下边return的关键字组成网页的地址,同时这个放在类前边和方法前边是一样的,不过要先添加上类的关键字后加入方法的,其他方法和接口无差别。
可以发现,我们的两个请求都可以指向一个视图,但是页面结果的结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱偶合关系



