JSP/day41 / 23.10.30(월) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 10월 30일
0
post-thumbnail

13_JSTL

< JSTL.txt >

JSTL ( JSP Standard Tag Library ) : 표준 태그 라이브러리

  • JSP 에서 사용되는 조건문, 반복문 등을 처리해주는 태그를 모아 표준으로 만들어 놓은 라이브러리
    JSTL 을 사용하면 스크립틀릿 없이 태그만으로 작성할 수 있으서 코드가 간결해지고 가독성이 좋아짐

JSTL 라이브러리 다운로드

사용전 디렉티브 태그 선언

Core 태그 라이브러리 기능

  • 변수 : <c:set> : 변수 지정
    <c:remove> : 변수 제거

  • 조건문 : <c:if> : if 문
    : <c:choose> : switch 문
    -> <c:when>, <c:otherwise> 서브 태그를 갖고있음

  • 반복 : <c:forEach> : for 문

  • 페이지 : <c:import> : URL 을 다른 JSP 페이지에 추가
    <c:redirect>: response.sendRdirect() 기능을 수행
    <c:url> : 요청 매개변수로 부터 URL 을 생성

  • 출력 : <c:out>

  • 예외처리 : <c:catch>
    https://tomcat.apache.org/download-taglibs.cgi

webapp/WEB-INF/lib 에 넣기



ex01_set_out.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex01_set_out.jsp</title>
</head>
<body>
	<h1>변수</h1>
	<%--
		# <c:set> : 변수 설정	
		- <c:set var="변수명" value="변수 값" scope="접근 범위"/>
		  -> scope : page(기본), request, session, application
		  
		# <c:remove> : 변수 삭제
		- <c:remove var="삭제할 변수명" scope"접근 범위"/>
		
		# <c:out> : 값을 출력하는 기능
		- <c:out value="출력값"/>
	--%>
	<h2>
		- set -
		<br> 
		<c:set var="num_1" value="1"/>
		num_1 : ${num_1 }
		<br><br>
		<c:set var="num_2"> 2</c:set>
		num_2 : ${num_2 }
		<br><br>
		<c:set var="num_3" value="${3 }"/>
		num_3 : ${num_3 }
		<br><br>
		<c:set var="num_4" value="4" scope="request"/>
		num_4 : ${num_4 }
		<br><br>
		
		- remove run - 
		<br>
		<!-- 에러는 아니지만 아무것도 나오지 않음 -->
		<c:remove var="num_4"/>
		num_4 : ${num_4 } 
		<br><br>
		
		- out - 
		<br>
		<c:out value="출력"/>
	</h2>
</body>
</html>

ex02_set-bean.jsp

<%@page import="dto.PersonDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex02_set-bean.jsp</title>
</head>
<body>
	<h1>자바빈즈 - 생성자</h1>
	<%--
		# <c:set> 태그를 이용해서 자바빈즈나 컬렉션을 생성할 수 있다
		  - target 과 property 속성을 사용
		    <c:set var="변수명" value="저장할 객체 or 컬렉션" scope="접근 범위"/>
		    <c:set target="var 로 설정한 변수" property="객체 속성명" value="속성값"/>
	--%>
	
	<h2>
		<c:set var="manA" value='<%=new PersonDTO("manA", 22) %>'/>
		이름 : ${manA.name } <br>
		나이 : ${manA.age } <br>
		<br>
	</h2>
	
	<h1>자바빈즈 - target, property</h1>	
	<h2>
		<c:set var="manB" value="<%=new PersonDTO() %>" scope="request"/>
		<c:set target="${manB }" property="name" value="manB"/>
		<c:set target="${manB }" property="age" value="20"/>
		이름 : ${manB.name } <br>
		나이 : ${requestScope.manB.age } <br>
		<br>
	</h2>
</body>
</html>

dto/PersonDTO.java

package dto;

public class PersonDTO {
	private String name;
	private int age;
	
	public PersonDTO() {
		super();
	}
	public PersonDTO(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

ex03_set-collection.jsp

<%@page import="dto.PersonDTO"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex03_set-collection.jsp</title>
</head>
<body>
	<h1>set - list</h1>
	<%
		ArrayList<PersonDTO> list = new ArrayList<>();
		list.add(new PersonDTO("testA", 100));
		list.add(new PersonDTO("testB", 50));
	%>
	<c:set var="personList" value="<%=list %>" />
	<h2>
		이름 : ${personList[0].name } <br>
		나이 : ${personList[0].age } <br><br>
		이름 : ${personList[1].name } <br>
		나이 : ${personList[1].age } <br>
	</h2>
	
</body>
</html>

ex04_if.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex04_if.jsp</title>
</head>
<body>
	<h1>if</h1>
	<%--
		# <c:if> : if 문을 대체하는 태그
		- <c:if test="${ 조건식 }" var="변수명" />
		 -> var : 조건식의 결과값 저장
	--%>
	<c:if test="${true}" >
		<p>참입니다</p>
	</c:if>
	<br>
	<c:set var="number" value="7" />
	<c:if test="${number mod 2 eq 1 }" var="result">
		<p>${number } : 홀수</p>
		<p>result : ${result }</p>
	</c:if>
	<br>
	<c:set var="number2" value="8" />
	<c:if test="${number2 % 2 == 0 }" var="result">
		<p>${number2 } : 짝수</p>
		<p>result : ${result }</p>
	</c:if>
	<br>
	<h2>ex05_form.jsp 결과</h2>
	<c:set var="name">${param.name }"</c:set>
	<c:set var="age" value="${param.age }"/>
	<p>${name } 님의 나이 : ${age } 세</p>
	<c:if test="${age>19}" var="result">
		<p><strong>성인</strong>입니다.</p>
	</c:if>
	<c:if test="${age<=19}" var="result">
		<p><strong>미성년자</strong>입니다.</p>
	</c:if>
	<br>
	
	<h1>주의사항</h1>
	<c:if test=" ${true } " var="res_a"/>
	<p>res_a : ${res_a }</p>
	<p>조건식 EL 앞뒤에 공백이 있으면 false</p>
	<br>
	<c:if test="100" var="res_b"/>
	<p>res_b : ${res_b }</p>
	<p>조건식 EL 이 아닌 정수를 사용하면 false</p>
	<br>
	<c:if test="True" var="res_c"/>
	<p>res_c : ${res_c }</p>
	<p>true 는 대소문자를 구분하지 않고 true</p>
	<br>
</body>
</html>

ex05_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex05_form.jsp</title>
</head>
<body>
	<h1>if 입력</h1>
	<form action="ex04_if.jsp" method="post">
		이름 : <input type="text" name="name"/>
		<br><br>
		나이 : <input type="text" name="age"/>
		<br><br>
		<input type="submit" value="확인"/>
	</form>
</body>
</html>

ex06_choose.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex06_choose.jsp</title>
</head>
<body>
	<h1>choose</h1>
	<%-- 
		# <c:choose>
		- <c:choose>
				<c:when test="조건식_a"> 실행 내용 </c:when>
				<c:when test="조건식_b"> 실행 내용 </c:when>
				......
				<c:otherwise> 실행 내용 </c:otherwise>
		  </c:choose>	
	--%>
	<c:set var="age">16</c:set>
	<h2>
		나이 : ${age } 세 <br>
		<c:choose>
			<c:when test="${age >= 20}">성인</c:when>
			<c:when test="${age >= 17}">고등학생</c:when>
			<c:when test="${age >= 14}">중학생</c:when>
			<c:when test="${age >= 8}">초등학생</c:when>
			<c:otherwise>어린이</c:otherwise>
		</c:choose>
	</h2>
	
<%-- 	<h1>ex07_form 결과</h1>
	<c:set var="kor" value="${param.kor }"/>
	<c:set var="eng" value="${param.eng }"/>
	<c:set var="math" value="${param.math }"/>
	<c:set var="avg" value="${(kor + eng + math)/3.0}"/>
	<c:out value="${avg }"/>
	<c:choose>
		<c:when test="${avg>=90 }">A</c:when>
		<c:when test="${avg>=80 }">B</c:when>
		<c:when test="${avg>=70 }">C</c:when>
		<c:when test="${avg>=60 }">D</c:when>
		<c:otherwise>E</c:otherwise>
	</c:choose> --%>
	
	<h2> 학점</h2>
	<c:if test="${not (empty papam.kor or empty papam.eng or empty papam.math)}"/>
		<c:set var="tot" value="${param.kor +param.eng +param.math }"/>
		<c:set var="avg" value="${tot / 3 }"/>
		<c:choose>
			<c:when test="${avg >= 90 }"><c:set var="grade" value="A"/></c:when>
			<c:when test="${avg >= 80 }"><c:set var="grade" value="B"/></c:when>
			<c:when test="${avg >= 70 }"><c:set var="grade" value="C"/></c:when>
			<c:when test="${avg >= 60 }"><c:set var="grade" value="D"/></c:when>
			<c:otherwise><c:set var="grade" value="F"/></c:otherwise>
		</c:choose>	
		<p>총점 : ${tot}</p>
		<p>총점 : ${avg}</p>
		<p>총점 : ${grade}</p>
</body> 
</html>

ex07_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex07_form.jsp</title>
<script type="text/javascript">
function check() {
	if(form.kor.value==0) {
		form.kor.focus();
	} else if(form.eng.value==0) {
		form.eng.focus();
	} else if(form.math.value==0) {
		form.math.focus();
	} else {
		form.submit();
	}
}
</script>
</head>
<body>
<!--  
	# 국어, 영어, 수학 점수를 입력받는 form을 작성
	  입력한 내용의 성적을 ex06_choose.jsp 에서 확인
	  - 평균으로 학점을 구하세요( A, B, C, D, F )
	    모든 과목의 점수가 있어야 결과가 나옴
-->
	<form name="form" action="ex06_choose.jsp" method="post">
		국어 : <input type="number" name="kor"/> <br>
		영어 : <input type="number" name="eng"/> <br>
		수학 : <input type="number" name="math"/> <br>
		<input type="button" value="제출" onclick="check()">
	</form>
	
	<form action="ex06_choose.jsp" method="post">
		국어 : <input type="number" name="kor"/> <br>
		영어 : <input type="number" name="eng"/> <br>
		수학 : <input type="number" name="math"/> <br>
		<input type="submit" value="제출"/>
	</form>
</body>
</html>

ex08_forEach.jsp

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex08_forEach.jsp</title>
</head>
<body>
	<h1>forEach</h1>
	<%-- 
		# <c:forEach> : for 문을 대체하는 태그
		- <c:forEach var="변수명" begin="시작값" end="마지막값" step="증가값"/>
		  <c:forEach var="변수명" itmes="배열 or 컬렉션"/>
	--%>
	<h2>일반 forEach</h2>
	<c:forEach var="i" begin="1" end="5" step="1">
		<p>i : ${i }</p>
	</c:forEach>

	<h2>향상된 forEach</h2>
	<%
	String[] colors = { "red", "green", "blue", "orange", "black" };
	%>
	<c:forEach var="color" items="<%=colors%>">
		<span style="color:${color}; font-weight:bold; font-size:25px;">${color }</span>
	</c:forEach>
	<br>

	<h2>varStatus</h2>
	<table border="1">
		<c:forEach var="color" items="<%=colors%>" varStatus="check">
			<tr>
				<td>count : ${check.count}</td>
				<td>index : ${check.index}</td>
				<td>current : ${check.current}</td>
				<td>first : ${check.first}</td>
				<td>last : ${check.last}</td>
			</tr>
		</c:forEach>
	</table>
	<br>
	<h3>
		# 채크된 항목의 국가를 'ex08_forEach.jsp' 에서 출력 <br>&nbsp;&nbsp; - 전체 항목의 수는 5개 이상
	</h3>
	<h2>향상</h2>
	<c:forEach var="nation" items="${paramValues.nation }">
		<p>${nation }</p>
	</c:forEach>
	<br>
	<h2>일반</h2>
	<c:forEach var="i" begin="0" end="${fn:length(paramValues.nation) }" step="1">
		<p>${paramValues.nation[i] }</p>
	</c:forEach>

	<h3># 출력할 구구단의 단값을 입력받고, 해당 단의 값을 'ex08_forEach.jsp' 에서 출력</h3>
	<table border="1">
		<c:set var="d" value="${param.dan }"/>
		<c:forEach var="i" begin="1" end="9" step="1">
			<tr>
				<td>${d} * ${i} = ${d*i }</td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

ex09_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex09_form.jsp</title>
<!--  
	# 채크된 항목의 국가를 'ex08_forEach.jsp' 에서 출력
	  - 전체 항목의 수는 5개 이상
	 
	# 출력할 구구단의 단값을 입력받고, 해당 단의 값을 'ex08_forEach.jsp' 에서 출력
	
-->
</head>
<body>
	<h2>국가 선택</h2>
	<form action="ex08_forEach.jsp" method="post">
		<input type="checkbox" name="nation" value=""><input type="checkbox" name="nation" value=""><input type="checkbox" name="nation" value=""><input type="checkbox" name="nation" value=""><input type="checkbox" name="nation" value=""><br>
	<h2>단 선택</h2>
		<input type="number" name="dan"><br>
		<input type="submit" value="submit">
	</form>
</body>
</html>

ex10_import.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex10_import.jsp</title>
</head>
<body>
	<h1>import</h1>
	<%-- 
		# <c:import> : <jsp:include> 액션 태그와 같이 외부 파일을 현재 위치에 삽입
		- <c:import var="변수명" url="페이지 경로 or URL" scope="접근 범위"/>
		  * 외부페이지를 변수에 저장
		  
		  <c:import url="페이지 경로 or URL">
		  	<c:param name="매개변수" value=""/>
		  </c:import>
		  * 전달할 값이 있으면 url 에 직접 추가하거나 <c:param> 태그를 사용
	--%>
	<c:set var="requestVar" value="import test" scope="request"/>
	<c:import var="contents" url="ex11_other.jsp">
		<c:param name="data_1" value="JSP"/>
		<c:param name="data_2" value="Servlet"/>
	</c:import>
	
	<h2>ex11_other.jsp 삽입</h2>
	<div>
		${contents } 
	</div>
</body>
</html>

ex11_other.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h2>ex11_other.jsp</h2>
<ul>
	<li>저장된 값 : ${requestVar }</li>
	<li>data_1 : ${param.data_1 }</li>
	<li>data_2 : ${param.data_2 }</li>
</ul>

ex12_redirect.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex12_redirect.jsp</title>
</head>
<body>
	<h1>redirect</h1>
	<%-- 
		# <c:redirect> : response 객체의 sendRedrect() 와 동일
		- <c:redirect url="이동할 경로 or URL"/> 
	--%>
	<c:redirect url="ex13_result.jsp">
		<c:param name="data" value="ex12_redirect.jsp 가 보낸 데이터"/>
	</c:redirect>
</body>
</html>

ex13_result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex13_result.jsp</title>
</head>
<body>
	<h1>redirect 페이지</h1>
	<br>
	<h2>data : ${param.data }</h2>
</body>
</html>

ex14_fmt-number_parse.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex14_fmt-number_parse.jsp</title>
</head>
<body>
	<h1>숫자 포맷</h1>
	<%-- 
		# <fmt:formatNumber> : 숫자 포맷 설정
		- <fmt:formatNumber var="변수 설정" value="출력할 숫자" type="출력 양식"
			groupingUsed="구분 기호 사용 여부" pattern="숫자 패턴" scope="영역"/>
		  * type 		 : percent, currency(통화), number(일반 숫자, 기본값) 등 지원
		    groupingUsed : 세 자리마다 콤마를 출력할지 여부 설정, 기본값 true
		    pattern		 : 출력할 숫자 양식의 패턴 지정 	
		    
		# <fmt:parseNumber> : 문자열을 숫자 포맷으로 변환
		- <fmt:parseNumber var="변수 설정" value="파싱할 문자열" type="출력 양식" 
						   integerOnly="정수만 파싱" pattern="패턴" scope="영역"/>
		  * type		: 문자열의 타입 설정, 기본값 number(숫자)
		    integerOnly : 정수 부분만 표시할지 여부 설정, 기본값 false
		    pattern		: 문자열의 양식을 패턴으로 지정
	--%>
	<c:set var="num1" value="12345"/>
	<p>콤마 0 : <fmt:formatNumber value="${num1 }"/></p>
	<p>콤마 x : <fmt:formatNumber value="${num1 }" groupingUsed="false"/></p>
	<br>
	<fmt:setLocale value="ko_KR"/><fmt:formatNumber value="${num1 }" type="currency" var="fNum1"/>
	<p>한국 통화기호 : ${fNum1 }</p>
	<br>
	<fmt:setLocale value="en_US"/><fmt:formatNumber value="${num1 }" type="currency" var="fNum1"/>
	<p>미국 통화기호 : ${fNum1 }</p>
	<br>
	<fmt:formatNumber value="0.33" type="percent" var="fNum2"/>
	<p>퍼센트 : ${fNum2 }</p>
	<br>
	<h1>문자열을 숫자로 변경</h1>
	<c:set var="num2" value="1,234.01"/>
	<p>num2 : ${num2 }</p>
	<fmt:parseNumber var="pNum1" value="${num2 }" pattern="00,000.00"/>
	<p>소수점 양식 : ${pNum1 }</p>
	<fmt:parseNumber var="pNum1" value="${num2 }" integerOnly="true"/>
	<p>정수만 표시 : ${pNum1 }</p>
</body>
</html>

ex15_fmt-date-time.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex15_fmt-date-time.jsp</title>
</head>
<body>
	<%-- 
		# <fmt:formatDate> : 날짜와 시간 포맷을 지정
		- <fmt:formatDate value="출력 날짜" type="출력 양식" var="변수 설정" 
					dateStyle="날짜 스타일" timeStyle="시간 스타일" pattern="날짜 패턴"
					scope="영역"/>
		  * type		: 출력시 날짜(date), 시간(time), 날짜 및 시간(both) 세 가지 중 선택
		    dateStyle	: default, short, medium(기본값), long, full 중 선택
		    timeStyle	: default, short, medium, long, full 중 선택
		    pattern		: 출력할 날짜 및 시간 양식 지정
	--%>
	<fmt:timeZone value="GMT-8">
	<c:set var="today" value="<%=new java.util.Date() %>"/>
	<fmt:formatDate var="time" value="${today }" type="both" dateStyle="full" timeStyle="full"/>
	<p> ${time }</p>
	</fmt:timeZone>
	
	<fmt:timeZone value="Asia/Seoul">
		<fmt:formatDate var="myTime" value="${today }" type="both" pattern="yyyy-MM-dd hh24:mm:ss"/>
		<p> ${myTime }</p>
	</fmt:timeZone>
</body>
</html>



14_File

File.txt

< File.txt >

파일 업로드에 필요한 요소

  • 파일 처리하는 form 의 메서드 및 enctype

    enctype : form data 가 서버로 보내질 때 인코딩 타입
    method="post" enctype="multipart/form-data"

  • 업로드 파일이 저장되는 폴더

  • 파일을 업로드하면서 form 을 분석하는 라이브러리

    cos.jar

cos.jar 다운로드


fileForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fileForm.jsp</title>
<style type="text/css">
table, th, td {
	border: 1px solid black;
	border-collapse: collapse;
	padding: 4px; 
}
textarea {
	resize: none;
}
</style>
</head>
<body>
	<h1>파일 업로드</h1>
	<br>
	<form action="fileUpload.jsp" method="post" enctype="multipart/form-data">
		<table>
			<tr>
				<th>제목</th>
				<td><input type="text" name="subject" size="50"/></td>
			</tr>
			<tr>
				<th>내용</th>
				<td><textarea rows="20" cols="52" name="content"></textarea> </td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="file" name="upload" size="50"/>
				</td>
			</tr>
			<tr>
				<td colspan="2" align="center">
					<input type="submit" name="upload"/>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

fileUpload.jsp

<%@page import="java.io.File"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
// 실제 저장되는 폴더 경로
String realFolder = request.getServletContext().getRealPath("/storage");

// 파일 업로드 객체
// - MultipartRequest( request, 저장경로, 파일크기, 인코딩 방식, 파일정책 ) 
// 파일크기 : 1024*1024 = 1MB
//  * new DefaultFileRenamePolicy()
//    : 업로드시 동일한 이름의 파일이 있을 경우, 기본 파일 이름 뒤에 숫자를 붙여서 저장
MultipartRequest mr = new MultipartRequest(request, realFolder, 1024*1024*5, "utf-8", new DefaultFileRenamePolicy()); 

String subject = mr.getParameter("subject");
String content = mr.getParameter("content");

// 업로드 파일명
// fileForm 에서 input > name = upload
String originalFileName = mr.getOriginalFileName("upload");

// 서버에 저장된 파일명
String fileName = mr.getFilesystemName("upload");

// 파일 객체
File file = mr.getFile("upload");
long fileSize = 0;
if(file != null){
	fileSize = file.length();
}

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>fileUpload.jsp</title>
</head>
<body>
	<h1>업로드 확인</h1>
	 <br>
	 <ul>
	 	<li> 제목 : <%=subject %></li>
	 	<li> 내용 : <%=content %></li>
	 	<li> 저장위치 : <%=realFolder %></li>
	 	<li> 업로드한 파일명: <%=originalFileName %></li>
	 	<li> 서버에 저장된 파일명: <%=fileName %></li>
	 </ul>
</body>
</html>

storage

파일 저장할 폴더 생성

C:\Users\bh788\Desktop\JSP.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\14_File\storage

에 파일 생성

같은 파일 이름이 중복으로 저장되면
파일 이름 뒤에 숫자가 생기며 저장됨
EX) file, file2, file3.....

profile
Fintech

0개의 댓글