반응형
*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생성
-
객체 생성
-
JSONObject jo=new JSONObject();
-
값 할당
-
jo.put("이름","값");
-
이 때의 값은 문자열,숫자,불린,JSONObject, JSONArray
-
...
-
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 |