국비지원학원/XML,JSON,AJAX

106일차-JSON/AJAX

초코맛 2019. 4. 10. 05:08
반응형
*JSON(JavaScript Object Notation)
    • var data="{이름:값,이름:값}";
      • =>JavaScript발생
    • var json_object=eval(""("+data+")");   ///이렇게 사용했었다!
  • 이기종 언어간의 데이터 전달용
    • java발생 "김정윤" >>xml/json>>JavaScript 사용
    • 1.xml
      • <?xml version="1.0" encoding="UTF-8"?>
      • <names>
        • <name>김정윤</name>
      • </names>
    • 2.Json
      • {"name" : "김정윤"}
      • //코드의 수가 줄어든다=>네트워크 비용이 줄어든다>>전기를 적게 먹는다.
    • //xml,Json으로 받아들인 이름을 파싱해서 사용하게 된다.
  • JSONSimple.jar를 사용하면 Java에서 JSONObject, JSONArray를 쉽게 만들 수 있다.
    • =>code.google.com에서 배포 (외부 라이브러리)
    • =>JSONArray =>[{"이름":"값(숫자(정수,실수),문자열,불린형)", "이름":"값"},,,,,,,];
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
     String name="김";
     int age=30;
%>
{"name":"<%=name%>","age":<%=age%>}

{"name":"김","age":30}
//결과가 위와 같으므로 JSON만 가지고 쓸수 있는게 없다! 파싱해서 사용하게 됨
https://code.google.com/archive/p/json-simple/downloads

에서  1.1.1을 다운받아 WEB-INF/lib에 넣어준다.


 

*JSON Simple 사용
  • //따라서 객체로 만들어 사용하게 되는데..그게 JSON Object
  • JSONObject생성
    1. 객체 생성
      • JSONObject jo=new JSONObject();
    2. 값 할당
      • jo.put("이름","값");
      • 이 때의 값은 문자열,숫자,불린,JSONObject, JSONArray
      • ...
    3. JSON객체가 가진 값을 문자열로 생성
      • jo.toJSONString(); =>String
<%@page import="org.json.simple.JSONObject"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
     String name="김";
     int age=30;
     JSONObject json=new JSONObject();//{ }인 상태
     json.put("name", name);
     json.put("age", age);
     out.println(json.toJSONString());
%>
//위와 같은 결과가 나온다.

  • 사용)
  • JSONArray 생성
    • JSONArray json_arr=new JSONArray();  //=>[{"이름":"값"},,,]
  • 값 할당(JSONObject)
      • JSONObject jo=new JSONObject(); ///JSONObject 생성
      •  jo.put( "이름", "값");
      • ...
      • json_arr.add(jo);
<%@page import="org.json.simple.JSONObject"%>
<%@page import="org.json.simple.JSONArray"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
     String[] name_arr={"김","김철","박","노"};
     int[] age_arr={30,28,27,31};
     JSONArray json_arr=new JSONArray();
     
     JSONObject json_obj=null;
     for(int i=0; i<name_arr.length; i++){
           //배열이 존재한다면 JSONObject을 생성
           json_obj=new JSONObject();
           json_obj.put("name", name_arr[i]);
           json_obj.put("age",age_arr[i]);
           //생성된 JSONObject를 JSONArray에 추가
           json_arr.add(json_obj);
     }//end for
     out.print(json_arr.toJSONString());
%>
<%-- [
<%
     for(int i=0; i<name_arr.length; i++){
           if(i!=0){//강사님의 ,찍기
                out.println(",");
           }//end if
     %>
           {"name":"<%=name_arr[i]%>","age":<%=age_arr[i]%>}
     <%
           if(i+1!=name_arr.length){//내가 한 ,찍기
                %>
                ,
                <%
           }
     }//end for
%>
] --%>




<<다양한 값을 가진 형태의 JSONArray >>>
package json0328;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class JsonEmpSearchDAO {
     private static JsonEmpSearchDAO jes_dao;
     
     private JsonEmpSearchDAO() {               
     }//JsonEmpSearchDAO
     
     public static JsonEmpSearchDAO getInstance() {
           if(jes_dao==null) {
                jes_dao=new JsonEmpSearchDAO();
           }//end if
           return jes_dao;
     }//getInstance
     
     private Connection getConn() throws SQLException{
           Connection con=null;
           
           try {
           //1.JNDI 사용객체 생성
                Context ctx=new InitialContext();
           //2.DBCP에 저장된 DataSource 얻기
                DataSource  ds=(DataSource)ctx.lookup("java:comp/env/jdbc/jsp_dbcp");
           //3.Connection 얻기
                con=ds.getConnection();
           } catch (NamingException e) {
                e.printStackTrace();
           }//end catch
           
           return con;
     }//getConn
     
     public List<EmpVO> selectEmpList(int deptno) throws  SQLException{
           List<EmpVO> list=new ArrayList<EmpVO>();
           
           Connection con=null;
           PreparedStatement pstmt=null;
           ResultSet rs=null;
           
           try {
           //1.JNDI 사용객체 생성
           //2.DataSource를 DBCP에서 꺼내온다.
           //3.Connection 얻기
                con=getConn();
           //4.쿼리문 수행 객체 얻기
                String selectEmp="select  empno,sal,ename,job,to_char(hiredate,'yyyy-mi-dd dy') hiredate  from emp where deptno=?";
                pstmt=con.prepareStatement(selectEmp);
                pstmt.setInt(1, deptno);
           //5.쿼리문 수행 후 결과 얻기
                rs=pstmt.executeQuery();
                EmpVO ev=null;
                while(rs.next()) {
                     ev=new  EmpVO(rs.getInt("empno"),rs.getInt("sal"),rs.getString("ename"),
                                rs.getString("job"),rs.getString("hiredate"));
                     list.add(ev);
                }//end while
                
           }finally {
                //6.연결 끊기
                if(rs !=null) {rs.close();}//end if
                if(pstmt !=null) {pstmt.close();}//end if
                if(con !=null) {con.close();}//end if
           }//end finally
           
           return list;
     }//selectEmpList
     
}//class
package json0328;
public class EmpVO {
     private int empno,sal;
     private String ename,job,hiredate;
     
     public EmpVO() {
     }
     public EmpVO(int empno, int sal, String ename, String job,  String hiredate) {
           this.empno = empno;
           this.sal = sal;
           this.ename = ename;
           this.job = job;
           this.hiredate = hiredate;
     }
     
     public int getEmpno() {
           return empno;
     }
     public void setEmpno(int empno) {
           this.empno = empno;
     }
     public int getSal() {
           return sal;
     }
     public void setSal(int sal) {
           this.sal = sal;
     }
     public String getEname() {
           return ename;
     }
     public void setEname(String ename) {
           this.ename = ename;
     }
     public String getJob() {
           return job;
     }
     public void setJob(String job) {
           this.job = job;
     }
     public String getHiredate() {
           return hiredate;
     }
     public void setHiredate(String hiredate) {
           this.hiredate = hiredate;
     }
}//class
package json0328;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class JsonService {
     public JSONObject searchEmpData(int deptno) {
           JSONObject json_obj=new JSONObject();
           
           JsonEmpSearchDAO  jes_dao=JsonEmpSearchDAO.getInstance();
           
           try {
                SimpleDateFormat sdf=new  SimpleDateFormat("yyyy-MM-dd HH:mm");
                json_obj.put("pubData", sdf.format(new Date()));
                List<EmpVO> list=jes_dao.selectEmpList(deptno);
                
                json_obj.put("result",  list.isEmpty()?false:true);
                
                JSONArray json_arr=new JSONArray();
                JSONObject temp_obj=null;
                EmpVO ev=null;
                
                for(int i=0; i<list.size(); i++) {
                     ev=list.get(i);
                     temp_obj=new JSONObject();
                     temp_obj.put("empno", ev.getEmpno());
                     temp_obj.put("sal", ev.getSal());
                     temp_obj.put("ename", ev.getEname());
                     temp_obj.put("job", ev.getJob());
                     temp_obj.put("hiredate",  ev.getHiredate());
                     //JSONArray에 생성되어 값을 가진  JSONObject를 추가
                     json_arr.add(temp_obj);
                }//end for
                
                //조회된 결과를 가진 JSONArray를 JSONObject에  추가.
                json_obj.put("resultData", json_arr);
                
           } catch (SQLException e) {
                json_obj.put("result",false);
                e.printStackTrace();
           }//end catch
           
           return json_obj;
     }//searchEmpData
}//class
<%@page import="org.json.simple.JSONObject"%>
<%@page import="json0328.JsonService"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
     String deptno=request.getParameter("deptno");
     if(deptno==null){
           deptno="10";//이 결과가 나오게 된다
     }//end if
     
     int intDeptno=Integer.parseInt(deptno);
     JsonService js=new JsonService();
     JSONObject json_obj=js.searchEmpData(intDeptno);
     out.println(json_obj.toJSONString()  );
%>

 


*AJAX (Asynchonous Java Script & XML)
  • 비동기로 동작하는 JavaScriptdhk XML
  • //여태 배운건 동기식
  • RIA(Rich Internet Application) : 기존의 웹서비스와 다르게 클라이언트의 자원을 더 많이 사용하는 Internet Application (AJAX,FLEX-유지보수가 안좋아 배척..+한계)
  • 동기방식
    • Web Service할 때 서버가 업무처리를 종료하고 난 이후에 클라이언트에게 응답하는 방식
      • =>네트워크 종단간의 컴퓨터끼리 데이터를 주고 받기 위해 HTTP Protocol을 사용하는 Service.
    • <a>,<form>, location : web browser가 서버에게 요청한 방식
    • Container의 HTML이 처음부터 끝까지의 화면을 모두 구현 
    • 서버가 많은 일을 한다.
    • (단점)▲
    • =>클라이언트가 받아 뿌리기만 하면됨
  • 비동기 방식
    • Web Service를 할 때 서버가 업무처리를 종료하기도 전에 클라이언트에게 응답하여 클라이언트가 서비스를 계속해서 사용할 수 있는 방식.
    • JavaScript의 XMLHttpRequest 객체를 사용하여 요청을 보내는 방식
    • 서버가 처리한 데이터(XML,JSON,HTML,text)만 받아 화면의 일부분(DOM으로)을 변경하여 보여준다.
    • 데이터만 주고받음으로 네트워크 사용비용이 적다.(속도 빠름)
    • 화면 일부분만 갱신하므로 화면 깜박임이 없다.
    • 단점) 이전상태를 볼 수가 없다.(모든 페이지를 AJAX로 만들면 이런 일이 발생)
    • ///뒤로가기가 바로 전상태로 돌아가버리기만 함(뒤로가기가 원활하게 되지 않는다.중간이 날라가버린다.)
    • ///일부분 갱신은 일을 사용자페이지가 한다는 뜻으로 화면을 만드는일을 클라이언트가 하는것 일을 나누어가진다.
 

반응형

'국비지원학원 > XML,JSON,AJAX' 카테고리의 다른 글

108일차-JSONArray+Model2  (0) 2019.04.11
107일차-AJAX  (0) 2019.04.11
105일차-XML+Parsing  (0) 2019.04.08
104일차-XML+Parser  (0) 2019.04.08
103일차-XML조금  (0) 2019.04.04