一、瞭解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();
}