일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 배열
- 단축키
- servlet
- 컬렉션프레임워크
- ddit
- 맥
- Android
- crud
- 생활코딩
- FastAPI
- 자바문제
- JDBC
- 자바
- python
- Java
- nodejs
- Error
- 반복문
- 객체지향
- Homebrew
- Mac
- 이클립스
- jsp
- Oracle
- spring
- ibatis
- 대덕인재개발원
- html
- API
- pyqt
Archives
- Today
- Total
romworld
File upload 2 본문
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