spring JSONP

1. 제 이 슨 프 원리 소개
Ajax 는 이미 누구나 다 알 고 있 을 것 입 니 다. 그러나 브 라 우 저의 '동원 정책' 에 제약 을 받 아 방문 을 뛰 어 넘 어야 할 때 Ajax 는 어 쩔 수 없습니다.이 럴 때 저 희 는 Jsonp 가 필요 합 니 다. Jsonp 는 Json with padding 의 약칭 입 니 다. 이것 은 비공 식 프로 토 콜 입 니 다. 서버 에서 script tags 를 계승 하여 클 라 이언 트 로 돌아 가 자바 script callback 의 형식 으로 비약 적 인 방문 을 할 수 있 습 니 다.
좀 더 명확 하 게 말하자면 프론트 엔 드 는 JS 를 통 해 script 탭 을 만 들 고 src 가 요청 한 url 을 가리 키 며 url 에 리 셋 된 callback 을 지정 하 는 것 입 니 다. Server 엔 드 는 요청 데 이 터 를 json 형식 (jsonData) 으로 변환 하여 데 이 터 를 callback 에 채 우 고 callback 을 리 셋 하 는 것 입 니 다.
 
2. Spring 에서 Jsonp 요청 지원
물론 실제 프로젝트 에서 여러 가지 세부 적 인 처 리 를 고려 해 야 하지만 예 를 들 어 상기 핵심 절차 만 실현 한다.이전 글 'Spring MVC 사용자 정의 보기 의 실현' 을 통 해 Jsonp 의 요청 을 지원 하려 면 JSONP 보기 에 대한 지원 을 추가 하고 Jsonp 보기 의 렌 더 링 함수 에서 되 돌아 올 데 이 터 를 json 형식 으로 변환 하고 콜백 을 되 돌리 면 됩 니 다. 콜백 함수 의 이름 이 전단 으로 들 어 와 야 할 때 Jsonp 보기에 서 request 에서 얻 을 수 있 습 니 다.
JSONP 보기 의 실현:

  
  
  
  
  1. public class JsonpView extends AbstractView {
  2.  
  3. protected void renderMergedOutputModel(Map<String, Object> model,
  4. HttpServletRequest request, HttpServletResponse response) throws Exception {
  5. // model JSON
  6. JSONObject json = (JSONObject)JSONSerializer.toJSON(model);
  7. // JSONP callback
  8. String callback = request.getParameter("callback");
  9. // callback,
  10. StringBuffer buf = new StringBuffer();
  11. buf.append(callback);
  12. buf.append("(");
  13. buf.append(json.toString());
  14. buf.append(");");
  15. response.setContentType("text/plain; charset=GBK");
  16. response.getOutputStream().write(buf.toString().getBytes());
  17. response.getOutputStream().flush();
  18. }
  19. }

전단 의 실현 은 다음 과 같다.

  
  
  
  
  1. vote = function(){
  2. var url = "log/vote.jsonp?callback=" +"voteCallback";
  3. var script = document.createElement("script");
  4. script.setAttribute("src",url);
  5. script.setAttribute("type","text/javascript");
  6. document.getElementsByTagName("head")[0].appendChild(script);
  7. };
  8. voteCallback = function(data){
  9. alert(data.username+data.password);
  10. }

 
vote () 함 수 를 터치 할 때 헤드 에 < script > 탭 을 만 들 고 src 이전 서버 에서 url 을 요청 합 니 다. url 에 callback 함수 이름 을 알려 주 십시오. 서버 에서 callback 함 수 를 되 돌 릴 수 있 도록 합 니 다. 또한 프론트 엔 드 는 callback 함 수 를 실현 하고 서버 에 채 워 진 json 데 이 터 를 처리 해 야 합 니 다. 위의 예제 에 서 는 간단 한 alert 일 뿐 입 니 다.
서버 엔 드 의 controller 는 다음 과 같 습 니 다.

  
  
  
  
  1. public String vote(ModelMap model){
  2. model.addAttribute("username","ds");
  3. model.addAttribute("password","123456");
  4. return "vote.jsonp";
  5. }

마지막 으로 spring mvc 설정 파일 은 다음 과 같 습 니 다.

  
  
  
  
  1. <bean id="multiViewResolver" class="cn.ds.core.service.spring.JmatrixMultiViewResolver">
  2. <property name="viewMap">
  3. <map>
  4. <entry key=".config" value-ref="configView" />
  5. <entry key=".jsonp" value-ref="jsonpView" />
  6. </map>
  7. </property>
  8. </bean>
  9. <bean id="jsonpView" class="cn.ds.core.service.spring.JsonpView"></bean>

좋은 웹페이지 즐겨찾기