romworld

File upload 2 본문

JAVA/개념정리

File upload 2

inderrom 2022. 12. 8. 14:32

MYMEMBER테이블에 'MEM_PHOTO' 컬럼 추가 후 작업

회원목록 출력(memberList)  ==> 회원추가버튼 클릭 ==> 회원추가 폼 (자료입력) ==>  저장버튼 클릭 ==> 회원정보 Insert ==> 회원목록 출력(memberList)로 이동

회원목록 출력(memberList)   ==> 회원ID 클릭 ==> 해당 회원의 상세정보 출력 ( 수정버튼과 삭제버튼이 있다.) 

회원상세정보 ==> 수정버튼 클릭 ==> 회원 수정 폼 출력 ( 자료 수정 )  ==> 저장버튼 클릭 ==> 회원 정보 Update ==> 회원목록 출력(memberList)로 이동

회원상세정보 ==>  삭제버튼 클릭 ==> 회원정보 delete ==>  회원목록 출력(memberList)로 이동

 

 

 

패키지 구조는 이렇다

 

MemberVO

package kr.or.ddit.member.vo;

public class MemberVO {

	private String mem_id   ;
	private String mem_pass ;
	private String mem_name ;
	private String mem_tel  ;
	private String mem_addr ;
	private String mem_photo;
	
	public MemberVO() {}
	
	
	
	
	public MemberVO(String mem_id, String mem_pass, String mem_name, String mem_tel, String mem_addr,
			String mem_photo) {
		super();
		this.mem_id = mem_id;
		this.mem_pass = mem_pass;
		this.mem_name = mem_name;
		this.mem_tel = mem_tel;
		this.mem_addr = mem_addr;
		this.mem_photo = mem_photo;
	}




	public String getMem_id() {
		return mem_id;
	}
	public void setMem_id(String mem_id) {
		this.mem_id = mem_id;
	}
	public String getMem_pass() {
		return mem_pass;
	}
	public void setMem_pass(String mem_pass) {
		this.mem_pass = mem_pass;
	}
	public String getMem_name() {
		return mem_name;
	}
	public void setMem_name(String mem_name) {
		this.mem_name = mem_name;
	}
	public String getMem_tel() {
		return mem_tel;
	}
	public void setMem_tel(String mem_tel) {
		this.mem_tel = mem_tel;
	}
	public String getMem_addr() {
		return mem_addr;
	}
	public void setMem_addr(String mem_addr) {
		this.mem_addr = mem_addr;
	}
	public String getMem_photo() {
		return mem_photo;
	}
	public void setMem_photo(String mem_photo) {
		this.mem_photo = mem_photo;
	}
}

 

DAO - IMemberDao(인터페이스)

package kr.or.ddit.member.dao;

import java.util.List;
import java.util.Map;

import kr.or.ddit.member.vo.MemberVO;

/**
 * 실제 DB와 연결해서 SQL문을 수행하여 결과를 작성해서
 * Service에게 전달하는 DAO의 interface<br><br>
 * 
 * 메서드 하나가 DB와 관련된 작업 1개를 수행하도록 작성한다.
 * 
 * @author SEM-PC
 *
 */

public interface IMemberDao {

	/**
	 * MemberVO객체에 담겨진 자료를 DB에 insert하는 메서드
	 * 
	 * @param memVo DB에 insert할 자료가 저장된 MemberVO객체
	 * @return 작업 성공 : 1, 작업 실패 : 0
	 */
	public int insertMember(MemberVO memVo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * 
	 * @param memId 삭제할 회원ID
	 * @return 작업 성공 : 1, 작업 실패 : 0
	 */
	public int deleteMember(String memId);
	
	/**
	 * MemberVO자료를 이용하여 DB에 update하는 메서드
	 * 
	 * @param memVo update할 회원 정보가 저장된 MemberVO객체
	 * @return 작업 성공 : 1, 작업 실패 : 0
	 */
	public int updateMember(MemberVO memVo);
	
	/**
	 * DB의 전체 회원 정보를 가져와서 List에 담아서 반환하는 메서드
	 * 
	 * @return MemberVO객체가 저장된 List객체
	 */
	public List<MemberVO> getAllMember();
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
	 * 
	 * @param memId 검색할 회원ID
	 * @return 검색된 회원ID의 개수
	 */
	public int getMemberCount(String memId);
	
	
	/**
	 * 회원ID와 패스워드가 저장된 MemberVO객체를 인수값으로 받아서
	 * 해당 조건에 맞는 회원정보를 검색해서 반환하는 메서드
	 * 
	 * @param memVo 검색할 회원정보가 저장된 MemberVO객체
	 * @return 검색 결과가 저장된 MemberVO객체
	 */
	public MemberVO getMember(String memId);
	
}

 

 

 

DAO- MemberDaoImpl

 

package kr.or.ddit.member.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.ibatis.sqlmap.client.SqlMapClient;

import kr.or.ddit.member.vo.MemberVO;
import kr.or.ddit.util.SqlMapClientFactory;

public class MemberDaoImpl implements IMemberDao {
	
	private SqlMapClient smc; // iBatis 처리용 객체 변수 선언
	
	// 1번
	private static MemberDaoImpl dao;
	
	// 2번 - 생성자
	private MemberDaoImpl() {
		smc = SqlMapClientFactory.getSqlMapClient();  // iBatis 처리용 객체 생성
	}
	
	// 3번
	public static MemberDaoImpl getInstance() {
		if(dao==null) dao = new MemberDaoImpl();
		
		return dao;
	}
	

	@Override
	public int insertMember(MemberVO memVo) {
		
		int cnt = 0;  // 반환값이 저장될 변수 선언
		
		try {
			Object obj = smc.insert("member.insertMember", memVo);
			if(obj==null) cnt = 1;
			
		} catch (SQLException e) {
			cnt = 0;
			e.printStackTrace();
		}
		
		return cnt;
	}

	@Override
	public int deleteMember(String memId) {
		
		int cnt = 0;
		
		try {
			cnt = smc.delete("member.deleteMember", memId);
		} catch (SQLException e) {
			cnt = 0;
			e.printStackTrace();
		}	
		
		return cnt;
	}

	@Override
	public int updateMember(MemberVO memVo) {
		
		int cnt = 0;
		
		try {
			cnt = smc.update("member.updateMember", memVo);
		} catch (SQLException e) {
			cnt = 0;
			e.printStackTrace();
		} 

		return cnt;
	}

	@Override
	public List<MemberVO> getAllMember() {
		
		List<MemberVO> memList = null;  // 반환값이 저장될 변수
		
		try {
			memList = smc.queryForList("member.getAllMember");
		} catch (SQLException e) {
			memList = null;
			e.printStackTrace();
		}
		
		return memList;
	}

	@Override
	public int getMemberCount(String memId) {
		int count = 0;
		try {
			count = (int) smc.queryForObject("member.getMemberCount", memId);
			
		} catch (SQLException e) {
			count = 0;
			e.printStackTrace();
		} 
		
		return count;
	}

	@Override
	public MemberVO getMember(String memId) {
		MemberVO loginMemberVo = null;
		try {
			loginMemberVo = (MemberVO) smc.queryForObject("member.getMember", memId);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return loginMemberVo;
	}

}

 

Service- IMemberService(인터페이스)

 

package kr.or.ddit.member.service;

import java.util.List;
import java.util.Map;

import kr.or.ddit.member.vo.MemberVO;

/**
 * Service객체는 DAO에 작성된 메서드를 원하는 작업에 맞게 호출하여 실행하고
 * 그 결과를 받아서 Controller에게 전달하는 역할을 한다.
 * 
 * 보통은 DAO의 메서드 구조와 같게 만든다.
 * 
 * @author SEM-PC
 *
 */
public interface IMemberService {
	
	/**
	 * MemberVO객체에 담겨진 자료를 DB에 insert하는 메서드
	 * 
	 * @param memVo DB에 insert할 자료가 저장된 MemberVO객체
	 * @return 작업 성공 : 1, 작업 실패 : 0
	 */
	public int insertMember(MemberVO memVo);
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원 정보를 삭제하는 메서드
	 * 
	 * @param memId 삭제할 회원ID
	 * @return 작업 성공 : 1, 작업 실패 : 0
	 */
	public int deleteMember(String memId);
	
	/**
	 * MemberVO자료를 이용하여 DB에 update하는 메서드
	 * 
	 * @param memVo update할 회원 정보가 저장된 MemberVO객체
	 * @return 작업 성공 : 1, 작업 실패 : 0
	 */
	public int updateMember(MemberVO memVo);
	
	/**
	 * DB의 전체 회원 정보를 가져와서 List에 담아서 반환하는 메서드
	 * 
	 * @return MemberVO객체가 저장된 List객체
	 */
	public List<MemberVO> getAllMember();
	
	/**
	 * 회원ID를 인수값으로 받아서 해당 회원ID의 개수를 반환하는 메서드
	 * 
	 * @param memId 검색할 회원ID
	 * @return 검색된 회원ID의 개수
	 */
	public int getMemberCount(String memId);
	
	/**
	 * 회원ID와 패스워드가 저장된 MemberVO객체를 인수값으로 받아서
	 * 해당 조건에 맞는 회원정보를 검색해서 반환하는 메서드
	 * 
	 * @param memVo 검색할 회원정보가 저장된 MemberVO객체
	 * @return 검색 결과가 저장된 MemberVO객체
	 */
	public MemberVO getMember(String memId);
	
}

 

Servcie - MemberServiceImpl

package kr.or.ddit.member.service;

import java.util.List;
import java.util.Map;

import kr.or.ddit.member.dao.IMemberDao;
import kr.or.ddit.member.dao.MemberDaoImpl;
import kr.or.ddit.member.vo.MemberVO;


public class MemberServiceImpl implements IMemberService {
	// 1번
	private static MemberServiceImpl service;
	
	private IMemberDao dao;		// DAO객체 변수 선언
	
	// 생성자 ==> 2번
//	public MemberServiceImpl() {
	private MemberServiceImpl() {
//		dao = new MemberDaoImpl();    // DAO객체 생성
		dao = MemberDaoImpl.getInstance(); // DAO객체 생성
	}
	
	// 3번
	public static MemberServiceImpl getInstance() {
		if(service==null) service = new MemberServiceImpl();
		
		return service;
	}

	@Override
	public int insertMember(MemberVO memVo) {
		return dao.insertMember(memVo);
	}

	@Override
	public int deleteMember(String memId) {
		return dao.deleteMember(memId);
	}

	@Override
	public int updateMember(MemberVO memVo) {
		return dao.updateMember(memVo);
	}

	@Override
	public List<MemberVO> getAllMember() {
		return dao.getAllMember();
	}

	@Override
	public int getMemberCount(String memId) {
		return dao.getMemberCount(memId);
	}

		@Override
	public MemberVO getMember(String memId) {
		return dao.getMember(memId);
	}

}

 

 

member-mapper

<?xml version="1.0" encoding="UTF-8"?>

<!-- 이 문서는 iBatis에서 처리할 SQL문을 작성하는 문서입니다. -->

<!DOCTYPE sqlMap
	PUBLIC "-//ibatis.apache.org/DTD SQL Map 2.0//EN"
	"http://ibatis.apache.org/dtd/sql-map-2.dtd">
	
<sqlMap namespace="member">

	<insert id="insertMember" parameterClass="memberVo">
		insert into mymember (mem_id, mem_pass, mem_name, mem_tel, mem_addr, mem_photo)	
		values (#mem_id#, #mem_pass#, #mem_name#, #mem_tel#, #mem_addr#,#mem_photo#)
	</insert>

	<delete id="deleteMember" parameterClass="string">
		delete from mymember where mem_id = #mem_id#
	</delete>
	
	<update id="updateMember" parameterClass="memberVo">
		update mymember set mem_pass = #mem_pass#, mem_name = #mem_name#, mem_tel = #mem_tel#, 
		mem_addr = #mem_addr# ,mem_photo=#mem_photo# where mem_id = #mem_id# 
	</update>

	<select id="getAllMember" resultClass="memberVo">
		select * from mymember
	</select>
	
	<select id="getMemberCount" parameterClass="string" resultClass="int">
		select count(*) cnt from mymember where mem_id =#mem_id#
	</select>
	
	
	<select id="getMember" parameterClass="String" resultClass="memberVo">
		select * from mymember where mem_id=#mem_id#
	</select>
		

</sqlMap>

 

 

index.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>
</head>
<body>

<a href="<%=request.getContextPath() %>/member/memberList.do">회원 목록 보기</a>
<!--/member/memberList.do" 서블릿이 오면 앞에 멤버가 폴더가 아니라 서블릿이 매핑된 주소다..    -->
</body>
</html>

 

 

MemberList (서블릿)

package kr.or.ddit.member.controller;

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 kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;


@WebServlet("/member/memberList.do")
public class MemberList extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		IMemberService service = MemberServiceImpl.getInstance();
		List<MemberVO> memList = service.getAllMember();
		
		request.setAttribute("memberList", memList);
		
		request.getRequestDispatcher("/WEB-INF/view/member/memberList.jsp")
		.forward(request, response);
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

 

memberList.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@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>
<style type="text/css">
	table, tr, td { border:1px solid blue; }
	td { padding:5px;}
</style>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-3.6.1.min.js"></script>

<script type="text/javascript">

$(function(){
	$("#addBtn").on("click", function(){
		location.href = "<%=request.getContextPath()%>/member/memberInsert.do";
	});
});
	

</script>
</head>
<body>
<%
	List<MemberVO> memList = (List<MemberVO>)request.getAttribute("memberList");
%>
<h2>회원 목록 보기</h2>	
<table border="1">
	<thead>
		<tr>
			<td colspan="5" style="text-align:right;"><input type="button" id="addBtn" value="회원추가"></td>
		</tr>
		<tr>
			<th>ID</th>
			<th>비밀번호</th>
			<th>이 름</th>
			<th>전 화</th>
			<th>주 소</th>
		</tr>
	</thead>
	<tbody>
<%
	for(MemberVO memvo : memList){
%>
		<tr>
			<td><a href="<%=request.getContextPath()%>/member/memberView.do?mem_id=<%=memvo.getMem_id()%>"><%=memvo.getMem_id() %></a></td>
			<td><%=memvo.getMem_pass() %></td>
			<td><%=memvo.getMem_name() %></td>
			<td><%=memvo.getMem_tel() %></td>
			<td><%=memvo.getMem_addr() %></td>
		</tr>
<%
	}
%>
	</tbody>	

</table>
</body>
</html>

 

 

MemberInsert (서블릿) (회원추가)

package kr.or.ddit.member.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;

@WebServlet("/member/memberInsert.do")
@MultipartConfig 		// 파일 업로드 처리용 (프로필 사진 업로드)
public class MemberInsert extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// GET방식으로 요청할 때는 회원 입력 폼이 나타나도록 구현한다.
		request.getRequestDispatcher("/WEB-INF/view/member/memberForm.jsp").forward(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// POST방식으로 요청할 때는 입력한 회원 정보를 받아서 프로필 사진을 저장하고
		// 회원 정보는 DB에 저장하는 기능을 구현한다.
		
		// 사용자가 업로드한 파일이 저장될 서보쪽의 폴더 경로 설정
		String uploadPath ="/d:/d_other/uploadFiles";
		//String uploadPath ="/Users/rom/Desktop/uploadFiles";
		
		// 저장될 폴더가 없으면 폴더를 만들어 준다.
		File uploadDir = new File(uploadPath);
		if(!uploadDir.exists()) {
			uploadDir.mkdirs();
		}
		
		request.setCharacterEncoding("utf-8");
		
		// 회원 정보를 받는다.
		String memId = request.getParameter("mem_id");
		String memPass = request.getParameter("mem_pass");
		String memName = request.getParameter("mem_name");
		String memTel = request.getParameter("mem_tel");
		String memAddr = request.getParameter("mem_addr");
		
		// 받아온 회원 정보를 VO에 저장한다.
		MemberVO memVo = new MemberVO();
		memVo.setMem_id(memId);
		memVo.setMem_pass(memPass);
		memVo.setMem_name(memName);
		memVo.setMem_tel(memTel);
		memVo.setMem_addr(memAddr);
		
		// form의 file입력요소의 name값은 Part객체의 이름역할을 한다.
		// 이 이름을 이용하여 Part객체를 구한다.
		Part part = request.getPart("mem_photo");
		
		if(part!=null) {
			String fileName = extractFilename(part);
			
			if(!"".equals(fileName)) {
				try {
					part.write(uploadPath + File.separator + fileName);
					memVo.setMem_photo(fileName);  // DB에 저장할 파일명을 VO객체에 저장
					
				} catch (Exception e) {
					memVo.setMem_photo(null); 	// 프로필 사진이 오류가 생기면...
				}
			}
		}
		
		// 회원 정보를 DB에 insert한다.
		IMemberService service = MemberServiceImpl.getInstance();
		int cnt = service.insertMember(memVo);
		
		// 작업이 완료되면 List페이지로 이동
		response.sendRedirect(request.getContextPath() + "/member/memberList.do");
		
	}
	
	private String extractFilename(Part part) {
		String fileName = "";
		
		String contentDisposition = part.getHeader("content-disposition");
		String[] items = contentDisposition.split(";");
		for(String item : items) {
			if(item.trim().startsWith("filename")) {	// filename="test1.txt"
				fileName = item.substring(item.indexOf("=")+2, item.length()-1);
				
			}
		}
		
		return fileName;
	}
	
}

 

 

memberForm.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>

<style type="text/css">
	table, tr, td { border:1px solid blue; border-collapse: collapse; }
	td { padding:5px;}
</style>

<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-3.6.1.min.js"></script>

<script type="text/javascript">

$(function(){
	$("#btnList").on("click", function(){
		location.href="<%=request.getContextPath()%>/member/memberList.do";
	});
	
	$("#idCheck").on("click", function(){
		var memId = $("#mem_id").val();
		if(memId==""){
			alert("ID를 입력하세요");
			return;
		}
		
		$.ajax({
	    	 url : '<%=request.getContextPath()%>/member/memberIdCheck.do',
	    	 data : { "mem_id" : memId },
	    	 dataType : 'json',
	    	 success : function(result){
	    		 if(result=="OK"){
	    			 $("#idChkResult").html("사용가능");
	    		 }else{
	    			 $("#idChkResult").html("ID 중복 - 사용불가");
	    		 }
	    	 },
	    	 error : function(xhr){
	    		 alert("status :" + xhr.status);
	    	 }
	     })
	});
	
	$("#memberForm").on("submit", function(){
		var idchk = $("#idChkResult").html();
		
		if(idchk!="사용가능"){
			alert("ID 중복되거나 중복체크를 하지 않았습니다.");
			return false;  // 전송 중단.
		}
		
		if($("#mem_pass").val()=="" || $("#mem_pass").val()!= $("#mem_pass2").val()){
			alert("비밀번호와 비밀번호 확인이 다릅니다. 다시 확인하세요.");
			return false;   // 서버로 전송을 하지 않는다.
		}
		
		return true;
	});
});

</script>
</head>

<body>
<h2>회원 정보 입력 폼</h2>
<form id="memberForm" method="post" enctype="multipart/form-data"
	action="<%=request.getContextPath()%>/member/memberInsert.do" >
<table border="1">
<tbody>
	<tr>
		<td>회원ID</td>
		<td>
			<input type="text" name="mem_id" id="mem_id">
			<input id="idCheck" type="button" value="중복확인"><br>
			<span id="idChkResult"></span>
		</td>
	</tr>
	<tr>
		<td>비밀번호</td>
		<td><input type="password" name="mem_pass" id="mem_pass"></td>
	</tr>
	<tr>
		<td>비밀번호 확인</td>
		<td><input type="password" name="mem_pass2" id="mem_pass2"></td>
	</tr>	
	<tr>
		<td>회원이름</td>
		<td><input type="text" name="mem_name"></td>
	</tr>
	<tr>
		<td>전화번호</td>
		<td><input type="text" name="mem_tel"></td>
	</tr>
	<tr>
		<td>회원주소</td>
		<td><input type="text" name="mem_addr"></td>
	</tr>
	<tr>
		<td>프로필 사진</td>
		<td><input type="file" name="mem_photo"></td>
	</tr>
	<tr>
		<td colspan="2" style="text-align:center;">
			<input type="submit" value="저장"> <input type="reset" value="취소">
			<input type="button" id="btnList" value="회원목록"></td>
	</tr>
</tbody>
</table>
</form>
</body>
</html>

 

 

MemberIdCheck(서블릿)

package kr.or.ddit.member.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;

import com.google.gson.Gson;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;


@WebServlet("/member/memberIdCheck.do")
public class MemberIdCheck 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");
		
		// 검색할 회원 ID를 받는다.
		String memId = request.getParameter("mem_id");
		
		IMemberService service = MemberServiceImpl.getInstance();
		int cnt = service.getMemberCount(memId);
		
		Gson gson = new Gson();
		String result = null; // 결과가 JSON으로 저장될 변수
		
		if(cnt > 0) { //회원 ID가 중복
			result = gson.toJson("Fail");
		}else { // 회원ID가 중복되지 않음
			result = gson.toJson("OK");
		}
		
		response.getWriter().write(result);
		response.flushBuffer();
	
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

 

 

MemberView (서블릿) - 상세보기로 이동

package kr.or.ddit.member.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;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;

@WebServlet("/member/memberView.do")
public class MemberView extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		
		String memId = request.getParameter("mem_id");
		
		IMemberService service = MemberServiceImpl.getInstance();
		
		MemberVO memVo = service.getMember(memId);
		
		request.setAttribute("memberVo", memVo);
		
		request.getRequestDispatcher("/WEB-INF/view/member/memberView.jsp").forward(request, response);
	
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

 

 

MemberView.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@ 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 type="text/css">
	table, tr, td { border:1px solid blue; border-collapse: collapse; }
	td { padding:5px;}
</style>
<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-3.6.1.min.js"></script>

<script type="text/javascript">

$(function(){
	
	$("#btnUpdate").on("click", function(){
		var form = document.getElementById("memberForm");
		form.method = "GET";
		form.action = "<%=request.getContextPath()%>/member/memberUpdate.do";
		form.submit();
	});
	
	$("#btnDelete").on("click", function(){
		var form = document.getElementById("memberForm");
		form.action = "<%=request.getContextPath()%>/member/memberDelete.do";
		form.submit();
	});
	
	$("#btnList").on("click", function(){
		location.href = "<%=request.getContextPath()%>/member/memberList.do"; 
		<!-- sendRedirect와 비슷한 역할 -->
	});
	
});

</script>
</head>
<body>
<% 	MemberVO memVo = (MemberVO)request.getAttribute("memberVo"); %>
<h2>회원 정보 상세보기</h2>
<form name="memberForm" id="memberForm" >
	<input type="hidden" id="mem_id" name="mem_id" value="<%=memVo.getMem_id()%>">
<table border="1">
<tbody>
	<tr>
		<td colspan="2" style="text-align:center;"><img src="<%=request.getContextPath() %>/images/imageView.do?memID=<%=memVo.getMem_id() %>" width="200" height="140"></td>
	</tr>
	<tr>
		<td>회원ID</td><td><%=memVo.getMem_id()%></td>
	</tr>
	<tr>
		<td>비밀번호</td><td><%=memVo.getMem_pass()%></td>
	</tr>
	<tr>
		<td>회원이름</td><td><%=memVo.getMem_name()%></td>
	</tr>
	<tr>
		<td>전화번호</td><td><%=memVo.getMem_tel()%></td>
	</tr>
	<tr>
		<td>회원주소</td><td><%=memVo.getMem_addr()%></td>
	</tr>
	<tr>
		<td colspan="2" style="text-align:center;">
			<input id="btnUpdate" type="button" value="수정"> 
			<input id="btnDelete" type="button" value="삭제"> 
			<input type="button" id="btnList" value="회원목록"></td>
	</tr>
</tbody>
</table>
</form></body></html>

 

ImageView (프로필 사진)

package kr.or.ddit.member.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
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;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;


@WebServlet("/images/imageView.do")
public class ImageView extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		
		// 파라미터로 넘어온 회원ID를 받는다.
		String memId = request.getParameter("memID");
		
		
		IMemberService service = MemberServiceImpl.getInstance();
		MemberVO memVo = service.getMember(memId);
		
		String imageFile =  memVo.getMem_photo(); 
		if(imageFile ==null) imageFile = "noImage.png"; // 프로필 이미지 없는 사람은 이 사진으로 통일돼서 나온다
		// 이미지가 저장된 폴더 설정
		String filepath = "d:/d_other/uploadFiles";
		File file = new File(filepath, imageFile);
		
		BufferedInputStream bin = null;
		BufferedOutputStream bout = null;
		if(file.exists()) {	// 이미지 파일이 있을 때...
			try {
				// 출력용 스트림
				bout = new BufferedOutputStream(response.getOutputStream());
				
				// 파일 입력용 스트림
				bin = new BufferedInputStream(new FileInputStream(file));
				
				byte[] temp = new byte[1024];
				int len = 0;
				
				while( (len = bin.read(temp)) > 0) {
					bout.write(temp, 0, len);
				}
				bout.flush();
				
				
			} catch (Exception e) {
				System.out.println("입출력 오류 : " + e.getMessage());
			} finally {
				if(bin!=null) try { bin.close(); }catch(IOException e) {}
				if(bout!=null) try { bout.close(); }catch(IOException e) {}
			}
		}
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

 

MemberUpdate(서블릿) - 수정

package kr.or.ddit.member.controller;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;
import kr.or.ddit.member.vo.MemberVO;


@WebServlet("/member/memberUpdate.do")
@MultipartConfig // 파일 있을 때 이걸 빼먹으면 안됨!
public class MemberUpdate extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 회원ID에 맞는 회원 정보를 검색해서 회원 정보 수정폼에 보낸다.
		
		request.setCharacterEncoding("utf-8");
		
		String memId = request.getParameter("mem_id");
		
		IMemberService service = MemberServiceImpl.getInstance();
		MemberVO memVo = service.getMember(memId);
		
		request.setAttribute("memberVo", memVo);
		request.getRequestDispatcher("/WEB-INF/view/member/memberUpdateForm.jsp")
		.forward(request, response);
		
	
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// POST방식으로 요청할 때는 수정한 회원 정보를 받아서 프로필 사진을 저장하고
		// DB의 회원 정보를 수정한다.
				
		// 사용자가 업로드한 파일이 저장될 서보쪽의 폴더 경로 설정
		String uploadPath ="/d:/d_other/uploadFiles";
		//String uploadPath ="/Users/rom/Desktop/uploadFiles";
				
		// 저장될 폴더가 없으면 폴더를 만들어 준다.
		File uploadDir = new File(uploadPath);
		if(!uploadDir.exists()) {
			uploadDir.mkdirs();
		}
				
		request.setCharacterEncoding("utf-8");
				
		// 회원 정보를 받는다.
		String memId = request.getParameter("mem_id");
		String memPass = request.getParameter("mem_pass");
		String memName = request.getParameter("mem_name");
		String memTel = request.getParameter("mem_tel");
		String memAddr = request.getParameter("mem_addr");
		String old_memPhto = request.getParameter("old_photo");
				
		// 받아온 회원 정보를 VO에 저장한다.
		MemberVO memVo = new MemberVO();
		memVo.setMem_id(memId);
		memVo.setMem_pass(memPass);
		memVo.setMem_name(memName);
		memVo.setMem_tel(memTel);
		memVo.setMem_addr(memAddr);
		memVo.setMem_photo(old_memPhto);     // 일단 이전 프로필 사진으로 셋팅한다
				
		// form의 file입력요소의 name값은 Part객체의 이름역할을 한다.
		// 이 이름을 이용하여 Part객체를 구한다.
		Part part = request.getPart("mem_photo");
				
		if(part!=null) {
			String fileName = extractFilename(part);
					
			if(!"".equals(fileName)) {
				try {
					part.write(uploadPath + File.separator + fileName);
					memVo.setMem_photo(fileName);  // DB에 저장할 파일명을 VO객체에 저장
							
				} catch (Exception e) {
				//	memVo.setMem_photo(null); 	// 프로필 사진이 오류가 생기면...
				}
			}
		}
				
		// 회원 정보를 DB에 insert한다.
		IMemberService service = MemberServiceImpl.getInstance();
		service.updateMember(memVo);
				
		// 작업이 완료되면 List페이지로 이동
		response.sendRedirect(request.getContextPath() + "/member/memberList.do");
		
	}

	
	private String extractFilename(Part part) {
		String fileName = "";
		
		String contentDisposition = part.getHeader("content-disposition");
		String[] items = contentDisposition.split(";");
		for(String item : items) {
			if(item.trim().startsWith("filename")) {	// filename="test1.txt"
				fileName = item.substring(item.indexOf("=")+2, item.length()-1);
				
			}
		}
		
		return fileName;
	}
	
}

 

 

memberUpdateForm.jsp

<%@page import="kr.or.ddit.member.vo.MemberVO"%>
<%@ 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 type="text/css">
	table, tr, td { border:1px solid blue; border-collapse: collapse; }
	td { padding:5px;}
</style>

<script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-3.6.1.min.js"></script>

<script type="text/javascript">

$(function(){
	
	$("#btnList").on("click", function(){
		location.href = "<%=request.getContextPath()%>/member/memberList.do";
	});
	
});


</script>
</head>
<body>
<%
	MemberVO memVo = (MemberVO)request.getAttribute("memberVo");
%>
<h2>회원 정보 수정 폼</h2>
<form action="<%=request.getContextPath()%>/member/memberUpdate.do" 
	  method="post" enctype="multipart/form-data">
	<input type="hidden" name="mem_id" value="<%=memVo.getMem_id()%>">
	<input type="hidden" name="old_photo" value="<%=memVo.getMem_photo() %>">
<table border="1">
<tbody>
	<tr>
		<td colspan="2" style="text-align:center;"><img src="<%=request.getContextPath() %>/images/imageView.do?memID=<%=memVo.getMem_id() %>" width="200" height="140"></td>
	</tr>
	<tr>
		<td>회원ID</td>
		<td><%=memVo.getMem_id()%></td>
	</tr>
	<tr>
		<td>비밀번호</td>
		<td><input type="password" name="mem_pass" value=""></td>
	</tr>
	<tr>
		<td>회원이름</td>
		<td><input type="text" name="mem_name" value="<%=memVo.getMem_name()%>"></td>
	</tr>
	<tr>
		<td>전화번호</td>
		<td><input type="text" name="mem_tel" value="<%=memVo.getMem_tel()%>"></td>
	</tr>
	<tr>
		<td>회원주소</td>
		<td><input type="text" name="mem_addr" value="<%=memVo.getMem_addr()%>"></td>
	</tr>
	<tr>
		<td>프로필 사진</td>
		<td><input type="file" name="mem_photo"></td>
	</tr>	
	<tr>
		<td colspan="2" style="text-align:center;">
			<input type="submit" value="저장">
		    <input type="reset" value="취소"> 
			<input type="button" id="btnList" value="회원목록"></td>
	</tr>
</tbody>
</table>
</form>
</body>
</html>

 

MemberDelete(서블릿) - 삭제

package kr.or.ddit.member.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;

import kr.or.ddit.member.service.IMemberService;
import kr.or.ddit.member.service.MemberServiceImpl;


@WebServlet("/member/memberDelete.do")
public class MemberDelete extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		
		String memId = request.getParameter("mem_id"); // hidden에 있는 name
		
		IMemberService service = MemberServiceImpl.getInstance();
		service.deleteMember(memId);
		
		response.sendRedirect(request.getContextPath() + "/member/memberList.do");
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

 

'JAVA > 개념정리' 카테고리의 다른 글

File Upload  (0) 2022.12.06
Ajax ( JSON)  (1) 2022.12.06
Session  (0) 2022.12.06
Cookie 2 ( login)  (0) 2022.12.06
Cookie  (0) 2022.12.06
Comments