171206 JSTL & 파일업로드 - RYUDONGJIN/Memo_wiki GitHub Wiki

JSTL

  • JSP에서 코드의 가독성이 떨어지는 단점을 보완하고자 만들어진 태그 라이브러리
  • jakarta.apache.org -> Taglibs -> Apache Standard Taglib 클릭 -> standard 1.1 다운로드 -> binaries -> -> jakarta-taglibs-standard-1.1.2.zip 다운로드 -> 압축풀고 lib에 jar파일 두개 복사해서 톰캣 lib 에 추가
  • Core라이브러리 : 출력, 제어문, 반복문 같은 기능이 포함되어 있음
<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix="c" %>
  • 출력태그 : <c:out> JSP의 표현식을 대체하는 것으로 가장 많이 사용
    <c:out value="출력값" default="기본값" escapeXml="true or false">
  • 변수 설정 태그 : <c:set>
    <c:set var="변수명" value="설정값" target="객체" property="값" scope="범위" >
  • 변수를 제거하는 태그 : <c:remove>
    <c:remove var="변수명" scope="범위">
  • 예외 처리 태그 : <c:catch> body 위치에서 실행되는 코드의 예외를 잡아내는 역할
    <c:catch var=:변수명">
  • 제어문(if)태그 : <c:if> 조건문에서 사용
    <c:if test="조건" var="조건 처리 변수명" scope="범위">
  • 제어문(switch) 태그 : <c:choose> 자바의 switch문과 같지만, 조건에 문자열 비교도 가능
<c:choose>
<c:when test="조건"> 처리 내용 </c:when> //조건에 만족한 경우 사용
<c:otherwise> 처리 내용> </c:otherwise> //조건을 만족하지 못한 경우에 사용
</c:choose>
  • 반복문(for 태그: <c:forEach>) 객체 전체에 걸쳐 반복 실행을 할 때 사용
    <c:forEach items="객체명" begin="시작 인덱스" end="끝 인덱스" step="증감식" var="변수명" varStatus="상태변수">
  • 페이지 이동태그 : <c:redirect> 지정한 다른 페이지로 이동
    <c:redirect url="url">
  • 파라미터 전달 태그 : <c:param> 태그의 URL뒤에 파라미터로 붙여서 사용
    <c:param name="파라미터명" value="값">
  • StringTokenizer 태그 : <c:forToken>
  • URL 생성 태그 : <c:url> 쿼리 파라미터로부터 URL을 생성

파일업로드

  • www.servlets.com 접속 후 좌측의 com.oreillyservlet 클릭 -> 아래쪽 download에서 zip파일 다운로드 -> 압축 풀고 lib에서 cos.jar 파일을 WEB-INF lib에 추가
  • form 태그 안에 enctype ="multipart/form-data" 추가
  • C:\CodeLab\JSP\projects.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ 경로에 저장
<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%
	String path = request.getSession().getServletContext().getRealPath("fileFolder");

	int size = 1024 * 1024 * 10; //10M
	String file = "";
	String oriFile = "";
	
	try{
		MultipartRequest multi = new MultipartRequest(request, path, size, "EUC-KR", new DefaultFileRenamePolicy());
		
		Enumeration files = multi.getFileNames();
		String str = (String)files.nextElement();
		
		file = multi.getFilesystemName(str);
		oriFile = multi.getOriginalFileName(str);
		out.println(path);
		
	} catch (Exception e) {
		e.printStackTrace();
	}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
 	file upload success!
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<center>
	<h2>파일 업로드</h2>
	<form action="FileUpLoadProc.jsp" method="post" enctype="multipart/form-data">
		<table width="350" border="1" bordercolor="gray">
			<tr height="40">
				<td width="150">이름</td>
				<td width="200"><input type="text" name="name"></td>
			</tr>
			<tr height="40">
				<td width="150">파일 선택</td>
				<td width="200"><input type="file" name="filedata" ></td>
			</tr>
			<tr height="40">
				<td colspan="2" align="center"><input type="submit" value="파일 업로드"></td>
			</tr>
		</table>
	</form>
	</center>
</body>
</html>

<%@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"%>
<%
	request.setCharacterEncoding("UTF-8");
	//프로젝트 내에 만들어질 폴더를 저장할 이름 변수 선언
	String realfolder="";
	//실제 만들어질 폴더명을 설정
	String savefolder="/upload";
	//한글 설정
	String encType ="UTF-8";
	//저장될 파일 사이즈를 설정
	int maxSize=1024 * 1024* 5; //5M
	
	//파일이 저장될 경로값을 읽어오는 객체
	ServletContext context = getServletContext();
	realfolder = context.getRealPath(savefolder);
	
	try {
		//클라이언트로부터 넘어온 데이터를 저장해주는 객체
		MultipartRequest multi = new MultipartRequest(request, realfolder, maxSize, encType, new DefaultFileRenamePolicy());//파일이름 변경을 자동으로해주는 클래스
%>
	당신의 이름은 <%=multi.getParameter("name") %>
<%		
		out.println(realfolder);
	} catch (Exception e){
		e.printStackTrace();
	}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>
⚠️ **GitHub.com Fallback** ⚠️