一、了解SpringMVC
Spring Web MVC简称为Spring MVC,它是Spring提供给Web应用的框架设计。早期的web开发中,主要是jsp+java bean的方式,jsp页面中充斥的大量的java代码,同时又有前端的设计,这样前后台严重依赖,无法实现前后端分离。现在的前后端提倡分离,通过json数据进行交互。SpringMVC的强大之处在于结构灵活,几乎可以使用各种视图,包括json、jsp、xml、pdf等,能够满足手机端、页面端、和平板电脑端的各类请求。
Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。**模型(Model)**封装了应用程序数据,通常它们将由POJO类组成。**视图(View)**负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出。**控制器(Controller)**负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。
二、快速使用
关于配置,这里就不进行赘诉,直接访问我的这篇博客https://blog.csdn.net/Black1499/article/details/83961684,复制粘贴即可
这里我们直接给出一个例子,在代码中学习他的简单使用,十分简单
注意所有返回的都是jsp页面,可爱spring-web.xml中配置。
@Controller // 该注解表示这是一个控制器
@RequestMapping("/emp") // 所有请求的公共部分
public class EmpController {
// 注入EmployeeMapper对象
@Autowired
EmployeeMapper employeeMapper;
// 两种返回页面方面
// 第一种
//请求,默认为get请求
@RequestMapping("/index")
public ModelAndView index(){
ModelAndView mv = new ModelAndView();
// 添加属性,类似request.setAttribute(name,value);
mv.addObject("empList",employeeMapper.selectAll());
// 设置视图名称
mv.setViewName("index");
return mv;
}
// 第二种,推荐使用,简单灵活
// 该请求可以简写成@PostMapping("indexs")
@RequestMapping(value = "indexs",method = RequestMethod.POST)
public String indexs(Model model){
// 添加属性,类似request.setAttribute(name,value);
model.addAttribute("empList",employeeMapper.selectAll());
// 返回页面
return "indexs";
// 重定向
// return "redirect:/index";
}
}
三、参数的处理
1. 接收普通参数
接收多个参数,注意这里参数的名称和类型要和实体类中一样
@PostMapping("/addEmp")//接收普通参数
public String addEmp(String name,String sex,String phone){
// ......
}
接收一个实体类,当参数太多时,上面的那种写法显然不合适。这时我们可以直接传入一个实体类。
@PostMapping("/addEmp")//接收普通参数
public String addEmp(Employee emp){
// 这里可以直接使用emp的所有属性
}
2、@RequestParam获取参数
@GetMapping("/findById")
public String findById(@RequestParam("emp_id")long empId){
// ....
return "";
}
如果当参数为空时会抛出异常,如果允许参数为空设置requied参数为false即可,默认为true
@GetMapping("/findById")
public String findById(@RequestParam(value = "empId",required = false)long empId){
// ....
return "";
}
3、获取请求中的属性参数((@RequestAttribute)
@GetMapping("/deleteById")
public String deleteById(@RequestAttribute("empId") long empId){
// ....
return "";
}
同样如果你想获得session中的属性参数,使用**@SessionAttribute**注解即可
4、通过URL传参(@PathVariable)
@GetMapping("/findById/{id}")
public String getById(@PathVariable("id") long id){
// ....
return "";
}
5、获得json参数(@RequestBody)
@PostMapping("/add")
public String add(@RequestBody Employee employee){
// ....
return "";
}
6、添加session(@SessionAttributes)
@SessionAttributes只能用到类上面,无法用到方法上
@Controller // 该注解表示这是一个控制器
@RequestMapping("/emp") // 所有请求的公共部分
@SessionAttributes(value = {"empList"})
public class EmpController {
// 注入EmployeeMapper对象
@Autowired
EmployeeMapper employeeMapper;
@RequestMapping("/index")
public ModelAndView index(){
ModelAndView mv = new ModelAndView();
// 这里springMVC找到了empList,会自动帮助我们创建一个session并保存
mv.addObject("empList",employeeMapper.selectAll());
// 设置视图名称
mv.setViewName("index");
return mv;
}
}
7、使用@ModelAttribute注解
**注意:**被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。
// 该注解最为常用的用法,用来设置一个实体类,
// 该controller类中的每个方法调用前,都会调用一下这个方法
@ModelAttribute
public Employee setEmployee(){
Employee employee = new Employee();
employee.setId("1");
// ......
return employee;
}
8、返回json字符串(@ResponseBody)
@PostMapping("listAll")
@ResponseBody
public List<Employee> listAll(){
// ssm会帮助我们把返回对象自动转换成json字符串
return employeeMapper.selectAll();
}