Controller
package kr.or.ddit.controller.noticeboard.web;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import kr.or.ddit.ServiceResult;
import kr.or.ddit.controller.noticeboard.service.INoticeService;
import kr.or.ddit.vo.DDITMemberVO;
@Controller
@RequestMapping("/notice")
public class NoticeProfileController {
@Inject
private INoticeService noticeService;
**// 프로필로 이동 요청**
@RequestMapping(value="/profile.do", method = RequestMethod.GET)
public String noticeProfile(
HttpServletRequest req, RedirectAttributes ra, Model model
) {
String goPage = "";
HttpSession session = req.getSession();
DDITMemberVO sessionMember = (DDITMemberVO)session.getAttribute("SessionInfo");
if(sessionMember == null) {
ra.addFlashAttribute("message", "로그인 후 이용가능합니다");
return "redirect:/notice/login.do";
}
DDITMemberVO member = noticeService.selectMember(sessionMember);
if(member != null) {
model.addAttribute("member", member);
goPage = "notice/profile";
}else {
ra.addFlashAttribute("message", "로그인 후 이용가능합니다");
goPage = "redirect:/notice/login.do";
}
return goPage;
}
**// 프로필 수정하기 처리**
@RequestMapping(value="/profileUpdate.do", method = RequestMethod.POST)
public String noticeProfileUpload(
HttpServletRequest req,
DDITMemberVO memberVO, RedirectAttributes ra, Model model
) {
String goPage = "";
ServiceResult result = noticeService.profileUpdate(req, memberVO);
if(result.equals(ServiceResult.OK)) {
ra.addFlashAttribute("message", "회원정보 수정이 완료되었습니다");
goPage = "redirect:/notice/profile.do";
}else {
model.addAttribute("member", memberVO);
goPage = "notice/profile";
}
return goPage;
}
}
Service
package kr.or.ddit.controller.noticeboard.service;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.input.TaggedInputStream;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import kr.or.ddit.ServiceResult;
import kr.or.ddit.controller.noticeboard.web.TelegramSendController;
import kr.or.ddit.mapper.LoginMapper;
import kr.or.ddit.mapper.NoticeMapper;
import kr.or.ddit.mapper.ProfileMapper;
import kr.or.ddit.vo.DDITMemberVO;
import kr.or.ddit.vo.NoticeFileVO;
import kr.or.ddit.vo.NoticeVO;
import kr.or.ddit.vo.PaginationInfoVO;
@Service
public class NoticeServiceImpl implements INoticeService {
@Inject
private ProfileMapper profileMapper;
@Override
public DDITMemberVO selectMember(DDITMemberVO sessionMember) {
return profileMapper.selectMember(sessionMember);
}
@Override
public ServiceResult profileUpdate(HttpServletRequest req, DDITMemberVO memberVO) {
ServiceResult result = null;
// 사용자가 수정한 프로필 이미지 정보에 따라서 프로필 이미지 정보 값을 설정 후 memberVO에 셋팅해서 전달한다.
String uploadPath = req.getServletContext().getRealPath("/resources/profile");
File file = new File(uploadPath);
if(!file.exists()) {
file.mkdirs();
}
String proFileImg = "";
MultipartFile proFileImgFile = memberVO.getImgFile();
if(proFileImgFile.getOriginalFilename() != null && !proFileImgFile.getOriginalFilename().equals("")) {
String fileName = UUID.randomUUID().toString();
fileName += "_" + proFileImgFile.getOriginalFilename();
uploadPath += "/" + fileName;
try {
proFileImgFile.transferTo(new File(uploadPath));
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
} // 프로필 이미지 파일 복사
proFileImg = "/resources/profile/" + fileName;
}
// 선택한 프로필 이미지가 존재하지 않으면 "" 공백이 넘어가고
// 프로필 이미지가 존재하면 업로드 경로와 파일명으로 구성된 경로가 넘어간다.
memberVO.setMemProfileImg(proFileImg);
int status = profileMapper.profileUpdate(memberVO);
if(status > 0) {
result = ServiceResult.OK;
}else {
result = ServiceResult.FAILED;
}
return result;
}
}
Mapper
package kr.or.ddit.mapper;
import kr.or.ddit.vo.DDITMemberVO;
public interface ProfileMapper {
public DDITMemberVO selectMember(DDITMemberVO sessionMember);
public int profileUpdate(DDITMemberVO memberVO);
}
NoticeMapper (SQL)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.ProfileMapper">
**<!-- 프로필 정보 가져오기 쿼리 -->**
<select id="selectMember" parameterType="dditmemberVO" resultType="dditmemberVO">
select
mem_no, mem_id, mem_pw, mem_name,
mem_gender, mem_email, mem_phone,
mem_postcode, mem_address1, mem_address2,
mem_agree, mem_profileimg, mem_regdate
from dditmember
where mem_id = #{memId}
</select>
**<!-- 프로필 업데이트하는 쿼리 -->**
<update id="profileUpdate" parameterType="dditmemberVO">
update dditmember
set
mem_pw = #{memPw},
mem_name = #{memName},
mem_gender = #{memGender},
mem_email = #{memEmail},
mem_phone = #{memPhone},
mem_postcode = #{memPostCode},
mem_address1 = #{memAddress1},
mem_address2 = #{memAddress2}
<if test="memProfileImg != null and memProfileImg != ''">
, mem_profileimg = #{memProfileImg}
</if>
where mem_no = #{memNo}
</update>
</mapper>
JSP 페이지
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AdminLTE 3 | Simple Tables</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/plugins/fontawesome-free/css/all.min.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/dist/css/adminlte.min.css">
<script src="${pageContext.request.contextPath }/resources/plugins/jquery/jquery.min.js"></script>
<script src="${pageContext.request.contextPath }/resources/ckeditor/ckeditor.js"></script>
</head>
<c:if test="${not empty message }">
<script type="text/javascript">
alert("${message}");
<c:remove var="message" scope="request"/>
<c:remove var="message" scope="session"/>
</script>
</c:if>
<body class="hold-transition sidebar-mini">
<div class="wrapper">
<!-- header 영역 -->
<tiles:insertAttribute name="header"/>
<div class="content-wrapper">
<!-- content 영역 -->
<tiles:insertAttribute name="content"/>
</div>
<!-- footer 영역 -->
<tiles:insertAttribute name="footer"/>
<aside class="control-sidebar control-sidebar-dark">
</aside>
</div>
<script src="${pageContext.request.contextPath }/resources/plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="${pageContext.request.contextPath }/resources/dist/js/adminlte.min.js"></script>
</body>
</html>