(Portal 개발 독서 노트) Ajax Portlet

9652 단어 비동기AjaxPortlet
다음은 AjaxPortlet을 개발하는 단계입니다.
1단계: AjaxPortlet의 기반으로 일반적인 포틀릿을 만듭니다.

  
  
  
  
  1. public class DateTimePortlet extends GenericPortlet { 
  2. @RenderMode(name = "view"
  3. public void showHomePage(RenderRequest request, 
  4. RenderResponse response)throws ...{ 
  5. ... 
  6. getPortletContext().getRequestDispatcher( 
  7. response.encodeURL("/WEB-INF/jsp/home.jsp")) 
  8. .include(request, response); 

 
2단계: jsp 페이지에서 브라우저의 XMLHttpRequest 대상을 사용하여 요청을 보내고 응답을 받습니다.

  
  
  
  
  1. <%@include file="include.jsp"%> 
  2. <script type='text/javascript'> 
  3. function <portlet:namespace/>setCurrentDateTime() { 
  4. var xhr = new XMLHttpRequest(); 
  5. ... 
  6. var url = 
  7. "<%=request.getContextPath()%>/DateTimeServlet" 
  8. xhr.open("GET", url, true); 
  9. xhr.send(); 
  10. </script> 
  11. <table> 
  12. <tr> 
  13. <td><b><a href="#" 
  14. onclick="<portlet:namespace/>setCurrentDateTime();" 
  15. style="color: black;">Refresh</a></b></td> 
  16. </tr> 
  17. </table> 
  18. <br/> 
  19. <!-- div , ajax -->
  20. <div id="<portlet:namespace/>messageText"> 
  21. </div> 

웹 페이지에서Refresh 하이퍼링크를 클릭하는 이벤트 처리 함수로 setCurrentDateTime () 를 정의했습니다. 이 방법에서 브라우저의 XHR 대상을 만들고 DateTime Servlet에 대한 연결을 열고 Http GET로 접근하며 비동기적인 연결 (true 매개 변수) 으로 XHR로 이 요청을 보내고 바로 되돌아오는 js 방법을 정의했습니다.
 
3단계: XHR에서 보낸 요청을 처리하기 위해 서버에서 서브렛을 정의합니다. 2단계에서 XMLHttpRequset이 보낸 것은 GET 요청이기 때문에 이에 대응하기 위해doGet의 실현을 정의해야 합니다.

  
  
  
  
  1. public class DateTimeServlet extends HttpServlet { 
  2. public void doGet(HttpServletRequest request, 
  3. HttpServletResponse response) ... { 
  4. SimpleDateFormat sdf = 
  5. new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss a"); 
  6. OutputStream outStream = response.getOutputStream(); 
  7. StringBuffer buffer = new StringBuffer(); 
  8. buffer.append("Hello World (<i> " 
  9. + sdf.format(new Date()) + " </i>)"); 
  10. outStream.write(buffer.toString().getBytes()); 

DateFormat를 만든 다음 HttpServletResponse 출력 흐름을 열고 포맷된 날짜와 다른 문자열을 HTML Fragment 형식으로 출력 흐름에 기록합니다.
 
4단계: 서브렛이 반환한 결과에 응답하기 위해 페이지에 js 함수를 정의한 다음 지정한
에 렌더링

  
  
  
  
  1. <script type='text/javascript'> 
  2. function <portlet:namespace/>setCurrentDateTime() { 
  3. var xhr = new XMLHttpRequest(); 
  4. xhr.onreadystatechange = function() { 
  5. //readyState 4 XMLHttpRequest Complete, Data
  6. if(xhr.readyState == 4) { 
  7. var messageText = document.getElementById("<portlet:namespace/>messageText"); 
  8. messageText.innerHTML = xhr.responseText; 
  9. }; 
  10. var url = 
  11. "<%=request.getContextPath()%>/DateTimeServlet"
  12. xhr.open("GET", url, true); 
  13. xhr.send(); 
  14. </script> 

좋은 웹페이지 즐겨찾기