SSM框架整合-restful风格

  • Restful 风格是什么

    大家在做Web开发的过程中,method常用的值是get和post. 可事实上,method值还可以是put和delete等等其他值。
    既然method值如此丰富,那么就可以考虑使用同一个url,但是约定不同的method来实施不同的业务,这就是Restful的基本考虑。
    CRUD是最常见的操作,在使用Restful 风格之前,通常的增加做法是这样的:
    /addCategory?name=xxx

    可是使用了Restuful风格之后,增加就变成了:
    /category
    CRUD如下表所示,URL就都使用一样的 "/category",区别只是在于method不同,服务器根据method的不同来判断浏览器期望做的业务行为
    传统风格 Restful风格
      url method url method
    增加 /addCategory?name=xxx POST /category PUT
    删除 /deleteCategory?id=123 GET /category/123 DELETE
    修改 /updateCategory?id=123&name=yyy POST /category/123 POST
    获取 /getCategory?id=123 GET /category/123 GET
    查询 /listCategory GET /category GET

  • web.xml

    SpringMVC 只能处理post和get,为了还原对put和delete的处理,web.xml里面要加如下过滤器
    
       HiddenHttpMethodFilter
       org.springframework.web.filter.HiddenHttpMethodFilter
    
    
       HiddenHttpMethodFilter
       /*
    
    
    
         
        
        
            contextConfigLocation
            classpath:applicationContext.xml
        
        
            org.springframework.web.context.ContextLoaderListener
        
         
        
           HiddenHttpMethodFilter
           org.springframework.web.filter.HiddenHttpMethodFilter
        
        
           HiddenHttpMethodFilter
           /*
        
             
         
            CharacterEncodingFilter 
            org.springframework.web.filter.CharacterEncodingFilter 
             
                encoding 
                utf-8 
             
         
         
            CharacterEncodingFilter 
            /* 
            
             
        
        
            mvc-dispatcher
            org.springframework.web.servlet.DispatcherServlet
            
            
                contextConfigLocation
                classpath:springMVC.xml
            
            1
        
        
            mvc-dispatcher
            /
        
         
    

    4.listCategory.jsp

    listCategory.jsp 做了如下修改
    1. 增加
    1.1 action修改为"category"
    1.2 增加如下filed, 虽然这个form的method是post, 但是springmvc看到这个_method的值是put后,会把其修改为put.

    2. 删除
    2.1 url修改为category/id
    2.2 点击超链后,会使用form提交,并且提交_method的值为delete,以达到和增加类似的效果
        $(function(){                     
        	   $(".delete").click(function(){
        		   var href=$(this).attr("href");
        		   $("#formdelete").attr("action",href).submit();
        		   return false;
        	   })
           }) 

    3. 获取
    3.1 url修改为了/category/id

    4. 在最开始增加了jquery.min.js的引入
     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*"%>
      
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      
     
      
        
        
     
    id name 编辑 删除
    ${c.id} ${c.name} 编辑 删除
    分类名称:


    5.editCategory.jsp

    action修改为了 category/id
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*"%>
      
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      
     
    分类名称:


    6.CategoryController

    CRUD的RequestMapping都修改为了/category,只是method各不相同。 
    其他的。。。没变化
    package com.how2java.controller;
     
    import java.util.List;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
     
    import com.how2java.pojo.Category;
    import com.how2java.service.CategoryService;
    import com.how2java.util.Page;
     
    // 告诉spring mvc这是一个控制器类
    @Controller
    @RequestMapping("")
    public class CategoryController {
        @Autowired
        CategoryService categoryService;
     
        @RequestMapping(value="/category",method=RequestMethod.GET)
        public ModelAndView listCategory(Page page){
         
            ModelAndView mav = new ModelAndView();
            List cs= categoryService.list(page);
            int total = categoryService.total();
             
            page.caculateLast(total);
             
            // 放入转发参数
            mav.addObject("cs", cs);
            // 放入jsp路径
            mav.setViewName("listCategory");
            return mav;
        }
         
        @RequestMapping(value="/category",method=RequestMethod.PUT)
        public ModelAndView addCategory(Category category){
            System.out.println("category.getName():"+category.getName());
            categoryService.add(category);
            ModelAndView mav = new ModelAndView("redirect:/category");
            return mav;
        }  
         
        @RequestMapping(value="/category/{id}",method=RequestMethod.DELETE)
        public ModelAndView deleteCategory(Category category){
            categoryService.delete(category);
            ModelAndView mav = new ModelAndView("redirect:/category");
            return mav;
        }  
        @RequestMapping(value="/category/{id}",method=RequestMethod.GET)
        public ModelAndView editCategory(Category category){
            Category c= categoryService.get(category.getId());
            ModelAndView mav = new ModelAndView("editCategory");
            mav.addObject("c", c);
            return mav;
        }  
        @RequestMapping(value="/category/{id}",method=RequestMethod.POST)
        public ModelAndView updateCategory(Category category){
            categoryService.update(category);
            ModelAndView mav = new ModelAndView("redirect:/category");
            return mav;
        }  
     
    }
    

你可能感兴趣的:(框架-整合)