springmvc 의 REST 스타일 에 대한 상세 한 설명

6220 단어 Springmvc
REST
REST: 즉 Representational State Transfer 입 니 다.(자원) 표현 층 상태 전환.현재 가장 유행 하 는 인터넷 소프트웨어 구조 이다.그것 은 구조 가 뚜렷 하고 기준 에 부합 되 며 이해 하기 쉽 고 확장 이 편리 하기 때문에 점점 더 많은 사이트 에서 사용 되 고 있다.
• 자원 (Resources): 네트워크 의 실체 또는 네트워크 의 구체 적 인 정보 라 고 할 수 있 습 니 다.그것 은 텍스트 한 장, 그림 한 장, 노래 한 곡, 서비스 일 수 있다. 한 마디 로 하면 구체 적 인 존재 이다.하나의 URI (자원 포 지 셔 닝 문자 통일) 로 가리 킬 수 있 으 며, 각 자원 은 특정한 URI 에 대응 합 니 다.이 자원 을 가 져 오 려 면 URI 에 접근 하면 됩 니 다. 따라서 URI 는 모든 자원 의 유일한 식별 자 입 니 다.
• 표현 층 (Representation): 자원 을 구체 적 으로 나타 내 는 형식 을 표현 층 (Representation) 이 라 고 합 니 다.예 를 들 어 텍스트 는 txt 형식 으로 표현 할 수도 있 고 HTML 형식, XML 형식, JSON 형식 으로 표현 할 수도 있 으 며 바 이 너 리 형식 으로 도 표현 할 수 있다.
• 상태 전환 (State Transfer): 요청 을 할 때마다 클 라 이언 트 와 서버 의 상호작용 과정 을 대표 합 니 다.HTTP 프로 토 콜 은 모든 상태 가 서버 에 저 장 된 상태 가 아 닌 상태 프로 토 콜 입 니 다.따라서 클 라 이언 트 가 서버 를 조작 하려 면 특정한 수단 을 통 해 서버 측 에 '상태 전환' (State Transfer) 이 발생 하도록 해 야 한다.이런 전환 은 표현 층 위 에 세 워 진 것 이기 때문에 '표현 층 상태 전환' 이다.구체 적 으로 말 하면 HTTP 프로 토 콜 에서 조작 방식 을 나타 내 는 네 개의 동 사 는 GET, POST, PUT, DELETE 이다.이들 은 각각 네 가지 기본 동작 에 대응 합 니 다. GET 는 자원 을 가 져 오 는 데 사용 되 고 POST 는 자원 을 새로 만 드 는 데 사용 되 며 PUT 는 자원 을 업데이트 하 는 데 사용 되 며 DELETE 는 자원 을 삭제 하 는 데 사 용 됩 니 다.
2. 위 에서 REST 에 대한 설명 을 보고 어리둥절 한 표정 을 짓 는 것 이 아 닙 니까? 괜 찮 습 니 다. 우 리 는 코드 인 스 턴 스 를 통 해 해석 합 니 다.
 실제로 REST 는 새로운 CRUD 조작 방식 인 데 SpringMVC 는 어떻게 이 루어 졌 을 까?
1. 기본 값 은 POST, GET 만 지원 하기 때문에 웹. xml 에 HiddenhttpMethodFilter 를 설정 하여 PUT, DELETE 를 지원 해 야 합 니 다.



  
  
    myFilter
    org.springframework.web.filter.HiddenHttpMethodFilter
  
  
    myFilter
    /*
  


  
  
    mvc
    org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:mvc-servlet.xml
    
    1
  

  
    mvc
    /
  


HiddenHttpMethodFilter 원본 코드:
@Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {

        HttpServletRequest requestToUse = request;

        if ("POST".equals(request.getMethod()) && request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) == null) {
            String paramValue = request.getParameter(this.methodParam);
            if (StringUtils.hasLength(paramValue)) {
                requestToUse = new HttpMethodRequestWrapper(request, paramValue);
            }
        }

        filterChain.doFilter(requestToUse, response);
    }

원본 코드 를 통 해 SpringMVC 는 post 요청 을 delete 와 put 로 변환 할 수 있 음 을 알 수 있 습 니 다. POST 요청 을 보 낼 때 name = " method" 의 숨겨 진 도 메 인 을 가지 고 다 니 면 됩 니 다. 값 은 DELETE 또는 PUT 입 니 다.
2. user. jsp 에서 REST 스타일 의 CRUD 요청 작성




    Title


    
    



3. 제어 층 작성
package cn.et.demo1;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletResponse;

/**


 *    (        )
 *             (GET( ) | POST (  )| PUT(  ) |DELETE(  )
 *  rest                
 */
@Controller
public class RestController {

    /**
     *   
     * @param name
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/user",method=RequestMethod.POST)
    public String addUser(String name,HttpServletResponse response) throws Exception{
        response.getWriter().println(name+"     !!");
        return null;
    }

    /**
     *   
     * @param userId
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
    public String deleteUser(@PathVariable(value="id") String userId,HttpServletResponse response) throws Exception{
        response.getWriter().println(userId+"     !!");
        return null;
    }

    /**
     *   
     * @param userId
     * @param response
     * @return
     * @throws Exception
     */
    @RequestMapping(value="/user/{id}",method=RequestMethod.PUT)
    public String updateUser(@PathVariable(value="id") String userId,HttpServletResponse response) throws Exception{
        response.getWriter().println(userId+"     !!");
        return null;
    }

    /**
     *   
     * @param userId
     * @return
     */
    @RequestMapping(value="/user/{id}",method=RequestMethod.GET)
    public String getUser(@PathVariable(value="id") String userId, HttpServletResponse response)throws Exception{
        response.getWriter().println(userId+"     !!");
        return null;
    }
}

좋은 웹페이지 즐겨찾기