본문 바로가기
수업(국비지원)/JSP

[JSP] MVC MODEL2 방식 - 사진 등록(memberimg), 사진 수정(imgupload)

by byeolsub 2023. 4. 19.

📌 joinForm.jsp 사진 등록 부분 수정하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- /jsp3/src/main/webapp/view/member/joinForm.jsp --%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
<link rel="stylesheet" href="../../css/main.css">
<script type="text/javascript">
      function check(f) {
    	  if(f.id.value == '') {
    		  alert("아이디를 입력하세요.")
    		  f.id.focus()
    		  return false //submit 버튼 클릭의 기능을 중지시키는 역할
    	  }
    	  if(f.pass.value == '') {
    		  alert("비밀번호를 입력하세요.")
    		  f.pass.focus()
    		  return false 
    	  }
    	  if(f.name.value == '') {
    		  alert("이름을 입력하세요.")
    		  f.name.focus()
    		  return false
    	  }
    	  return true
      }
      function win_open() {
    	  let op = "width=300,height=300,left=50,top=150"
    	  open("memberimg","",op) 
      }
</script>
</head>
<body>
<%-- type="hidden" : 값은 존재. 화면 없음. 파라미터값으로 서버에 전달 --%>
<form action="join" method="post" name="f" onsubmit="return check(this)">
    <input type="hidden" name="picture" value="">
    <table>
    <caption>회원 가입</caption>
    <tr><td rowspan="4" align="center" valign="bottom">
        <img src="" width="100" height="120" id="pic"><br>
        <%-- javascript:win_open() <= 자바스크림트 파일로 실행해. 라는 뜻이 된다. --%>
        <font size="1"><a href="javascript:win_open()">사진 등록</a>
        </font></td>
        <td>아이디</td>
        <td><input type="text" name="id"></td>
        </tr>
        <tr><td>비밀번호</td>
        <td><input type="password" name="pass"></td></tr>
        <tr><td>이름</td>
        <td><input type="text" name="name"></td></tr>
        <tr><td>성별</td>
        <td><input type="radio" name="gender" value="1" checked>남
            <input type="radio" name="gender" value="2" checked>여</td></tr>
        <tr><td>전화번호</td>
        <td colspan="2"><input type="text" name="tel"></td></tr>
        <tr><td>이메일</td>
            <td colspan="2"><input type="text" name="email"></td></tr>
        <tr><td colspan="3" align="center">
            <input type="submit" value="회원가입">
            <%-- type="reset" : 화면을 초기화면으로 설정. 입력된 내용 전부 초기화 --%>
            <input type="reset" value="다시작성">
            </td></tr>    
    </table>
</form>
</body>
</html>

 

 

📌 SiteMeshFilter.java 수정하기

sitemesh : 프레임워크. 화면의 공통 부분을 코딩한 jsp 페이지를 설정. 
  1.sitemesh-3.0.1.jar 파일을 /WEB-INF/lib/ 폴더(톰켓에서 쓸 수 있도록 미리 약속되어 있는 폴더)에 복사. 
  2.SiteMeshFilter 클래스 파일 코딩
    - ConfigurableSiteMeshFilter 상속 받음 : sitemesh 설정을 위한 클래스
    - addDecoratorPath : 화면의 공통 부분을 코딩한 jsp 파일 설정  
                    /* : 모든 url 요청. jsp2/model1/member/loginForm.jsp 
    - addExcludedPath("/member/memberimg*") : url이 /member/memberimg로 시작하는 경우 layout.jsp 페이지 적용 안함.   
  3. layoyt.jsp 코딩       

 

package sitemesh;

import javax.servlet.annotation.WebFilter;

import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.config.ConfigurableSiteMeshFilter;

@WebFilter("/*")
public class SiteMeshFilter extends ConfigurableSiteMeshFilter {
	@Override
	protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
		builder.addDecoratorPath("/*","/layout/layout.jsp")
		.addExcludedPath("/member/memberimg");
	}
}

 

 

📌 memberimg.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- /jsp3/src/main/webapp/view/member/memberimg.jsp --%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 사진등록</title>
</head>
<body>
<h3>사진 업로드</h3>
<form action="imgupload" method="post" enctype="multipart/form-data">
<input type="file" name="picture" id="imageFile" acceot="img/*">
<input type="submit" value="사진등록">
</form><br>
<img id="preview" src="">
</body>
</html>

 

 

📌 MemberController.java - 내용 추가

@RequestMapping("memberimg")
	public String memberimg (HttpServletRequest request, HttpServletResponse response) {
		return "/view/member/memberimg.jsp";
}

 


 

 📌 imgupload

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%-- /jsp3/src/main/webapp/view/member/imgupload.jsp --%>
<script>
  // opener <= joinForm.jsp 
	img = opener.document.querySelector("#pic"); //opener 윈도위의 id="pic"인 태그 선택
	img.src="picture/${filename}";
	// joinForm.jsp의 <input type="hidden" name="picture" value="">
	//파라미터에 파일이름 설정 =>db에 저장
	opener.document.f.picture.value="${filename}"
	self.close()
</script>

 

 

📌 MemberController.java - 내용 추가

                                              jsp2/imgupload.jsp의 내용 추가

1. 파일 업로드 : 업로드 위치 : /member/picture로 설정
2. 이미지 파일을 opener 페이지에 보이게 출력하기. 현재 페이지 닫음.

 

	@RequestMapping("imgupload")
	public String imgupload (HttpServletRequest request, HttpServletResponse response) {
//1. 파일 업로드 : 업로드 위치 : /member/picture로 설정
		String path = getServletContext().getRealPath("/") + "/picture/"; // 파일 업로드 폴더 위치
		File f = new File(path);
		if(!f.exists()) f.mkdirs(); //폴더가 없다면 폴더 생성
		String filename = null;
		MultipartRequest multi = null;
		try {
			multi = new MultipartRequest(request, path,10*1024*1024, "utf-8"); //파일 업로드 완성
		} catch (IOException e) {
			e.printStackTrace();
		}
		filename = multi.getFilesystemName("picture");
		request.setAttribute("filename", filename);
		return "/view/member/imgupload.jsp";
	}