要学习Spring MVC,必须清楚Servlet的作用,才能对比认识到Spring MVC的作用。因为Spring MVC是封装了Servlet,对外提供一套简化的接口供开发者使用。
Servlet主要作用:
- 1.提供对外的Web访问接口,可以通过URL访问该Servlet类
- 2.转发
- 3.重定向
- 4.接受参数
那Spring MVC也要解决以上方法,并且提供更简单的方式:
Spring MVC要实现的功能:
- 1.提供方法级别的URL绑定
- 2.ModelAndView
- 3.redirect:重定向的URL
- 4.方法形式参数的方式接受参数
前台发来的参数名和方法形式参数名保持一致,即可接收到发来的参数值。
可以是一个,可以是多个,也可以是JavaBean的参数形式,而且能够做到类型的直接转换
package controller;
import entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TestController {
//方法绑定URL
@RequestMapping("/test1")
public void test1() {
System.out.println("hello!");
}
//返回值表示要转发的视图名
@RequestMapping("/test2")
public String test2() {
return "test2";
}
//转发到页面,并且将数据放到了reqeust作用域,Spring MVC隐藏了request概念,它提供了一个ModelAndView的类
@RequestMapping("/test3")
public ModelAndView test3() {
String name = "Tom";
ModelAndView mv = new ModelAndView("test3");
mv.addObject("name", name);
return mv;
}
//重定向
@RequestMapping("/test4")
public String test4() {
return "redirect:test1.do";
}
//接受前台传来的同名参数
@RequestMapping("/test5")
public void test5(String type) {
System.out.println(type);
}
//接受前台传来的不同名参数
@RequestMapping("/test6")
public void test6(@RequestParam(name="type") String t) {
System.out.println(t);
}
//接受前台传来的多个参数
@RequestMapping("/test7")
public void test7(String name,String gender) {
System.out.println(name+" "+gender);
}
//接受前台传来的参数,并自动实现类型转换
@RequestMapping("/test8")
public void test8(String name,String gender,int age) {
System.out.println(name+" "+gender+" "+age);
}
//接受前台传来的参数,并将值封装到JavaBean对应的同名属性中
@RequestMapping("/test9")
public void test9(Student stu) {
System.out.println(stu.getName()+" "+stu.getGender()+" "+stu.getAge());
}
}
以上代码,可以通过URL自行测试,如:
/testmvc_war_exploded/test9.do?name=Tom&gender=%E7%94%B7&age=20