package kr.bit.frontcontroller;
import java.util.HashMap;
import kr.bit.controller.Controller;
import kr.bit.controller.*;
public class HandlerMapping {
private HashMap<String, Controller> mappings;
public HandlerMapping() {
mappings=new HashMap<String, Controller>();
mappings.put("/memberList.do", new MemberListController());
mappings.put("/memberInsert.do", new MemberInsertController());
mappings.put("/memberRegister.do", new MemberRegisterController());
mappings.put("/memberContent.do", new MemberContentController());
mappings.put("/memberUpdate.do", new MemberUpdateController());
mappings.put("/memberDelete.do", new MemberDeleteController());
mappings.put("/memberLogin.do", new MemberLoginController());
mappings.put("/memberLogout.do", new MemberLogoutController());
mappings.put("/memberDbcheck.do", new MemberDbcheckController());
mappings.put("/memberAjaxList.do", new MemberAjaxListController());
mappings.put("/memberAjaxDelete.do", new MemberAjaxDeleteController());
mappings.put("/fileAdd.do", new FileAddController());
mappings.put("/fileGet.do", new FileGetController());
mappings.put("/fileDel.do", new FileDelController());
}
public Controller getController(String key) { // key=>/memberList.do
return mappings.get(key);
}
}
## FileDelController 생성
프로젝트 > src > kr.bit.controller 우 클릭 > class > FileDelController 이름으로 생성
package kr.bit.controller;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.bit.model.MemberDAO;
public class FileDelController implements Controller {
@Override
public String requestHandler(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ctx = request.getContextPath();
String filename = request.getParameter("filename");
int num = Integer.parseInt(request.getParameter("num"));
filename = URLEncoder.encode(filename, "UTF-8");
filename = filename.replace("+", " ");
String UPLOAD_DIR = "file_repo";
String uploadPath = request.getServletContext().getRealPath("") + File.separator + UPLOAD_DIR;
File file = new File(uploadPath + "\\" + filename);
// 디렉터리에서 파일 삭제.
if (file.exists()) {
file.delete();
System.err.println("디렉터리에서 파일 삭제.");
}
// 테이블에서 파일 삭제(null 처리_update)
MemberDAO dao = new MemberDAO();
int cnt = dao.memberDeleteFile(num);
return "redirect:" + ctx + "/memberContent.do?num=" + num;
}
}
## MemmberDAO
// 테이블에서 파일 삭제(null 처리_update)
public int memberDeleteFile(int num) {
SqlSession session = sqlSessionFactory.openSession();
int cnt = session.update("memberDeleteFile", num);
session.commit(); // DB 내용이 수정되므로 commit을 해줘야 한다.
session.close(); // 연결 종료(반납)
return cnt;
}
## MemberMapper
<!-- 테이블에서 파일 삭제(null 처리_update) -->
<update id="memberDeleteFile" parameterType="Integer">
UPDATE member1
SET filename = ''
WHERE num = #{num}
</update>
// 회원 수정하기(파일정보 포함)
public int memberUpdateFile(MemberVO vo) {
SqlSession session = sqlSessionFactory.openSession();
int cnt = session.update("memberUpdateFile", vo);
session.commit(); // DB 내용이 수정되므로 commit을 해줘야 한다.
session.close(); // 연결 종료(반납)
return cnt;
}
## MembmerMapper
<!-- 회원 정보 수정(파일정보 포함) -->
<update id="memberUpdateFile" parameterType="memberVO">
UPDATE member1
SET age = #{age}, email = #{email}, phone = #{phone}, filename = #{filename} where num = #{num}
</update>
#MVC07_14 정리
1. 회원 리스트_초기 진입 화면 : http://localhost:8081/MVC07/memberList.do
package kr.bit.frontcontroller;
import java.util.HashMap;
import kr.bit.controller.Controller;
import kr.bit.controller.*;
public class HandlerMapping {
private HashMap<String, Controller> mappings;
public HandlerMapping() {
mappings=new HashMap<String, Controller>();
mappings.put("/memberList.do", new MemberListController());
mappings.put("/memberInsert.do", new MemberInsertController());
mappings.put("/memberRegister.do", new MemberRegisterController());
mappings.put("/memberContent.do", new MemberContentController());
mappings.put("/memberUpdate.do", new MemberUpdateController());
mappings.put("/memberDelete.do", new MemberDeleteController());
mappings.put("/memberLogin.do", new MemberLoginController());
mappings.put("/memberLogout.do", new MemberLogoutController());
mappings.put("/memberDbcheck.do", new MemberDbcheckController());
mappings.put("/memberAjaxList.do", new MemberAjaxListController());
mappings.put("/memberAjaxDelete.do", new MemberAjaxDeleteController());
mappings.put("/fileAdd.do", new FileAddController());
mappings.put("/fileGet.do", new FileGetController());
}
public Controller getController(String key) { // key=>/memberList.do
return mappings.get(key);
}
}
3. FileGetController 생성
프로젝트 > src > kr.bit.controller 우 클릭 > class > FileGetController 이름으로 생성
$.ajax 로 파일 업로드 시 processData 와 contentType의 값을 false로 줘야 한다.
function add2() {
if ( $("#file").val() != '' ) { // 파일 첨부된 경우
var formData = new FormData();
formData.append("file", $("input[name=file]")[0].files[0]);
$.ajax({
url : "<c:url value='/fileAdd.do'/>", // 파일 업로드 컨트롤러
type : "post",
data : formData,
processData : false,
contentType : false,
success : function (data) { // 업로드 된 실제파일 이름을 전달 받기
$('#filename').val(data);
document.form1.action="<c:url value='/memberInsert.do'/>"; // text 데이터 저장하는 부분
document.form1.submit();
},
error : function () {alert("error");}
});
} else { // 파일 첨부 되지 않은 경우.
}
}
파일 insert 하기위한 신규 테이블 생성
create table member1(
num int primary key auto_increment,
id varchar(20) not null,
pass varchar(20) not null,
name varchar(30) not null,
age int not null,
email varchar(30) not null,
phone varchar(30) not null,
filename varchar(100),
unique key(id)
);
#MVC07_08 Ajax를 이용한 파일 업로드
## HandlerMapping
fileAdd.do 관련 추가.
package kr.bit.frontcontroller;
import java.util.HashMap;
import kr.bit.controller.Controller;
import kr.bit.controller.*;
public class HandlerMapping {
private HashMap<String, Controller> mappings;
public HandlerMapping() {
mappings=new HashMap<String, Controller>();
mappings.put("/memberList.do", new MemberListController());
mappings.put("/memberInsert.do", new MemberInsertController());
mappings.put("/memberRegister.do", new MemberRegisterController());
mappings.put("/memberContent.do", new MemberContentController());
mappings.put("/memberUpdate.do", new MemberUpdateController());
mappings.put("/memberDelete.do", new MemberDeleteController());
mappings.put("/memberLogin.do", new MemberLoginController());
mappings.put("/memberLogout.do", new MemberLogoutController());
mappings.put("/memberDbcheck.do", new MemberDbcheckController());
mappings.put("/memberAjaxList.do", new MemberAjaxListController());
mappings.put("/memberAjaxDelete.do", new MemberAjaxDeleteController());
mappings.put("/fileAdd.do", new FileAddController());
}
public Controller getController(String key) { // key=>/memberList.do
return mappings.get(key);
}
}
프로젝트 > src > kr.bit.controller 우 클릭 > New > class > FileAddController 이름으로 생성
File.separator : 운영체제에 맞게 구분자 ( // , \\ , / ) 를 설정하기 위함.
request.getServletContext().getRealPath("") + File.separator + UPLOAD_DIR; : 실제 경로를 갖고오기 위함.
File currentDirPath = new File(uploadPath); : 업로드 할 경로를 파일 객체로 만들기.
package kr.bit.controller;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileAddController implements Controller {
@Override
public String requestHandler(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String UPLOAD_DIR = "file_repo";
// UPLOAD_DIR의 실제 경로 가져오는 것.
String uploadPath = request.getServletContext().getRealPath("") + File.separator + UPLOAD_DIR;
File currentDirPath = new File(uploadPath); // 업로드할 경로를 File 객체로 만들기
if ( !currentDirPath.exists() ) { // 해당 경로에 파일 없을 경우.
currentDirPath.mkdir();
}
// 파일을 업로드 할 때 먼저 저장될 임시 저장경로 설정
// 파일 업로드 시 필요한 API - commons-fileupload, commons-io
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(currentDirPath);
factory.setSizeThreshold(1024*1024); // 파일 용량 지정
String fileName = null;
ServletFileUpload upload = new ServletFileUpload(factory);
try { // items에 parseRequest로 얻어온 파일 존재. --> FileItem[], FileItem[], FileItem[], ..
List<FileItem> items = upload.parseRequest(request); // request 안에 여러개의 파일이 업로드 된 경우.
for ( int i = 0; i < items.size(); i ++ ) {
FileItem fileItem = (FileItem)items.get(i);
if ( fileItem.isFormField() ) { // 폼 필드이면 이름, 값만 출력
System.out.println(fileItem.getFieldName() + " = " + fileItem.getString("utf-8"));
} else { // 파일인 경우 업로드.
if ( fileItem.getSize() > 0 ) { // 정상 파일 인 경우.
int idx = fileItem.getName().lastIndexOf("\\"); // \\(Windows일때). /(Linux)
if ( idx == -1 ) {
idx = fileItem.getName().lastIndexOf("/");
}
fileName = fileItem.getName().substring(idx + 1); // 파일 이름.
File uploadFile = new File(currentDirPath + "\\" + fileName);
// 파일 중복체크
if ( uploadFile.exists() ) { // 파일 이름 중복인 경우
fileName = System.currentTimeMillis() + "_" + fileName;
uploadFile = new File(currentDirPath + "\\" + fileName);
}
// 임시 경로에서 -> 새로운 경로에 파일 쓰기
fileItem.write(uploadFile);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
// $.ajax() 쪽으로 업로드 된 최종 파일 이름을 전송.
response.setContentType("text/html; charset=euc-kr");
response.getWriter().print(fileName);
return null;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<script type="text/javascript">
function add() {
// form의 데이터 유효성 체크
document.form1.action="<c:url value='/memberInsert.do'/>";
document.form1.submit();
}
function add2() {
if ( $("#file").val() != '' ) { // 파일 첨부된 경우
var formData = new FormData();
formData.append("file", $("input[name=file]")[0].files[0]);
$.ajax({
url : "<c:url value='/fileAdd.do'/>", // 파일 업로드 컨트롤러
type : "post",
data : formData,
processData : false,
contentType : false,
success : function (data) { // 업로드 된 실제파일 이름을 전달 받기
$('#filename').val(data);
document.form1.action="<c:url value='/memberInsert.do'/>?mode=fadd"; // text 데이터 저장하는 부분
document.form1.submit();
},
error : function () {alert("error");}
});
} else { // 파일 첨부 되지 않은 경우.
document.form1.action="<c:url value='/memberInsert.do'/>?mode=add"; // text 데이터 저장하는 부분
document.form1.submit();
}
}
function frmreset() {
document.form1.reset();
}
// 아이디 중복체크 버튼 클릭 시 실행
function doubleCheck() {
if ( $("#id").val()=='' ) {
alert("아이디를 입력하세요.");
$("#id").focus();
return;
}
var id = $("#id").val();
$.ajax({
url : "<c:url value='/memberDbcheck.do'/>", // 서버 경로(요청 url)
type : "POST", // GET, POST
data : {"id" : id}, // 서버 요청 시 넘기는 값
success : dbCheck, // callback 함수
error : function() { // 실패 시.
alert("error");
}
});
}
// 아이디 중복체크 ajax 성공 시 실행.
function dbCheck(data) {
if ( data != "NO" ) {
alert("중복된 아이디 입니다.");
$("#id").focus();
} else {
alert("사용 가능한 아이디 입니다.");
$("#id").focus();
}
}
</script>
</head>
<body>
<div class="container">
<h2>회원가입 화면</h2>
<div class="panel panel-default">
<div class="panel-heading">
<c:if test="${sessionScope.userId != null && sessionScope != '' }">
<label>${sessionScope.userName}님이 로그인 하셨습니다.</label>
</c:if>
<c:if test="${sessionScope.userId == null || sessionScope == '' }">
<label>안녕하세요.</label>
</c:if>
</div>
<div class="panel-body">
<form id="form1" name="form1" class="form-horizontal" method="post">
<div class="form-group">
<label class="control-label col-sm-2" for="id">아이디:</label>
<div class="col-sm-10">
<table>
<tr>
<td>
<input type="text" class="form-control" id="id" name="id" placeholder="아이디를 입력하세요." >
</td>
<td>
<input type="button" class="btn btn-warning" value="중복체크" onclick="doubleCheck()"/>
</td>
</tr>
</table>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="pass">패스워드:</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="pass" name="pass" placeholder="비밀번호를 입력하세요." style="width:30%;">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="name">이름:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="name" name="name" placeholder="이름을 입력하세요." style="width:30%;">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="age">나이:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="age" name="age" placeholder="나이입력" style="width:12%;">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="email">이메일:</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="email" name="email" placeholder="이메일을 입력하세요." style="width:30%;">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="phone">전화번호:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="phone" name="phone" placeholder="전화번호를 입력하세요." style="width:30%;">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="">첨부파일:</label>
<div class="col-sm-10">
<input type="file" class="control-label" id="file" name="file" >
</div>
</div>
<input type="hidden" id="filename" name="filename" value="" />
</form>
</div>
<div class="panel-footer" style="text-align: center;">
<c:if test="${sessionScope.userId == null || sessionScope.userId == ''}">
<input type="button" value="등록" class='btn btn-primary' onclick="add2()"/>
</c:if>
<c:if test="${sessionScope.userId != null && sessionScope.userId != ''}">
<input type="button" value="등록" class='btn btn-primary' onclick="add()" disabled="disabled"/>
</c:if>
<input type="button" value="취소" class='btn btn-warning' onclick="frmreset()"/>
<input type="button" value="리스트" onclick="location.href='${ctx}/memberList.do'" class='btn'/>
</div>
</div>
</div>
</body>
</html>
### MemberVO
파일이름 추가.
package kr.bit.model;
//회원(Object)->MemberVO
public class MemberVO {
private int num;
private String id;
private String pass;
private String name;
private int age;
private String email;
private String phone;
private String filename;
public MemberVO() { }
public MemberVO(String id, String pass, String name, int age, String email, String phone) {
super();
this.id = id;
this.pass = pass;
this.name = name;
this.age = age;
this.email = email;
this.phone = phone;
}
public MemberVO(int num, String id, String pass, String name, int age, String email, String phone) {
super();
this.num = num;
this.id = id;
this.pass = pass;
this.name = name;
this.age = age;
this.email = email;
this.phone = phone;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
@Override
public String toString() {
return "MemberVO [num=" + num + ", id=" + id + ", pass=" + pass + ", name=" + name + ", age=" + age + ", email="
+ email + ", phone=" + phone + ", filename=" + filename + "]";
}
}
### MemberInsertController
?mode 에 따른 파일이름 받는 로직 추가.
package kr.bit.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.bit.model.MemberDAO;
import kr.bit.model.MemberVO;
public class MemberInsertController implements Controller{
@Override
public String requestHandler(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String ctx=request.getContextPath();
String id=request.getParameter("id");
String pass=request.getParameter("pass");
String name=request.getParameter("name");
int age=Integer.parseInt(request.getParameter("age")); // "40"->40
String email=request.getParameter("email");
String phone=request.getParameter("phone");
//파라메터수집(VO)
//MemberVO vo=new MemberVO(id, pass, name, age, email, phone);
MemberVO vo=new MemberVO();
// 파일 존재하는 경우만 파일 이름 추가.
if ( request.getParameter("mode").equals("fadd") ) {
String filename = request.getParameter("filename");
vo.setFilename(filename);
}
vo.setId(id);
vo.setPass(pass);
vo.setName(name);
vo.setAge(age);
vo.setEmail(email);
vo.setPhone(phone);
MemberDAO dao=new MemberDAO();
int cnt = -1;
// 파일 존재하는 경우
if ( request.getParameter("mode").equals("fadd") ) {
cnt = dao.memberInsertFile(vo); // 파일 이름을 저장해야 하는 경우.
} else {
cnt = dao.memberInsert(vo); // 파일 이름을 저장할 필요 없는 경우
}
//PrintWriter out=response.getWriter();
String nextPage=null;
if(cnt>0) {
// 가입성공
//out.println("insert success"); // 다시 회원리스트 보기로 가야된다.(/MVC03/memberList.do)
nextPage="redirect:"+ctx+"/memberList.do";
}else {
// 가입실패-> 예외객체를 만들어서 WAS에게 던지자.
throw new ServletException("not insert");
}
return nextPage;
}
}
### MemberDAO
파일 존재하는 경우 insert 추가
// 회원 가입 기능 (파일 업로드 한 경우)
public int memberInsertFile(MemberVO vo) {
SqlSession session = sqlSessionFactory.openSession();
int cnt = session.insert("memberInsertFile", vo);
session.commit(); // DB 내용이 수정되므로 commit을 해줘야 한다.
session.close(); // 연결 종료(반납)
return cnt;
}
### MemberMapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namerspace는 이름. -->
<mapper namespace="kr.bit.mybatis.MemberMapper">
<!-- 회원 리스트(전체) -->
<select id="memberList" resultType="memberVO">
SELECT *
FROM member1
</select>
<!-- 회원 가입 -->
<insert id="memberInsert" parameterType="memberVO">
INSERT INTO member1(id, pass, name, age, email, phone)
values(#{id}, #{pass}, #{name}, #{age}, #{email}, #{phone})
</insert>
<!-- 회원 가입 -->
<insert id="memberInsertFile" parameterType="memberVO">
INSERT INTO member1(id, pass, name, age, email, phone, filename)
values(#{id}, #{pass}, #{name}, #{age}, #{email}, #{phone}, #{filename})
</insert>
<!-- 회원 삭제 -->
<delete id="memberDelete" parameterType="Integer">
DELETE
FROM member1
WHERE num = #{num}
</delete>
<!-- 회원 상세보기 -->
<select id="memberContent" parameterType="Integer" resultType="memberVO">
SELECT *
FROM member1
WHERE num = #{num}
</select>
<!-- 회원 정보 수정 -->
<update id="memberUpdate" parameterType="memberVO">
UPDATE member1
SET age = #{age}, email = #{email}, phone = #{phone} where num = #{num}
</update>
<!-- 회원 로그인 -->
<select id="memberLogin" parameterType="memberVO" resultType="String">
SELECT name
FROM member1
WHERE id = #{id}
AND pass = #{pass}
</select>
<!-- 아이디 중복확인 -->
<select id="memberDbcheck" parameterType="memberVO" resultType="String">
SELECT id
FROM member1
WHERE id = #{id}
</select>
</mapper>
package kr.bit.frontcontroller;
import java.util.HashMap;
import kr.bit.controller.Controller;
import kr.bit.controller.*;
public class HandlerMapping {
private HashMap<String, Controller> mappings;
public HandlerMapping() {
mappings=new HashMap<String, Controller>();
mappings.put("/memberList.do", new MemberListController());
mappings.put("/memberInsert.do", new MemberInsertController());
mappings.put("/memberRegister.do", new MemberRegisterController());
mappings.put("/memberContent.do", new MemberContentController());
mappings.put("/memberUpdate.do", new MemberUpdateController());
mappings.put("/memberDelete.do", new MemberDeleteController());
mappings.put("/memberLogin.do", new MemberLoginController());
mappings.put("/memberLogout.do", new MemberLogoutController());
mappings.put("/memberDbcheck.do", new MemberDbcheckController());
mappings.put("/memberAjaxList.do", new MemberAjaxListController());
}
public Controller getController(String key) { // key=>/memberList.do
return mappings.get(key);
}
}
2. MemberAjaxListController 생성
프로젝트 > src > kr.bit.controller 우 클릭 > New > class 클릭 후 MemberAjaxListController 이름으로 생성
package kr.bit.frontcontroller;
import java.util.HashMap;
import kr.bit.controller.Controller;
import kr.bit.controller.*;
public class HandlerMapping {
private HashMap<String, Controller> mappings;
public HandlerMapping() {
mappings=new HashMap<String, Controller>();
mappings.put("/memberList.do", new MemberListController());
mappings.put("/memberInsert.do", new MemberInsertController());
mappings.put("/memberRegister.do", new MemberRegisterController());
mappings.put("/memberContent.do", new MemberContentController());
mappings.put("/memberUpdate.do", new MemberUpdateController());
mappings.put("/memberDelete.do", new MemberDeleteController());
mappings.put("/memberLogin.do", new MemberLoginController());
mappings.put("/memberLogout.do", new MemberLogoutController());
mappings.put("/memberDbcheck.do", new MemberDbcheckController());
mappings.put("/memberAjaxList.do", new MemberAjaxListController());
mappings.put("/memberAjaxDelete.do", new MemberAjaxDeleteController());
}
public Controller getController(String key) { // key=>/memberList.do
return mappings.get(key);
}
}
3. MemberAjaxDeleteController 생성
package kr.bit.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.bit.model.MemberDAO;
public class MemberAjaxDeleteController implements Controller {
@Override
public String requestHandler(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int num=Integer.parseInt(request.getParameter("num"));
MemberDAO dao=new MemberDAO();
int cnt=dao.memberDelete(num);
response.getWriter().print(cnt);
return null;
}
}
#MVC07_06 Ajax와 JSON
## ajax로 회원 리스트 출력 시
MemberAjaxListController에서 list에 담긴 회원리스트를 Gson 라이브러리를 이용해서 arrayList 를 json형태로 변형. 해당 데이터는 아래와 같은 형식으로 되어있다.