Problem solving/쉽게 배우는 JSP 웹 프로그래밍

[쉽게 배우는 JSP 웹 프로그래밍] 7장 연습문제

공부좀하시졍 2020. 10. 21. 03:21

1. 파일 업로드를 위한 form 태그 내에 반드시 설정해야 하는 기법은 무엇인가?

1) form 태그의 method 속성은 반드시 POST 방식으로 설정해야 한다.

2) form 태그의 enctype 속성은 반드시 multipart/form-data로 설정해야 한다.

3) form 태그의 action 속성은 파일 업로드를 처리할 JSP 파일로 설정해야 한다.

4) 파일 업로드를 위해 input 태그의 type 속성을 file로 설정해야 한다.

 

2. 파일을 서버에 업로드하는 처리 기법에 대해 간단히 설명하시오.

MultipartRequest 클래스를 이용하거나 Commons-FileUpload를 이용하여 파일을 업로드할 수 있다.

MultipartRequest 클래스는 MultipartRequest 객체를 생성한 뒤 생성된 객체를 통해 MultipartRequest 클래스가 제공하는 메소드를 사용하여 웹 브라우저가 전송한 multipart/form-data 유형의 요청 파라미터를 읽어오고 파일을 업로드한다.

Commons-FileUpload는 Commons-FileUpload 패키지에 포함되어 있는 DiskFileUpload 객체를 생성한 뒤 생성된 객체를 통해 DiskFileUpload 클래스가 제공하는 메소드를 사용한다. 그리고 FileItem 클래스의 메소드를 사용하여 요청 파라미터가 일반 데이터인지 파일인지 분석 및 처리하여 파일을 업로드한다.

 

3. MultipartRequest 클래스를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

fileupload01.jsp

<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>File Upload</title>
</head>
<body>
	<form method="post" enctype="multipart/form-data" action="fileupload01_process.jsp">
		<p> 파 일 : <input type="file" name="filename">
		<p> <input type="submit" value="파일 올리기">
	</form>
</body>
</html>

fileupload01_process.jsp

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="com.oreilly.servlet.*"%>
<%@ page import="com.oreilly.servlet.multipart.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>

<%
	MultipartRequest multi = new MultipartRequest(request, "C:\\upload", 5 * 1024 * 1024, "utf-8", new DefaultFileRenamePolicy());	
	Enumeration files = multi.getFileNames();
	
	while(files.hasMoreElements()) {
		String name = (String)files.nextElement();
		String filename = multi.getFilesystemName(name);
		String original = multi.getOriginalFileName(name);
		String type = multi.getContentType(name);
		File file = multi.getFile(name);
		
		out.println("요청 파라미터 이름 : " + name + "<br>");
		out.println("실제 파일 이름 : " + original + "<br>");
		out.println("저장 파일 이름 : " + filename + "<br>");
		out.println("파일 콘텐츠 유형 : " + type + "<br>");
		
		if (file != null) {
			out.println(" 파일 크기 : " + file.length());
			out.println("<br>");
		}
	}
%>

 

4. Commons-FileUpload 패키지를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행결과를 확인하시오.

fileupload02.jsp

<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>File Upload</title>
</head>
<body>
	<form method="post" enctype="multipart/form-data" action="fileupload02_process.jsp">
		<p> 파 일 : <input type="file" name="filename">
		<p> <input type="submit" value="파일 올리기">
	</form>
</body>
</html>

fileupload02_process.jsp

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>File Upload</title>
</head>
<body>
	<%
		String path = "C:\\upload";
		DiskFileUpload upload = new DiskFileUpload();
		List items = upload.parseRequest(request);
		Iterator params = items.iterator();
		
		while(params.hasNext()) {
			FileItem item = (FileItem)params.next();
			if(!item.isFormField()) {
				String fileFieldName = item.getFieldName();
				String fileName = item.getName();
				String contentType = item.getContentType();
				
				fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
				long fileSize = item.getSize();
				
				File file = new File(path + "/" + fileName);
				item.write(file);
				
				out.println("요청 파라미터 이름 : " + fileFieldName + "<br>");
				out.println("저장 파일 이름 : " + fileName + "<br>");
				out.println("파일 콘텐츠 유형 : " + contentType + "<br>");
				out.println("파일 크기 : " + fileSize);
			} 
		}
	%>
</body>
</html>

 

2020/10/21 - [Problem solving/쉽게 배우는 JSP 웹 프로그래밍] - [쉽게 배우는 JSP 웹 프로그래밍] 6장 연습문제