Controller、Model和View是三个核心组件,用于处理HTTP请求并返回结果给客户端。
1.Controller
Controller是Spring MVC框架中的控制器,负责处理HTTP请求并生成响应结果。Controller通常会定义多个请求处理方法(也称为Action),每个方法对应一个或多个HTTP请求,并根据请求参数和业务逻辑生成响应结果。Controller通常使用@RequestMapping注解来映射请求路径和处理方法。
下面是一个Controller的示例代码:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String hello(ModelMap model) {
model.addAttribute("message", "Hello World!");
return "hello";
}
}
2.Model
Model是Spring MVC框架中的模型,用于封装数据并传递给View渲染。Model通常是一个Map对象,可以使用addAttribute()方法添加数据。在Controller中,可以通过方法参数的方式接收Model对象,并在方法体中向Model中添加数据。
下面是一个Model的示例代码:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String hello(ModelMap model) {
model.addAttribute("message", "Hello World!");
return "hello";
}
}
3.View
View是Spring MVC框架中的视图,用于渲染数据并生成响应结果。View通常是一个JSP页面或者其他模板文件,可以通过Model中的数据进行渲染。在Controller中,可以通过返回值的方式指定View的名称。
下面是一个View的示例代码:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String hello(ModelMap model) {
model.addAttribute("message", "Hello World!");
return "hello";
}
}
在上面的示例代码中,返回值为"hello",表示使用名为"hello"的视图进行渲染。这意味着在Web应用程序的WebContent目录下,应该存在一个名为"hello.jsp"的JSP页面。
- ModelAndView
ModelAndView是Spring MVC框架中的一个类,用于封装Controller处理结果,并指定要使用的View进行渲染。ModelAndView对象包含了Model中的数据和要使用的View的名称。
下面是一个ModelAndView的示例代码:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView hello() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("hello");
modelAndView.addObject("message", "Hello World!");
return modelAndView;
}
}
在上面的示例代码中,我们首先创建了一个ModelAndView对象,然后指定要使用的View的名称为"hello",最后向ModelAndView中添加了一个名为"message"的数据。这个数据可以在View中进行渲染。
- Redirect和Forward
在Spring MVC框架中,Redirect和Forward是两种重定向方式,可以通过Controller的返回值实现。Redirect是指将请求重定向到另一个URL,而Forward是指将请求转发到另一个URL,两者的区别在于是否改变URL。
下面是一个Redirect和Forward的示例代码:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String hello() {
// Redirect
return "redirect:/hello/redirect";
}
@RequestMapping(value = "/redirect", method = RequestMethod.GET)
public String redirect(ModelMap model) {
model.addAttribute("message", "Redirected");
return "hello";
}
@RequestMapping(value = "/forward", method = RequestMethod.GET)
public String forward(ModelMap model) {
model.addAttribute("message", "Forwarded");
return "forward:/hello/forwarded";
}
@RequestMapping(value = "/forwarded", method = RequestMethod.GET)
public String forwarded(ModelMap model) {
return "hello";
}
}
在上面的示例代码中,我们定义了三个请求处理方法,分别用于处理/hello、/hello/redirect和/hello/forward三个URL的请求。在/hello请求处理方法中,我们使用Redirect的方式将请求重定向到/hello/redirect,这意味着浏览器会向/hello/redirect发起新的请求,并显示该请求的结果。而在/hello/redirect请求处理方法中,我们向Model中添加了一个名为"message"的数据,然后返回"hello"视图的名称。这意味着将会使用名为"hello"的JSP页面进行渲染,并将Model中的数据进行渲染。
在/hello/forward请求处理方法中,我们使用Forward的方式将请求转发到/hello/forwarded,这意味着服务器会将请求转发到/hello/forwarded,并返回该请求的结果给浏览器。而在/hello/forwarded请求处理方法中,我们没有向Model中添加任何数据,仅仅返回"hello"视图的名称,这意味着将会使用名为"hello"的JSP页面进行渲染,但是渲染结果是由/hello/forward方法中添加的数据决定的。
总之,Controller、Model、View、ModelAndView、Redirect和Forward是Spring MVC框架中的核心。