반응형
예제
Eclipse를 사용하며 프로젝트를 진행한다.
- get 방식
ajax.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input value="저스티스타이탄">
<input type="button" value="get">
<div></div>
<script>
"use strict";
let v_btns = document.querySelectorAll('[type=button]');
let v_disp = document.querySelector('div');
v_btns[0].addEventListener('click', function() {
let textVal = document.querySelector('input').value;
// AJAX문법
// 객체 생성은 각 함수마다 하나씩 정의해서 사용하고 전역으로 공통사용하지 않음(충돌위험성 높아짐)
// 1. XMLHttpRequest()객체 생성
let req = new XMLHttpRequest();
// 2. open(설정) - url test.jsp
req.open('get', 'test.jsp?senData='+textVal);
// 4. onreadystatechange - readyState, status - responseText
req.onreadystatechange = function(){
if(req.readyState == 4 && req.status == 200) {
console.log("응답 확인 >> ", req.responseText);
v_disp.innerHTML = req.responseText;
}
}
// 3. send()
req.send();
});
</script>
</body>
</html>
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String data = request.getParameter("senData"); // get key
%>
<h4 style='color: red;'>응답 데이터: <%= data%></h4>
- post 방식
ajax.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input value="저스티스타이탄">
<input type="button" value="post">
<div></div>
<script>
"use strict";
let v_btns = document.querySelectorAll('[type=button]');
let v_disp = document.querySelector('div');
// post
v_btns[0].onclick = function(){
let data = document.querySelector('input').value;
let ajax = new XMLHttpRequest();
ajax.open('post', 'test.jsp');
ajax.addEventListener('readystatechange', function(){
if(this.readyState == 4 && this.status == 200) {
console.log("post response : ", this.responseText);
}
});
ajax.setRequestHeader('content-type','application/x-www-form-urlencoded;');
// 데이터 '전달하는' 위치에서 인코딩 처리 >> 받는 곳에서 인코딩 처리 하지 않아도 됨
// ajax.setRequestHeader('content-type','application/x-www-form-urlencoded;charset=utf-8;');
ajax.send("imkey=" + data); // urlencoded형식(key=value)으로
};
</script>
</body>
</html>
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8"); // post로 데이터를 '전달받는' 위치에서 인코딩 처리하기
// post의 경우 get과 달리 인코딩 처리를 하지 않아 한글이 깨짐 > 인코딩 처리해줘야 함
String data = request.getParameter("imkey"); // post key
%>
<h4 style='color: red;'>응답 데이터: <%= data%></h4>
서블릿 이용한 예제
ajax.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input value="저스티스타이탄">
<input type="button" value="get">
<input type="button" value="post">
<div></div>
<script>
"use strict";
let v_btns = document.querySelectorAll('[type=button]');
let v_disp = document.querySelector('div');
v_btns[0].addEventListener('click', function() {
let textVal = document.querySelector('input').value;
// 1. XMLHttpRequest()객체 생성
let req = new XMLHttpRequest();
// 2. open(설정) - url test.jsp
// content-root유무에 따라 접근 경로 path를 다르게 작성해야 함 - [(context-root)/urlPatten]
req.open('get', '/webPro/Ajax?senData='+textVal);
// 4. onreadystatechange - readyState, status - responseText
req.onreadystatechange = function(){
if(req.readyState == 4 && req.status == 200) {
console.log("응답 확인 >> ", req.responseText);
v_disp.innerHTML = req.responseText;
}
}
// 3. send()
req.send();
});
// post
v_btns[1].onclick = function(){
let data = document.querySelector('input').value;
let ajax = new XMLHttpRequest();
ajax.open('post', 'test.jsp');
ajax.addEventListener('readystatechange', function(){
if(this.readyState == 4 && this.status == 200) {
console.log("post response : ", this.responseText);
v_disp.innerHTML = req.responseText.replace('\n','<br>');
}
});
ajax.setRequestHeader('content-type','application/x-www-form-urlencoded;');
ajax.send("imkey=" + data);
};
</script>
</body>
</html>
2. open(설정)에서의 /webPro/Ajax?senData= 부분 경로 확인
더보기

프로젝트에서 오른쪽 마우스 클릭 > Properties

Web Project Settings > Context root 부분의 경로 확인


Ajax.java
package ajax;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Ajax")
public class Ajax extends HttpServlet {
private static final long serialVersionUID = 1L;
public Ajax() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("senData");
System.out.println("넘어온 데이터>>>>>>>>>>> " + param);
response.setCharacterEncoding("utf-8");
// 응답데이터 생성은 대부분 text(html)로 작성하며, 데이터는 바이너리기반/텍스트기반 스트림으로 작성
PrintWriter wrt = response.getWriter();
wrt.write(65); // A / 인수를 단일문자로 해석
wrt.write(97); // a
wrt.print(97); // 97 / 인수를 문자열로 변환
wrt.write("전달하는 정보 >> " + param); // 요청 위치로 보내줄 응답 생성
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
json 형식으로 응답정보 보내기
- get 방식
ajax.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input value="저스티스타이탄">
<input type="button" value="get">
<input type="button" value="post">
<div></div>
<script>
"use strict";
let v_btns = document.querySelectorAll('[type=button]');
let v_disp = document.querySelector('div');
v_btns[0].addEventListener('click', function() {
let textVal = document.querySelector('input').value;
// 1. XMLHttpRequest()객체 생성
let req = new XMLHttpRequest();
// 2. open(설정) - url test.jsp
req.open('get', '/webPro/Ajax?senData='+textVal);
// 4. onreadystatechange - readyState, status - responseText
req.onreadystatechange = function(){
if(req.readyState == 4 && req.status == 200) {
let jsonObj = JSON.parse(req.responseText);
console.log( "응답 확인 >> ", jsonObj);
v_disp.innerHTML = "value정보만 >>> " + jsonObj.abc;
}
}
// 3. send()
req.send();
});
</script>
</body>
</html>
Ajax.java
package ajax;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Ajax")
public class Ajax extends HttpServlet {
private static final long serialVersionUID = 1L;
public Ajax() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("senData");
System.out.println("넘어온 데이터>>>>>>>>>>> " + param);
response.setCharacterEncoding("utf-8");
// 응답데이터 생성은 대부분 text(html)로 작성하며, 데이터는 바이너리기반/텍스트기반 스트림으로 작성
PrintWriter wrt = response.getWriter();
// JSON형태의 응답정보 보내기
wrt.write("{\"abc\":\""+ param +"\"}");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
- post 방식
ajax.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input value="저스티스타이탄">
<input type="button" value="get">
<input type="button" value="post">
<div></div>
<script>
"use strict";
let v_btns = document.querySelectorAll('[type=button]');
let v_disp = document.querySelector('div');
v_btns[0].addEventListener('click', function() {
let textVal = document.querySelector('input').value;
// AJAX문법
// 1. XMLHttpRequest()객체 생성
let req = new XMLHttpRequest();
// 2. open(설정) - url test.jsp
// content-root유무에 따라 접근 경로 path를 다르게 작성해야 함 - [(context-root)/urlPatten]
req.open('get', '/webPro/Ajax?senData='+textVal);
// 4. onreadystatechange - readyState, status - responseText
req.onreadystatechange = function(){
if(req.readyState == 4 && req.status == 200) {
let jsonObj = JSON.parse(req.responseText);
console.log( "응답 확인 >> ", jsonObj);
v_disp.innerHTML = "value정보만 >>> " + jsonObj.abc;
}
}
// 3. send()
req.send();
});
// post
v_btns[1].onclick = function(){
let data = document.querySelector('input').value;
let ajax = new XMLHttpRequest();
ajax.open('post', '/webPro/Ajax');
ajax.addEventListener('readystatechange', function(){
if(this.readyState == 4 && this.status == 200) {
console.log("post response : ", this.responseText);
}
});
// JSON형식 데이터로 요청
ajax.setRequestHeader('content-type','application/json;');
ajax.send(JSON.stringify({imkey : data}));
};
</script>
</body>
</html>
Ajax.java
package ajax;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Ajax")
public class Ajax extends HttpServlet {
private static final long serialVersionUID = 1L;
public Ajax() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("senData");
System.out.println("넘어온 데이터>>>>>>>>>>> " + param);
response.setCharacterEncoding("utf-8");
// 응답데이터 생성은 대부분 text(html)로 작성하며, 데이터는 바이너리기반/텍스트기반 스트림으로 작성
PrintWriter wrt = response.getWriter();
// JSON형태의 응답정보 보내기
wrt.write("{\"abc\":\""+ param +"\"}");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String parameter = request.getParameter("imkey"); // JSON형식 데이터는 받지 못함
System.out.println("post >>>>>>> " + parameter);
request.setCharacterEncoding("utf-8");
BufferedReader rd = request.getReader();
String data = rd.readLine();
System.out.println("데이터를 확인해보자 >> " + data);
}
}
gson 라이브러리 사용
Ajax.java
package ajax;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
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.JsonObject;
import com.google.gson.JsonParser;
@WebServlet("/Ajax")
public class Ajax extends HttpServlet {
private static final long serialVersionUID = 1L;
public Ajax() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String param = request.getParameter("senData");
System.out.println("넘어온 데이터>>>>>>>>>>> " + param);
response.setCharacterEncoding("utf-8");
// 응답데이터 생성은 대부분 text(html)로 작성하며, 데이터는 바이너리기반/텍스트기반 스트림으로 작성
PrintWriter wrt = response.getWriter();
// JSON형태의 응답정보 보내기
wrt.write("{\"abc\":\""+ param +"\"}");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String parameter = request.getParameter("imkey"); // JSON형식 데이터는 받지 못함
System.out.println("post >>>>>>> " + parameter);
request.setCharacterEncoding("utf-8");
BufferedReader rd = request.getReader();
String data = rd.readLine();
System.out.println("데이터를 확인해보자 >> " + data);
// java에서 활용가능한 객체 형태로 변환하기 위해 gson라이브러리 사용
JsonParser parser = new JsonParser();
JsonObject jsonObj = (JsonObject)parser.parse(data);
System.out.println(jsonObj.get("imkey").getAsString());
response.setCharacterEncoding("utf-8");
PrintWriter wrt = response.getWriter();
wrt.print("넘어감 >> " + jsonObj.get("imkey").getAsString());
}
}
반응형
'jQuery' 카테고리의 다른 글
[jQuery] 23장 fetch (0) | 2024.03.04 |
---|---|
[jQuery] 22장 jQuery를 이용한 Ajax (0) | 2024.02.29 |
[jQuery] 20장 Ajax (0) | 2024.02.27 |
[jQuery] 19장 JSON (1) | 2024.02.27 |
[jQuery] 18장 콜백 함수와 체이닝, 동기와 비동기 (1) | 2024.02.27 |