JAVA/개념정리
Ajax ( JSON)
inderrom
2022. 12. 6. 03:47
jsonTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="<%= request.getContextPath()%>/js/jquery-3.6.1.min.js"></script>
<script>
$(function(){
// 문자열
$('#strBtn').on('click', function(){
$.ajax({
url : "<%=request.getContextPath()%>/jsonData.do",
type : 'post',
data : "choice=str", // 띄어쓰기 없게 쓰셈
success : function(data){
$('#result').html(data);
},
dataType : 'json',
error : function(xhr){
alert("상태" + xhr.status)
}
})
})
//==================================================
// 배열
$('#arrBtn').on('click', function(){
$.ajax({
url : "<%=request.getContextPath()%>/jsonData.do",
type : 'post',
data : "choice=arr", // 띄어쓰기 없게 쓰셈
success : function(data){
var htmlCode = "";
$.each(data, function(i,v){
htmlCode += i + "번째 데이터 :" + v + "<br>";
});
$('#result').html(htmlCode);
},
dataType : 'json',
error : function(xhr){
alert("상태" + xhr.status)
}
})
})
//==================================================
$('#objBtn').on('click', function(){
$.ajax({
url : "<%=request.getContextPath()%>/jsonData.do",
type : 'post',
data : "choice=obj", // 띄어쓰기 없게 쓰셈
success : function(data){
//{"mem_id":"z1234","mem_pass":"9999","mem_name":"홍길동","mem_tel":"010-5555-7777","mem_addr":"대전시 중구 오류동"}
var htmlCode = "회원ID : " + data.mem_id + "<br>";
htmlCode += "비밀번호 : " + data.mem_pass + "<br>";
htmlCode += "회원이름 : " + data.mem_name + "<br>";
htmlCode += "전화번호 : " + data.mem_tel + "<br>";
htmlCode += "회원주소 : " + data.mem_addr + "<br>";
$('#result').html(htmlCode);
},
dataType : 'json',
error : function(xhr){
alert("상태" + xhr.status)
}
})
})
//==================================================
// 리스트
$('#listBtn').on('click', function(){
$.ajax({
url : "<%=request.getContextPath()%>/jsonData.do",
type : 'post',
data : "choice=list", // 띄어쓰기 없게 쓰셈
success : function(data){
//[{"mem_id":"aaaaa","mem_pass":"1111","mem_name":"일순신","mem_tel":"010-1111-1111","mem_addr":"대전"},{"mem_id":"bbbbb","mem_pass":"2222","mem_name":"이순신","mem_tel":"010-2222-1111","mem_addr":"광주"},{"mem_id":"ccccc","mem_pass":"3333","mem_name":"삼순신","mem_tel":"010-3333-1111","mem_addr":"부산"},{"mem_id":"ddddd","mem_pass":"4444","mem_name":"사순신","mem_tel":"010-4444-1111","mem_addr":"인천"}]
var htmlCode = "";
$.each(data, function(i, v){
htmlCode += i + "번째 정보<br>";
htmlCode += "회원ID : " + v.mem_id + "<br>";
htmlCode += "비밀번호 : " + v.mem_pass + "<br>";
htmlCode += "회원이름 : " + v.mem_name + "<br>";
htmlCode += "전화번호 : " + v.mem_tel + "<br>";
htmlCode += "회원주소 : " + v.mem_addr + "<hr>";
});
$('#result').html(htmlCode);
},
dataType : 'json',
error : function(xhr){
alert("상태" + xhr.status)
}
})
})
//==================================================
// Map 객체
$('#mapBtn').on('click', function(){
$.ajax({
url : "<%=request.getContextPath()%>/jsonData.do",
type : 'post',
data : "choice=map", // 띄어쓰기 없게 쓰셈
success : function(data){
//{"name":"이순신","addr":"서울","age":"30"}
var htmlCode = "";
htmlCode += "이름 : " + data.name + "<br>";
htmlCode += "나이 : " + data.age + "<br>";
htmlCode += "주소 : " + data.addr + "<br>";
$('#result').html(htmlCode);
},
dataType : 'json',
error : function(xhr){
alert("상태" + xhr.status)
}
})
})
})
</script>
</head>
<body>
<form>
<input type="button" id="strBtn" value="문자열">
<input type="button" id="arrBtn" value="배 열">
<input type="button" id="objBtn" value="객 체">
<input type="button" id="listBtn" value="리스트">
<input type="button" id="mapBtn" value="Map객체">
</form>
<hr>
<h3>결과 출력</h3>
<div id="result"></div>
</body>
</html>
JsonDataTest
package kr.or.ddit.basic.json;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import kr.or.ddit.vo.MemberVO;
@WebServlet("/jsonData.do")
public class JsonDataTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 응답데이터가 JSON일 때의 ContentType 설정
response.setContentType("application/json; charset=utf-8");
String choice = request.getParameter("choice");
//JSON라이브러리 객체 생성
Gson gson = new Gson();
String jsonData = null; // josn으로 변환된 데이터가 저장될 변수 선언
switch(choice) {
case "str" :
String str = "안녕하세요";
jsonData = gson.toJson(str); // json데이터로 변환하기
break;
case "arr" :
int[] intArr = {10,20,30,40,50};
jsonData = gson.toJson(intArr);
break;
case "obj" :
MemberVO memVo = new MemberVO();
memVo.setMem_id("z1234");
memVo.setMem_name("홍길동");
memVo.setMem_pass("9999");
memVo.setMem_tel("010-5555-7777");
memVo.setMem_addr("대전시 중구 오류동");
jsonData = gson.toJson(memVo);
break;
case "list":
List<MemberVO> memList = new ArrayList<>();
memList.add(new MemberVO("aaaaa","1111","일순신","010-1111-1111","대전"));
memList.add(new MemberVO("bbbbb","2222","이순신","010-2222-1111","광주"));
memList.add(new MemberVO("ccccc","3333","삼순신","010-3333-1111","부산"));
memList.add(new MemberVO("ddddd","4444","사순신","010-4444-1111","인천"));
jsonData = gson.toJson(memList);
break;
case "map" :
Map<String, String> map = new HashMap<String, String>();
map.put("name", "이순신");
map.put("age", "30");
map.put("addr", "서울");
jsonData = gson.toJson(map);
break;
}
System.out.println("jsonData ==>" + jsonData);
PrintWriter out = response.getWriter();
out.write(jsonData); // JSON데이터를 응답으로 보내준다.
response.flushBuffer();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
lprodMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="<%= request.getContextPath()%>/js/jquery-3.6.1.min.js"></script>
<script type="text/javascript">
$(function(){
$('#lprodBtn').on('click', function(){
$.ajax({
url : '<%=request.getContextPath()%>/lprodList.do',
type : 'get',
success : function(data){
var htmlCode = "<table border='1'>";
htmlCode += "<tr><th>LPROD_ID</th><th>LPROD_GU</th><th>LPROD_NM</th></tr>";
$.each(data, function(i,v){
htmlCode += "<tr><td>" + v.lprod_id + "</td>";
htmlCode += "<td>" + v.lprod_gu + "</td>";
htmlCode += "<td>" + v.lprod_nm + "</td></tr>";
});
htmlCode +="</table>";
$('#result').html(htmlCode);
},
error : function(xhr){
alert("상태" + xhr.code);
},
dataType : 'json'
});
});
$('#lprodBtn2').on('click', function(){
location.href="<%=request.getContextPath()%>/lprodList2.do";
});
});
</script>
</head>
<body>
<form>
<input type="button" id="lprodBtn" value="Lprod 자료 가져오기(비동기 방식, Ajax)"> <!--화면 전환 없다 그래서 주소도 안 바뀜 .. 순차적이지 않음 -->
<input type="button" id="lprodBtn2" value="Lprod 자료 가져오기(동기방식)"> <!-- 화면 전환이 되고 주소도 바뀜 순차적임 -->
</form>
<h3>Lprod 자료 목록</h3>
<div id="result"></div>
</body>
</html>
LprodList (비동기방식 - ajax)
package kr.or.ddit.basic.json;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import kr.or.ddit.vo.LprodVO;
@WebServlet("/lprodList.do")
public class LprodList extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/json; charset=utf-8");
Gson gson = new Gson();
LprodDao dao = new LprodDao();
String jsonData = null;
List<LprodVO> lprodList = dao.getAllLprod();
jsonData = gson.toJson(lprodList);
response.getWriter().write(jsonData);
response.flushBuffer();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
lprodList.jsp
<%@page import="kr.or.ddit.vo.LprodVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%
List<LprodVO> lprodList = (List<LprodVO>)request.getAttribute("list");
%>
<body>
<h3>Lprod 자료 목록</h3>
<table border='1'>
<tr><th>LPROD_ID</th><th>LPROD_GU</th><th>LPROD_NM</th></tr>
<%
if(lprodList == null || lprodList.size()==0){
%>
<tr><td colspan="3" style="text-align:center;">자료가 하나도 없습니다.</td></tr>
<%
}else{
for(LprodVO lvo : lprodList){
%>
<tr>
<td><%=lvo.getLprod_id() %></td>
<td><%=lvo.getLprod_gu() %></td>
<td><%=lvo.getLprod_nm() %></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
LprodList2 (동기방식)
package kr.or.ddit.basic.json;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import kr.or.ddit.vo.LprodVO;
@WebServlet("/lprodList2.do")
public class LprodList2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
LprodDao dao = new LprodDao();
List<LprodVO> lpordList = dao.getAllLprod();
request.setAttribute("list", lpordList);
request.getRequestDispatcher("/basic/json/lprodList.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}