1. 程式人生 > >教自己快速上手springMVC

教自己快速上手springMVC

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