✿∘˚˳°∘°
59일차 : AJAX, mvc2WebProject - 6 본문
1. ajax
기존 서버와 클라이언트의 데이터이동방법(request, response)
client ---request--> server
<--response.sendRedirect(); 주소창바꾸기
<--RequestDispatcher
ajax의 데이터이동방법
client ---request--> Server
<-- data ---
js에서요청하고 요청을 받음
서버로부터 데이터를 가져와 전체페이지를 새로 고치지않고 일부만 로드할 수 있게 하는 기법
비동기식 요청을 보내는데 필요한 기술
- 동기식요청 : 함수가 실행되는데 10s가 걸린다고 가정할 때 그 10초동안 함수에서 실행이 끝날때가지 기다림
- 비동기식요청 : 함수실행10s를 기다리지않고 다음코드실행 -> 함수가 끝나면 실행해줌
장점 : 비동기식 방식으로 웹서버의 응답을 기다리지 않고 데이터를 빠르게 처리 / 페이지 리로딩없이 처리
단점 : 한페이지에 지속적으로 사용 시 리소스가 쌓여 페이지가 느려짐 / 스크립트로되어있어 에러발생 시 찾기힘듬
<%@ 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>
<style>
.ajaxResult{
min-height: 100px;
border: 2px solid #ccc;
padding: 15px;
}
</style>
</head>
<body>
<%@include file="/WEB-INF/views/common/header.jsp" %>
<div class="page-content">
<div class="page-title">AJAX</div>
<h3>1. 서버호출하기</h3>
<a class="btn bc11" href="/ajaxTest1.do">a태그방식</a>
<!-- 비교를위해 ajax서버호출방식 두가지 - js / jQuery -->
<button class="btn bc11" id="js">JS방식</button>
<button class="btn bc11" id="jQ1">jQuery방식</button>
<h3>2. 서버로 값 전송하기</h3>
<!-- input태그를 통해 전송하는게 아닌 script로 보내므로 input에 name이 필요하지X -->
<input type="text">
<button class="btn bc11" id="jQ2">전송</button>
<h3>3. 서버로 데이터전송하고 서버에서 데이터받기(기본형데이터 받기)</h3>
<input type="text" id="su1">
<input type="text" id="su2">
<button class="btn bc1" id="jQ3">더하기</button>
<p class="ajaxResult" id="result3"></p>
<h3>4. 서버로 데이터전송하고 서버에서 데이터받기(객체 받기)</h3>
<input type="text" id="input4">
<button class="btn bc1" id="jQ4">회원정보조회</button>
<p class="ajaxResult" id="result4"></p>
<h3>5. 서버에서 리스트 데이터 받기(배열타입 받기)</h3>
<button class="btn bc1" id="jQ5">전체회원조회</button>
<p class="ajaxResult" id="result5"></p>
<!-- 4/5번 작업을 조금 더 간편하게 -->
<!-- GSON : 구글에서 JSON을 좀 더 편하게 만들어 준 것 -->
<h3>6. 서버로 데이터 전송하고 서버에서 데이터받기(GSON)</h3>
<input type="text" id="input6">
<button class="btn bc1" id="jQ6">회원정보조회</button>
<p class="ajaxResult" id="result6"></p>
<h3>7. 서버에서 데이터 리스트 받기(GSON)</h3>
<button class="btn bc1" id="jQ7">전체회원조회</button>
<p class="ajaxResult" id="result7"></p>
</div>
<script>
$("#js").on("click", function(){
//javascript로 ajax를 이용한 서버 호출 방식
//1. XMLHttpRequest 객체 생성
const xhttp = new XMLHttpRequest();
//2. 요청 정보 설정 - 메소드는 뭘로할지, url은 어떻게할건지, 비동기여부
xhttp.open("GET", "/ajaxTest1.do", true);
//3. 서버 요청 처리에 따른 동작함수 지정 - 서버가 요청을 했는데 에러가날수도있고 잘끝났을 수도 있음 -> 이때의 행동을 함수로 지정
xhttp.onreadystatechange = function(){
//상태가 바뀌면 이 함수가 동작
if(this.readyState == 4 && this.status == 200){
//요청이 모두 끝났을 때(4) && 정상적인 응답이 돌아온 경우(200)
console.log("서버요청성공");
}else if(this.readyState == 4 && this.status == 404){
//요청이 모두 끝나고(4) && 해당페이지를 찾을 수 없는 경우(404, 주소틀림)
console.log("주소를 찾을 수 없습니다.");
}//위 경우 둘다 서버에 요청을 했지만 페이지이동은 일어나지않음
}
//4. 서버에 요청
xhttp.send();
});
$("#jQ1").on("click", function(){
$.ajax({//jQuery에서 ajax를 호출하는 방법
//ajax라는 함수를 호출해서 javascript의 객체를 넣어줌
url : "/ajaxTest1.do",
type : "GET", //메소드
success : function(){
//성공했을 때 실행할 함수
console.log("서버호출완료!!");
},
error : function(){
//실패했을 때 실행할 함수
console.log("에러발생");
},
complete : function(){
//성공실패 상관없이 끝나면 무조건 호출 - 에러가 발생해도 호출
console.log("무조건 호출");
}
});
});//특징 : 서버를 호출했는데 페이지의 이동이 없음
$("#jQ2").on("click", function(){
const input = $(this).prev();
const inputValue = input.val(); //현재 input에 들어있는 값(이걸 보내줄 것)
$.ajax({
url: "/ajaxTest2.do",
type: "GET",
data: {input1 : inputValue}, //객체의 key값(input1)이 name과 같은 역할을 한다.
//여러개 보내고 싶으면 ,로 추가하면 된다.
success: function(){
console.log("서버로 데이터 전송 완료");
},
error: function(){
console.log("에러발생");
}
});
});
$("#jQ3").on("click", function(){
//input에 입력된 값 2개 가져다가 ajaxTest3.do에 전송 후 출력
const su1Val = $("#su1").val();
//const su1Val = $(this).prev().prev().val();
const su2Val = $("#su2").val();
//const su2Val = $(this).prev().val();
$.ajax({
url: "/ajaxTest3.do",
type: "GET",
data:{su1 : su1Val, su2 : su2Val},
success:function(data){
//서블릿에서 되돌아온 데이터가 성공함수의 매개변수로 받아옴
//data의 자료형 : 문자열(자바스크립트는 전부 문자열로 받아옴)
console.log(data, typeof data);
$("#result3").text(su1Val+" + "+su2Val+" = "+data);
console.log("서버요청성공");
},
error:function(){
console.log("서버요청실패");
}
});
});
$("#jQ4").on("click", function(){
const memberId = $("#input4").val();
const result = $("#result4");
result.empty();//empty를 넣지않으면 기존데이터가 사라지지않고 누적됨
$.ajax({
url: "/ajaxTest4.do",
type: "GET",
data: {memberId : memberId},
dataType: "JSON",
success: function(data){
//console.log(data, typeof data);
//console.log("서버호출성공");
if(data == null){
result.append("회원정보를 조회할 수 없습니다.");
}else{
result.append("아이디 : "+data.memberId+"<br>");
result.append("이름 : "+data.memberName+"<br>");
result.append("전화번호 : "+data.memberPhone+"<br>");
result.append("주소 : "+data.memberAddr);
}
},
error: function(){
console.log("서버호출실패");
}
});
});
$("#jQ5").on("click", function(){
const result = $("#result5");
result.empty();
$.ajax({
url : "/ajaxTest5.do",
type : "get",
dataType : "json",
success: function(data){
for(let i=0; i<data.length; i++){
const div = $("<div></div>");
div.append(data[i].memberId);
div.append("/");
div.append(data[i].memberName);
div.append("/");
div.append(data[i].memberPhone);
div.append("/");
div.append(data[i].memberAddr);
result.append(div);
}
},
error: function(){
//필요하지 않을경우 안적어도 지워도 괜찮다
}
});
});
$("#jQ6").on("click", function(){
const memberId = $("#input6").val();
const result = $("#result6");
$.ajax({
url : "/ajaxTest6.do",
type : "get",
data : {memberId : memberId},
dataType : "json",
success : function(data){
console.log(data);
},
error : function(){
console.log("서버 호출 실패");
}
});
});
$("#jQ7").on("click", function(){
const result = $("#result7");
result.empty();
$.ajax({
url : "/ajaxTest7.do",
type : "get",
dataType : "json",
success : function(data){
console.log(data);
for(let i=0; i<data.length; i++){
const div = $("<div></div>");
div.append(data[i].memberId);
div.append("/");
div.append(data[i].memberName);
div.append("/");
div.append(data[i].memberPhone);
div.append("/");
div.append(data[i].memberAddr);
result.append(div);
}
},
error : function(){
console.log("서버 호출 실패");
}
});
});
</script>
<%@include file="/WEB-INF/views/common/footer.jsp" %>
</body>
</html>
Servlet
ajax.jsp 이동 서블릿
package kr.or.iei.ajax.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class AjaxServlet
*/
@WebServlet(name = "Ajax", urlPatterns = { "/ajax.do" })
public class AjaxServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//페이지 이동만 해주는 서블릿
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
//4. 결과처리
RequestDispatcher view = request.getRequestDispatcher("/WEB-INF/views/etc/ajax.jsp");
view.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
1. 서버호출
package kr.or.iei.ajax.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class AjaxTest1Servlet
*/
@WebServlet(name = "AjaxTest1", urlPatterns = { "/ajaxTest1.do" })
public class AjaxTest1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxTest1Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("서버호출완료!");;
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
2. 서버로 값 전송
package kr.or.iei.ajax.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class AjaxTest2Servlet
*/
@WebServlet(name = "AjaxTest2", urlPatterns = { "/ajaxTest2.do" })
public class AjaxTest2Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxTest2Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
String data = request.getParameter("input1"); //{input1 : inputValue }객체 key(input1)값이 들어감
System.out.println(data);
//3. 비즈니스로직
//4. 결과처리
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
3. 서버로 데이터 전송하고 서버에서 데이터받기(기본데이터 받기)
package kr.or.iei.ajax.controller;
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;
/**
* Servlet implementation class AjaxTest3Servlet
*/
@WebServlet(name = "AjaxTest3", urlPatterns = { "/ajaxTest3.do" })
public class AjaxTest3Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxTest3Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
int su1 = Integer.parseInt(request.getParameter("su1"));
int su2 = Integer.parseInt(request.getParameter("su2"));
//3. 비즈니스로직
int result3 = (su1 + su2);
System.out.println(result3);
//4. 결과처리
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print(result3); //이걸통해 데이터를 되돌려줌
//되돌아 갔다는 건 성공을 했다는것 -> ajax의 성공함수의 매개변수로 되돌아간다.
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
4. 서버로 데이터 전송하고 서버에서 데이터받기(객체 받기)
package kr.or.iei.ajax.controller;
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 org.json.simple.JSONObject;
import kr.or.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class AjaxTest4Servlet
*/
@WebServlet(name = "AjaxTest4", urlPatterns = { "/ajaxTest4.do" })
public class AjaxTest4Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxTest4Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
String memberId = request.getParameter("memberId");
//3. 비즈니스로직
MemberService service = new MemberService();
Member m = service.selectOneMember(memberId);
//자바객체 Member를 ajax.jsp에 그대로 넘겨도 인식X
//자바객체를 자바스크립트에서 인식할 수 있게 변환해주는 방법 - - XML, CSV, JSON
//XML : <memberId>admin</memberId> <memberPw>admin</memberPw> 데이터가 많으면 불필요한부분이 너무많음(태그많음)
//CSV : memberId, admin, memberPw, 1234 데이터를 많이 줄엿음 / 단점 : 표현의 한계점이있음(배열, 객체안의 객체등 구현이 안됨)
//JSON : JavaScriptObjectNations {key:value, key:value} 자료를 주고받을때 javascript모양으로 주고받자
// {memberId: admin, memberPw: 1234, arr[1,2,3,4]} 요즘 가장 많이 사용
//조회결과를 javascript가 인식할 수 있는 객체 형태로 변환(JSON방식) - json_simple-1.1.jar 사용
//HashMap<String, Object>라고 생각하면 된다 - 사용법도 거의 유사
JSONObject result = null;
if(m != null) {
result = new JSONObject();
result.put("memberNo", m.getMemberNo());
result.put("memberId", m.getMemberId());
result.put("memberPw", m.getMemberPw());
result.put("memberName", m.getMemberName());
result.put("memberPhone", m.getMemberPhone());
result.put("memberAddr", m.getMemberAddr());
result.put("memberLevel", m.getMemberLevel());
result.put("enrollDate", m.getEnrollDate());
//json lib가 {memberNo : '1', memberId : 'admin'}으로 만들어서 넘겨준다
//단, 데이터가 갈때는 문자열로 가기때문에 json객체라는걸 알려주는 작업을 해줘야한다.
}
System.out.println(m);
//4. 결과처리
response.setCharacterEncoding("utf-8");
//response.setContentType("application/json"); //json타입이라고 알려주지않으면 브라우저는 String으로 인식
//여기말고 AJAX함수에서도 작성가능. ajax내부에 dataType: "JSON" 으로 선언해주면된다
//둘중 한군데에는 있어야함
PrintWriter out = response.getWriter();
out.println(result);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
5. 서버에서 리스트 데이터 받기(배열타입 받기)
package kr.or.iei.ajax.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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 org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import kr.or.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class AjaxTest5Servlet
*/
@WebServlet(name = "AjaxTest5", urlPatterns = { "/ajaxTest5.do" })
public class AjaxTest5Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxTest5Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
MemberService service = new MemberService();
ArrayList<Member> list = service.selectAllMember();
JSONArray memberList = new JSONArray();
if(!list.isEmpty()) {
//리스트가 비어있지 않으면
for(Member m : list) {
JSONObject obj = new JSONObject();
obj.put("memberId", m.getMemberId());
obj.put("memberName", m.getMemberName());
obj.put("memberPhone", m.getMemberPhone());
obj.put("memberAddr", m.getMemberAddr());
memberList.add(obj); //자바스크립트에서는 배열도 OBJECT처리가 된다
}
}
//4. 결과처리
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//out.println(list); 배열에는 key값이 정해져있기 때문에 불가능 -> JSONArray()사용
out.println(memberList);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
6. 서버로 데이터를 전송하고 서버에서 데이터받기(GSON)
package kr.or.iei.ajax.controller;
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.Gson;
import kr.or.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class AjaxTest6Servlet
*/
@WebServlet(name = "AjaxTest6", urlPatterns = { "/ajaxTest6.do" })
public class AjaxTest6Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxTest6Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
String memberId = request.getParameter("memberId");
//3. 비즈니스로직
MemberService service = new MemberService();
Member m = service.selectOneMember(memberId);
//4. 결과처리
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//out.pring(m) 이 안되는 이유 : 자바객체를 그대로 줘봤자 자바스크립트에서 사용X -> JSON을 이용해서 자바스크립트에서 사용할수 있는 형태({키:value})로 변환시켜줌
//단, 필요한 값이 많으면 해야할 작업이 너무 복잡하고 길어진다.
//-> 이런 귀찮은 작업을 google에서 gson을 통해 처리하게 만들어줌
//gson을 통해서 m을 되돌려주기
Gson gson = new Gson();
gson.toJson(m, out);//4번에서 했던 모든작업을 gson이 대신해준다
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
7. 서버에서 데이터 리스트 받기(GSON)
package kr.or.iei.ajax.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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.iei.member.model.service.MemberService;
import kr.or.iei.member.model.vo.Member;
/**
* Servlet implementation class AjaxTest7Servlet
*/
@WebServlet(name = "AjaxTest7", urlPatterns = { "/ajaxTest7.do" })
public class AjaxTest7Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxTest7Servlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 인코딩
request.setCharacterEncoding("utf-8");
//2. 값추출
//3. 비즈니스로직
MemberService service = new MemberService();
ArrayList<Member> list = service.selectAllMember();
//4. 결과처리
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
Gson gson = new Gson();
gson.toJson(list, out);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
'국비수업 > Server' 카테고리의 다른 글
61일차 : Editor, GitHub (0) | 2023.02.23 |
---|---|
60일차 : mvc2WebProject - 6 ( API ) (0) | 2023.02.22 |
58일차 - mvc2WebProject - 5 (0) | 2023.02.21 |
57일차 : mvc2WebProject - 4 (0) | 2023.02.19 |
56일차 : mvc2WebProject - 3 (0) | 2023.02.16 |
Comments