SpringMVC (4): Restful 스타일 의 추가 삭제 실현
글 목록
REST (영어: Representational State Transfer, REST 로 약칭) 는 웹 응용 프로그램 과 같은 구조 적 인 네트워크 시스템 을 묘사 했다.2000 년 Roy Fielding 의 박사 논문 에 처음 등장 한 그 는 HTTP 규범 의 주요 작성 자 중 한 명 이다.현재 주류 인 세 가지 웹 서비스 인 터 랙 션 방안 중에서 REST 는 SOAP (Simple Object Access protocol, 간단 한 대상 방문 프로 토 콜) 과 XML - RPC 보다 더욱 간단명료 하 다. URL 에 대한 처리 든 Payload 에 대한 인 코딩 이 든 REST 는 더욱 간단 하고 가 벼 운 방법 으로 디자인 하고 실현 하 는 경향 이 있다.주의해 야 할 것 은 REST 는 명확 한 기준 이 없고 디자인 의 스타일 같다 는 점 이다.REST 의 핵심 가 치 는 REST 스타일 에 맞 는 네트워크 인 터 페 이 스 를 어떻게 설계 하 느 냐 에 있다.이 스타일 을 바탕 으로 디자인 된 소프트웨어 는 더욱 간결 하고 차원 이 있 으 며 캐 시 등 체 제 를 실현 하기 쉽다.
restful 의 특성
1. 자원 (리 소스)
네트워크 상의 실체 또는 네트워크 상의 구체 적 인 정보 라 고 할 수 있다.그것 은 텍스트 한 장, 그림 한 장, 노래 한 곡, 서비스 일 수 있다. 한 마디 로 하면 구체 적 인 존재 이다.하나의 URI (자원 포 지 셔 닝 문자 통일) 로 가리 킬 수 있 으 며, 각 자원 은 특정한 URI 에 대응 합 니 다.이 자원 을 가 져 오 려 면 URI 에 접근 하면 됩 니 다. 따라서 URI 는 모든 자원 의 유일한 식별 자 입 니 다.
2. 표현 층 (표현)
자원 을 구체 적 으로 보 여 주 는 형식 을 표현 층 (Representation) 이 라 고 한다.예 를 들 어 텍스트 는 txt 형식 으로 표현 할 수도 있 고 HTML 형식, XML 형식, JSON 형식 으로 표현 할 수도 있 으 며 바 이 너 리 형식 으로 도 표현 할 수 있다.
3. 상태 전환 (상태 전송)
요청 을 할 때마다 클 라 이언 트 와 서버 의 상호작용 과정 을 대표 합 니 다.HTTP 프로 토 콜 은 모든 상태 가 서버 에 저 장 된 상태 가 아 닌 상태 프로 토 콜 입 니 다.따라서 클 라 이언 트 가 서버 를 조작 하려 면 특정한 수단 을 통 해 서버 측 에 '상태 전환' (State Transfer) 이 발생 하도록 해 야 한다.이런 전환 은 표현 층 위 에 세 워 진 것 이기 때문에 '표현 층 상태 전환' 이다.구체 적 으로 말 하면 HTTP 프로 토 콜 에서 조작 방식 을 나타 내 는 네 개의 동 사 는 GET, POST, PUT, DELETE 이다.이들 은 각각 네 가지 기본 동작 에 대응 합 니 다. GET 는 자원 을 가 져 오 는 데 사용 되 고 POST 는 자원 을 새로 만 드 는 데 사용 되 며 PUT 는 자원 을 업데이트 하 는 데 사용 되 며 DELETE 는 자원 을 삭제 하 는 데 사 용 됩 니 다.
restful 예제 / acount / 1 HTTP GET: id = 1 의 account / acount / 1 HTTP DELETE 받 기: id = 1 의 account / acount / 1 HTTP PUT 삭제: id = 1 의 account / acount HTTP POST 업데이트: account 추가
2. restful 스타일 의 첨삭 과 수정 을 실현 한다.
2.1 HiddenHttpMethodFilter 설정
브 라 우 저 form 폼 은 GET 와 POST 요청 만 지원 하기 때문에 DELETE, PUT 등 method 는 지원 되 지 않 습 니 다. Spring 3.0 은 필 터 를 추가 하여 브 라 우 저 요청 을 지정 한 요청 방식 으로 변경 하여 컨트롤 러 방법 으로 보 내 GET, POST, PUT 와 DELETE 요청 을 지원 할 수 있 습 니 다.필터: org. springframework. web. filter. HiddenHttpMethodFilter
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<filter>
<filter-name>hiddenHttpMethodFilterfilter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilterfilter-class>
filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
2.2 전단 페이지 에 restful 요청 쓰기
폼 마다 숨겨 진 영역 을 추가 합 니 다. name = "method, value = "요청 방식".
<html lang="en">
<head>
<meta charset="UTF-8">
<title>restful title>
head>
<body>
<form action="http://localhost:8080/account/100" method="post">
<input type="hidden" name="_method" value="post">
<input type="submit" value=" ">
form>
<form action="http://localhost:8080/account/200" method="post">
<input type="hidden" name="_method" value="get">
<input type="submit" value=" ">
form>
<form action="http://localhost:8080/account/300" method="post">
<input type="hidden" name="_method" value="put">
<input type="submit" value=" ">
form>
<form action="http://localhost:8080/account/400/500" method="post">
<input type="hidden" name="_method" value="delete">
<input type="submit" value=" ">
form>
body>
html>
2.3 controller resful 요청 처리
* * 주의: * put 와 delete 요청 방식 은 논리 보 기 를 되 돌 릴 수 없 기 때문에 @ Response Body 로 json 문자열 을 되 돌려 줍 니 다.
@ PathVariable 주석
@ PathVariable 을 통 해 URL 의 자리 차지 문자 인 자 를 컨트롤 러 처리 방법 에 연결 할 수 있 습 니 다. URL 의 {xxx} 자리 차지 문 자 는 @ PathVariable ("xxx") 을 통 해 조작 방법의 참여 에 연결 할 수 있 습 니 다.
URL 바 인 딩 된 자리 표시 자 에 자리 표시 자 를 표시 하 는 URL 은 Spring 3.0 에 추 가 된 기능 으로 SpringMVC 가 REST 목 표를 향 해 발전 하 는 과정 에서 이정표 적 의 미 를 가진다.
package com.zmysna.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
public class AccountController {
@RequestMapping(value = "/account/{id}",method = RequestMethod.POST)
public String save(@PathVariable("id") String id){
System.out.println(id);
System.out.println(" ");
return "success";
}
@RequestMapping(value = "/account/{id}",method = RequestMethod.GET)
public String get(@PathVariable("id") String id){
System.out.println(id);
System.out.println(" ");
return "success";
}
@RequestMapping(value = "/account/{id}",method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable("id") String id){
System.out.println(id);
System.out.println(" ");
return "success";
}
@ResponseBody
@RequestMapping(value = "/account/{fid}/{sid}", method = RequestMethod.DELETE)
public String delete(@PathVariable("fid") String fid, @PathVariable("sid") String sid){
System.out.println(fid+":"+sid);
System.out.println(" ");
return "success";
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.