스프링 (31)

반응형

 

정규 표현식

 

: 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용되는 형식 언어

특정 형태를 찾아내기 위해 패턴으로 표현한 수식

ex) 주민등록번호, 전화번호, 이메일

 

 

 

  • 사용 형식
var 변수이름 = /정규표현식/[Flag];

 

 

 

  • 메소드 종류
메소드 설명
test() 정규 표현식에 부합한지 판단
true / false로 반환
exec() 정규 표현식에 부합한 문자 추출하여 반환

 

 

 

  • 표현 방법 (기본 메타 문자 종류)
메타 문자 설명
^x 문자열이 x로 시작
x$ 문자열이 x로 종료
.x 임의의 한 문자를 표현
(문자열이 x로 끝남)
x+ x가 한 번 이상 반복
필수
x? x가 존재하거나 존재하지 않음
x* x가 0번이상 반복
선택
x|y x 또는 y 찾음 (or 연산자 의미)
(x) ()안의 내용 캡처, 그룹화
(x)(y) 앞에서부터 그룹 번호 부여하여 캡처
배열 형식으로 돌림
(x)(?.y) 캡처하지 않은 그룹 생성 시 ?:를 사용
결과 값 배열에 캡처하지 않은 그룹은 들어가지 않음
x{n} x를 n번 반복
x{n.} x를 n번 이상 반복
x{n,m} x를 n번 이상 m번 이하 반복

 

 

 

  • 표현 방법 (문자 클래스 종류)
문자 클래스  설명
[xy] x 또는 y를 찾음
[^xy] x, y를 제외하고 문자 하나 찾음
[x-z] x부터 z 사이의 문자 중 하나 찾음
\^ ^(특수문자)를 문자 자체로 포함
\b 문자와 공백 사이 문자 찾음
\B 공백 제외한 문자와 공백 사이 문자 찾음
\d 숫자 찾음
\D 숫자 아닌 값을 찾음
\s 공백 문자 찾음
\S 공백이 아닌 문자 찾음
\t Tab 문자 찾음
\v Vertical Tab 문자 찾음
\w 알파벨 + 숫자 + _ 찾음
\W 알파벨 + 숫자 + _ 를 제외한 모든 문자 찾음

 

 

 

정규식 예제

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Validation</title>
<script type="text/javascript">
function checkForm() {
	let regExp = /Server/i; // 정규 표현식 선언. i : ignore(대소문자 구별 안함)
	let str = document.frm.title.value;
	
	let result = regExp.exec(str);
	let result2 = regExp.test(str); // 주로 if문을 쓰기 위해 사용
	console.log("result : ", result[0]);
	console.log("result2 : ", result2);
}
</script>
</head>
<body>
	<form name="frm" action="">
		<!-- Java Server Page -->
		<p>이름 : <input type="text" name="title" /></p>
		<p><input type="button" value="전송" onclick="checkForm()" /></p>
	</form>
</body>
</html>

 

결과 화면1 : Java와 같은 문자를 가져옴. => 0번째에 정답이 들어감. (result로 출력한 화면)

 

결과 화면2

 

 

 

  • test()를 if로 사용할때
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Validation</title>
<script type="text/javascript">
function checkForm() {
	let regExp = /Server/i; // 정규 표현식 선언. i : ignore(대소문자 구별 안함)
	let str = document.frm.title.value;
	
	let result = regExp.exec(str);
	console.log("result : ", result);

	if(!regExp.test(str)) {
		console.log("해당 문자열을 찾을 수 없습니다.");
		return;
	}
}
</script>
</head>
<body>
	<form name="frm" action="">
		<!-- Java Server Page -->
		<p>이름 : <input type="text" name="title" /></p>
		<p><input type="button" value="전송" onclick="checkForm()" /></p>
	</form>
</body>
</html>

 

결과 화면3

 

 

 

  • 이름의 첫글자를 숫자로 시작 불가능하게 진행
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Validation</title>
<script type="text/javascript">
function checkForm() {
	// 이름은 숫자로 시작할 수 없습니다.
	let str = document.frm.title.value; //1admin
	// 정규표현식 생성(문자형식), [a-z] : a~z사이의 문자
	let regExp = /^[a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;
	
	if(!regExp.test(str)){ // 테스트 통과 못함
		alert("이름은 숫자로 시작할 수 없습니다.");
		document.frm.title.select();
		return;
	}
	alert("통과!");
}
</script>
</head>
<body>
	<form name="frm" action="">
		<!-- Java Server Page -->
		<p>이름 : <input type="text" name="title" /></p>
		<p><input type="button" value="전송" onclick="checkForm()" /></p>
	</form>
</body>
</html>

 

결과 화면4-1

 

결과 화면4-2

 

 

 

  • 회원가입 (아이디, 비밀번호, 이름, 연락처, 이메일)

validation06.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Validate</title>
<script type="text/javascript">
function checkMember() {
	// 아이디는 문자로 시작
	let regExpId = /^[a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;

	// 이름은 한글만 입력
	let regExpName = /^[가-힣]*$/; // 한글 한 글자로 시작하고 0번 이상 반복하며, 끝나는 글자도 한글
	
	// 비밀번호는 숫자만 입력
	let regExpPasswd = /^[0-9]*$/; // 숫자 한 글자가 0번 이상 반복하며, 끝나는 글자도 숫자
	
	// 연락처 형식(010-111-2222, 010-1111-2222)
	// {3} : 딱 3회, {3,4} : 3이상 4이하
	let regExpPhone = /^\d{3}-\d{3,4}-\d{4}$/; //
	
	// 이메일 형식(02test-_\.02test@naver-_\..com(kr))
	// i : ignore(대소문자 구분 안함)
	let regExpEmail = 
	/^[0-9|a-z|A-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;
	
	let form = document.Member;
	
	let id 		= form.id.value;
	let name 	= form.name.value;
	let passwd 	= form.passwd.value;
	let phone 	= form.phone1.value + "-" + form.phone2.value + "-" + form.phone3.value;
	let email 	= form.email.value;
	
	// JSON Object
	let data = {
		"id" :id,
		"name" :name,
		"passwd" :passwd,
		"phone" :phone,
		"email" :email
	};
	
	console.log("data : ", data);
	
	if(!regExpId.test(id)){
		alert("아이디는 문자로 시작해주세요.");
		form.id.select();
		return;
	}

	// 이름은 한글만 입력
	if(!regExpName.test(name)) {
		alert("이름은 한글만 입력해주세요");
		form.name.select();
		return;
	}
	
	//비밀번호는 숫자만 입력
    if(!regExpPasswd.test(passwd)){
       alert("비밀번호는 숫자만 입력해주세요");
       form.passwd.select();
       return;
    }
    //연락처 형식 준수(010-111-2222, 010-1111-2222)
    if(!regExpPhone.test(phone)){
       alert("연락처를 확인해주세요");
       form.phone1.select();
       return;
    }
    //이메일 형식 준수(02test-_\.02test@naver-_\..com(kr))
    if(!regExpEmail.test(email)){
       alert("이메일을 확인해주세요");
       form.email.select();
       return;
    }
    
    //유효성검사 통과
    form.submit();
}

</script>
</head>
<body>
	<h3>회원 가입</h3>
	<form action="validation06_process.jsp" name="Member" method="post">
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<p>이름 : <input type="text" name="name" /></p>
		<p>연락처 :
			<select name="phone1">
				<option value="010">010</option>
				<option value="011">011</option>
				<option value="016">016</option>
				<option value="017">017</option>
				<option value="019">019</option>
			</select> - 
			<input type="text" maxlength="4" size="4" name="phone2" /> - 
			<input type="text" maxlength="4" size="4" name="phone3" />
		</p>
		<p>이메일 : <input type="text" name="email" /></p>
		<p><input type="button" value="가입하기" onclick="checkMember()" /></p>
	</form>
</body>
</html>

 

 

validation06_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
	<%
		// 문자 인코딩 유형 처리
		request.setCharacterEncoding("UTF-8");
	%>
		
	<!--요청파라미터. 파라미터 목록. name=value => VO 또는 Map
	?id=a001&passwd=java
	 -->
	<p>아이디 : <%=request.getParameter("id")%></p>
	<p>비밀번호 :<%=request.getParameter("passwd")%></p>
	<p>이름 : <%=request.getParameter("name")%></p>
	<p>연락처 : <%=request.getParameter("phone1")%>-
	        <%=request.getParameter("phone2")%>-
	        <%=request.getParameter("phone3")%></p>
	<p>이메일 : <%=request.getParameter("email")%></p>

</body>
</html>

 

결과 화면5

 

 

반응형
반응형

 

유효성 검사(validation)

 

: 입력한 데이터 값이 특정 규칙에 맞게 입력되었는지 검증하는 것

유효하지 않은 데이터 값을 입력할 시 부적합하다고 판명 -> 다시 폼 페이지로 되돌림

ex) 나이 입력, 회원 가입 시 아이디 중복 검사, 아이디 비밀번호 검사, IP 패킷 검사

 

=> 핸들러 함수 사용

 

 

 

  • 핸들러 함수

: 폼 페이지에서 이벤트 발생(submit 클릭)시 유효성 검사를 위해 매핑하는 메소드

자바 스크립트를 이용하여 코드를 작성

 

 

 

유효성 검사 예시

 

 

  • 아이디, 비밀번호 값 확인
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Validation</title>
<script type="text/javascript">
	function checkform() {
		let id = document.loginForm.id.value;
		let passwd = document.loginForm.passwd.value;
		
		console.log("id : " + id + ", passwd : " + passwd);
	}
</script>
</head>
<body>
	<!-- 폼페이지 
	action 생략 : action="validation01.jsp" method="get"
	-->
	<form name="loginForm">
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<!-- checkform() : 핸들러 함수 -->
		<p><input type="button" value="전송" onclick="checkform()" /></p>
	</form>
</body>
</html>

 

결과 화면1

 

 

 

  • 유효성 검사 체크
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Validation</title>
<script type="text/javascript">
	function checkLogin() {
		let form = document.loginForm;
		let id = form.id.value;
		let passwd = form.passwd.value;
		
		console.log("id : " + id + ", passwd : " + passwd);
		if(id=="") {
			alert("아이디를 입력해주세요.");
			form.id.focus(); //해당 입력 항목에 커서를 위치
			return;
		} else if(passwd == "") {
			alert("비밀번호를 입력해주세요.");
			form.passwd.focus();
			return;
		}
		//위의 분기문을 잘 통과
		form.submit();
	}
</script>
</head>
<body>
	<!-- 폼페이지 
	action 생략 : action="validation01.jsp" method="get"
	-->
	<form name="loginForm">
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<!-- checkLogin() : 핸들러 함수 -->
		<p><input type="button" value="전송" onclick="checkLogin()" /></p>
	</form>
</body>
</html>

 

결과 화면2

 

 

 

  • 아이디, 비밀번호 글자 수 제한

validation04.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>validation</title>
<script type="text/javascript">
	function checkLogin(){
		let form = document.loginForm;
		// 아이디 : 4~12자 이내로 입력
		if(form.id.value.length < 4 || form.id.value.length > 12) {
			alert("아이디는 4~12자 이내로 입력 가능합니다.");
			form.id.select();
			return;
		}
		// 비밀번호 : 4자 이상으로 입력
		if(form.passwd.value.length < 4) {
			alert("비밀번호는 4자 이상으로 입력해야 합니다.");
			form.passwd.select(); // focus() : 커서를 위치
			return;
		}
		
		// 모두 통과했다면
		form.submit();
	}
</script>
</head>
<body>
	<!-- 폼페이지 
	요청 URI : validation04_process.jsp
	요청 파라미터 : {id=a001&passwd=java}
	요청방식 : post
	-->
	<form name="loginForm" action="validation04_process.jsp" method="post">
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<!-- checkLogin() : 핸들러 함수 -->
		<p><input type="button" value="전송" onclick="checkLogin()" /></p>
	</form>
</body>
</html>

 

 

validation04_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
	<h3>입력에 성공했습니다.</h3>
	<!-- 폼페이지 
	요청 URI : validation04_process.jsp
	요청 파라미터 : {id=a001&passwd=java}
	요청방식 : post
	-->
	<%
		// 문자 인코딩 유형 처리
		request.setCharacterEncoding("UTF-8");
		String id = request.getParameter("id"); //a001
		String passwd = request.getParameter("passwd"); //java
	%>
	<p>아이디 : <%=id%></p>
	<p>비밀번호 : <%=passwd%></p>
</body>
</html>

 

결과 화면3-1 : 아이디 확인

 

결과 화면3-2 : 비밀번호 확인

 

결과 화면3-3 : 입력 성공 화면

 

 

 

  • 이름 유효성 추가

validation05.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>validation</title>
<script type="text/javascript">
	function checkLogin(){
		let form = document.loginForm;
		// 아이디 : 4~12자 이내로 입력
		if(form.id.value.length < 4 || form.id.value.length > 12) {
			alert("아이디는 4~12자 이내로 입력 가능합니다.");
			form.id.select();
			return;
		}
		// 비밀번호 : 4자 이상으로 입력
		if(form.passwd.value.length < 4) {
			alert("비밀번호는 4자 이상으로 입력해야 합니다.");
			form.passwd.select(); // focus() : 커서를 위치
			return;
		}
		
		// "1admin".substr(0,1) => 1
		// It is Not a Number : 그것은 숫자가 아니다.
		// isNaN
		if(!isNaN(form.name.value.substr(0,1))){ // 1
			// 숫자라면
			alert("이름은 숫자로 시작할 수 없습니다.");
			form.name.focus();
			return;
		}
		
		// 모두 통과했다면
		form.submit();
	}
</script>
</head>
<body>
	<!-- 폼페이지 
	요청 URI : validation04_process.jsp
	요청 파라미터 : {id=a001&passwd=java}
	요청방식 : post
	-->
	<form name="loginForm" action="validation04_process.jsp" method="post">
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<p>이름 : <input type="text" name="name" /></p>
		
		<!-- checkLogin() : 핸들러 함수 -->
		<p><input type="button" value="전송" onclick="checkLogin()" /></p>
	</form>
</body>
</html>

 

결과 화면4

 

 

 

  • 아이디 영문 소문자만 가능, 비밀번호는 숫자만 입력 가능
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>validation</title>
<script type="text/javascript">
	function checkLogin(){
		let form = document.loginForm;
		// 아이디 : 4~12자 이내로 입력
		if(form.id.value.length < 4 || form.id.value.length > 12) {
			alert("아이디는 4~12자 이내로 입력 가능합니다.");
			form.id.select();
			return;
		}
		
		// A001 = > 아이디는 영문 소문자만 가능
		for(let i=0;i<form.id.value.length; i++) {
			let ch = form.id.value.charAt(i);
			
			if( (ch<'a' || ch>'z')&&(ch>='A' || ch<='Z')&&(ch>='0' || ch<='9') ) {
				alert("아이디는 영문 소문자만 입력 가능합니다.");
				form.id.select();
				return;
			}
		}
		
		// 비밀번호 : 4자 이상으로 입력
		if(form.passwd.value.length < 4) {
			alert("비밀번호는 4자 이상으로 입력해야 합니다.");
			form.passwd.select(); // focus() : 커서를 위치
			return;
		}
		
		// 비밀번호는 숫자만 입력 가능. isNaN
		if( isNaN(form.passwd.value) ) {
			alert("비밀번호는 숫자만 입력 가능합니다.");
			form.passwd.select();
			return;
		}
		
		
		
		// "1admin".substr(0,1) => 1
		// It is Not a Number : 그것은 숫자가 아니다.
		// isNaN
		if(!isNaN(form.name.value.substr(0,1))){ // 1
			// 숫자라면
			alert("이름은 숫자로 시작할 수 없습니다.");
			form.name.focus();
			return;
		}
		
		// 모두 통과했다면
		form.submit();
	}
</script>
</head>
<body>
	<!-- 폼페이지 
	요청 URI : validation04_process.jsp
	요청 파라미터 : {id=a001&passwd=java}
	요청방식 : post
	-->
	<form name="loginForm" action="validation04_process.jsp" method="post">
		<p>아이디 : <input type="text" name="id" /></p>
		<p>비밀번호 : <input type="password" name="passwd" /></p>
		<p>이름 : <input type="text" name="name" /></p>
		
		<!-- checkLogin() : 핸들러 함수 -->
		<p><input type="button" value="전송" onclick="checkLogin()" /></p>
	</form>
</body>
</html>

 

결과 화면5-1

 

결과 화면5-2

 

 

반응형

'스프링' 카테고리의 다른 글

[스프링] 15장 쇼핑몰 시스템4  (0) 2024.04.12
[스프링] 14장 정규 표현식  (0) 2024.04.12
[스프링] 11장 파일 업로드  (0) 2024.04.09
[스프링] 10.5장 과제  (0) 2024.04.08
[스프링] 10장 쇼핑몰 시스템2  (0) 2024.04.02
반응형

 

파일 전송 및 add 추가

 

 

addProduct.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/css/bootstrap.min.css" />
<title></title>
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript">
// 동일 jsp 내에 1개의 달러function
// document 내의 모든 요소들이 로딩된 후에 실행
$(function(){
	console.log("개똥이");
	
	// object를 선택(<input type="file" ..)
	$("#productImage").on("change", handleImg);
	
	// e : onchange 이벤트
	function handleImg(e) {
		console.log("파일 선택 이벤트");
		//e.target : <input type="file" id="productImage" name="productImage" class="form-control"...
		let files = e.target.files; // 파일들
		
		// fileArr = [a.jpg, b.jpg, c.jpg]
		let fileArr = Array.prototype.slice.call(files);
		
		// f : 파일(a.jpg)
		fileArr.forEach(function(f) {
			// 이미지 체킹 (MIME타입)
			if(!f.type.match("image.*")) {
				alert("이미지만 가능합니다.");
				return; // handleImg함수 자체를 종료
			}
			// 이미지가 맞다면
			let reader = new FileReader();
			
			//e : reader가 이미지 객체를 읽는 이벤트
			reader.onload = function(e) {
				let img_html = "<img src='" + e.target.result + "' style='width:100%' />";
				// <p id="pImg"><img src='oewrpasdofiasdo..' ../></p>
				// 요소.append : 누적, 요소.html : 새로고침 , 요소.innerHTML : Javascript에서 새로고침
				$("#pImg").append(img_html);
			}
			reader.readAsDataURL(f);
		});
	}
});

</script>
</head>
<body>
	<!-- include 액션 태그 -->
	<jsp:include page="menu.jsp" />

	<!-- --------------------상품등록 시작-------------------- -->
	<div class="jumbotron">
	   <!-- container : 이 안에 내용있다 -->
	   <div class="container">
	      <h1 class="display-3">상품 등록</h1>
	   </div>
	</div>
	<!-- 내용 -->
	<div class="container">
		<!-- 폼태그, 폼페이지 -->
		<form name="newProduct" action="processAddProduct.jsp" method="post"
			class="form-horizontal" enctype="multipart/form-data">
			<div class="form-group row">
				<!-- 후보키(N.N, N.D) -> 중 1 속성 선택 -> 기본키(N.N, N.D) -->
				<label class="col-sm-2">상품 아이디</label>
				<div class="col-sm-3">
					<input type="text" id="productId" name="productId"
						class="form-controler" placeholder="상품 아이디" required/>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">상품 명</label>
				<div class="col-sm-3">
					<input type="text" id="pname" name="pname"
						class="form-controler" placeholder="상품 명" required/>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">상품 가격</label>
				<div class="col-sm-3">
					<input type="number" id="unitPrice" name="unitPrice"
						class="form-controler" placeholder="상품 가격" required/>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">상품 설명</label>
				<div class="col-sm-3">
					<input type="text" id="description" name="description"
						class="form-controler" placeholder="상품 설명" required/>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">제조사</label>
				<div class="col-sm-3">
					<input type="text" id="manufacturer" name="manufacturer"
						class="form-controler" placeholder="제조사"/>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">분류</label>
				<div class="col-sm-3">
					<input type="text" id="category" name="category"
						class="form-controler" placeholder="분류"/>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">재고 수</label>
				<div class="col-sm-3">
					<input type="number" id="unitsInStock" name="unitsInStock"
						class="form-controler" placeholder="재고 수"/>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">제품 상태</label>
				<div class="col-sm-5">
					<input type="radio" name="condition" value="New" id="condition1"/><label for="condition1">신상품</label>
					<input type="radio" name="condition" value="Old" id="condition2"/><label for="condition3">중고</label>
					<input type="radio" name="condition" value="Refurbished" id="condition3"/><label for="condition3">재생품</label>
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">제품 이미지</label>
				<div class="col-sm-5">
				<p id="pImg"></p>
					<input type="file" id="productImage" name="productImage" class="form-control" 
						placeholder="제품 이미지" multiple/>
				</div>
			</div>
			<div class="form-group row">
				<div class="col-sm-offset-2 col-sm-10">
					<input type="submit" class="btn btn-primary" value="등록" />
					<button type="button" class="btn btn-info" 
						onclick="javascript:location.href='products.jsp'">목록보기</button>
				</div>
			</div>
		</form>
	</div>
	
	<jsp:include page="footer.jsp" />
</body>
</html>

 

 

processAddProduct.jsp

<%@page import="java.util.UUID"%>
<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
<%@ page import="org.apache.commons.fileupload.DiskFileUpload"%>
<%@ page import="kr.or.ddit.dao.ProductRepository"%>
<%@ page import="kr.or.ddit.vo.ProductVO"%>
<%@ page import="java.util.Enumeration"%>
<%
	request.setCharacterEncoding("UTF-8");

	//이미지 파일업로드 처리
	String path = "D:\\D_setting\\A_TeachingMaterial\\10_Jsp\\workspace\\JSPBook\\WebContent\\images";

	DiskFileUpload upload = new DiskFileUpload();
	upload.setSizeMax(5000000); //5Mb
	upload.setSizeThreshold(5 * 4096); //5Mb
	upload.setRepositoryPath(path); //임시
	
	List items = upload.parseRequest(request);
	Iterator params = items.iterator();
	
	
	
	//파라미터 value의 타입은 String
	String productId    = "";
	String pname	    = "";
	String unitPrice    = "";
	String description  = "";
	String manufacturer = "";
	String category     = "";
	String unitsInStock = "";
	String condition    = "";
	String filename     = "";
	String quantity     = "";
	
	//unitPrice
	double price = 0d;
	//unitsInStock
	double stock = 0d;
	
	//파일객체 전용 변수
	String fileFieldName = ""; //productImage
	String fileName = ""; //파일 위치
	String contentType = ""; //image/jpeg
	
	while(params.hasNext()){
		//스프링 프레임워크 => MultipartFile
		FileItem item = (FileItem)params.next();
		
		if(item.isFormField()){
			String name = item.getFieldName(); //productId
			if(name.equals("productId")){
				productId = item.getString("UTF-8"); //P1237
			}else if(name.equals("pname")){
				pname = item.getString("UTF-8"); //키보드
			}else if(name.equals("unitPrice")){
				unitPrice = item.getString("UTF-8"); //1000000
				
				if(unitPrice.isEmpty()) {
					price = 0d;
				} else {
					price = Double.parseDouble(unitPrice);
				}
			}else if(name.equals("description")){
				description = item.getString("UTF-8"); //좋은 키보드
			}else if(name.equals("manufacturer")){
				manufacturer = item.getString("UTF-8"); //Samsung
			}else if(name.equals("category")){
				category = item.getString("UTF-8"); //주변기기
			}else if(name.equals("unitsInStock")){
				unitsInStock = item.getString("UTF-8"); //1000
				
				if(unitsInStock.isEmpty()) {
					stock = 0d;
				} else {
					stock = Double.parseDouble(unitsInStock);
				}
			}else if(name.equals("condition")){
				condition = item.getString("UTF-8"); //old
			}
		} else {
			fileFieldName = item.getFieldName(); //productImage
			fileName = item.getName(); //파일경로+명
			contentType = item.getContentType(); //MIME타입
			long fildSize = item.getSize(); //파일 크기
			//파일명만 추출
			fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
			
			//UUID 처리
			UUID uuid = UUID.randomUUID();
			fileName = uuid.toString() + "_" + fileName;
			
			//설계
			File file = new File(path + "\\" + fileName);
			//복사 실행
			item.write(file);
		} //end if
	} //end while
	
		
	ProductVO productVO = new ProductVO();
	productVO.setProductId(productId); //P1237
	productVO.setPname(pname); //키보드
	productVO.setUnitPrice(price); //30000
	productVO.setDescription(description); //좋은 키보드
	productVO.setManufacturer(manufacturer); //Samsung
	productVO.setCategory(category); //주변기기
	productVO.setUnitsInStock(stock); //4
	productVO.setCondition(condition); //Old
	productVO.setFilename(fileName); //asdfsd_P1237.jpg
	
	out.print("<p>productVO : " + productVO + "</p>");
	
	//싱글톤 객체로 생성
	ProductRepository dao = ProductRepository.getInstance();
	dao.addProduct(productVO);
	
	//목록으로 이동
	response.sendRedirect("products.jsp");
%>

 

결과 화면1 : 등록 시 화면

 

 

반응형
1 2 3 4 5 6 7 8 ··· 11