νμΌ μ λ‘λ
1.
μμμΌ ν κ²
a.
HTTP - Content-Type ν€λ
b.
form νκ·Έμ enctype μμ±
i.
application/x-www-form-urlencoded
ii.
multipart/form-data
2.
νμΌ μ
λ‘λ λΌμ΄λΈλ¬λ¦¬
3.
μ€μ΅ μ½λ
4.
ν
μ€νΈ
5.
μμ© μ€μ΅
a.
κ²μν νμΌ μ
λ‘λ
μμμΌ ν κ²
HTTP - Content-Type ν€λ
1.
HTTP
2.
Content-Type ν€λ
HTTP
μΉ μμμ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ νλ‘ν μ½λ‘, ν΄λΌμ΄μΈνΈμ μλ² κ°μ ν΅μ κ·μ½
β’
μμ²(Request) : ν΄λΌμ΄μΈνΈμμ μλ²λ‘ μμμ μμ²νλ νμ
β’
μλ΅(Response) : ν΄λΌμ΄μΈνΈμ μμ²μ λνμ¬ μλ²κ° μμμ μ 곡ν΄μ£Όλ νμ
μμ²κ³Ό μλ΅μ κ°κ° HTTP ν΅μ κ·μ½μ λ§λ μμ² λ©μμ§μ μλ΅ λ©μμ§λ‘ ꡬνλ©λλ€.
μμ² & μλ΅ λ©μμ§ κ΅¬μ±μμ
β’
μμ² λ©μμ§
β’
μλ΅ λ©μμ§
μμ² λ©μμ§
κ΅¬μ± μμ | μ€λͺ
|
μμ² λΌμΈ(Request Line) | μμ² λ©μλ, μμ² URI, HTTP λ²μ μ ν¬ν¨ν©λλ€. |
μμ² ν€λ(Request Headers) | μμ²μ λν μ 보λ₯Ό ν¬ν¨νλ ν€λλ€μ
λλ€. |
λΉ μ€(CRLF) | μμ² ν€λμ λ³Έλ¬Έ(body)μ ꡬλΆνλ λΉ μ€μ
λλ€. |
λ³Έλ¬Έ(body) | μμ² μμ μλ²λ‘ μ μ‘λλ λ°μ΄ν°μ
λλ€. (POST λ©μλμμ μ¬μ©λ¨) |
μμ² λ©μμ§ μμ
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
Connection: keep-alive
Plain Text
볡μ¬
μμ μμλ ν΄λΌμ΄μΈνΈκ° /index.html νμ΄μ§λ₯Ό μμ²νλ GET μμ² λ©μμ§μ
λλ€. μμ² λΌμΈμλ μμ² λ©μλ(GET), μμ² URI(/index.html), HTTP λ²μ (1.1)μ΄ ν¬ν¨λμ΄ μμΌλ©°, μμ² ν€λμλ Host, User-Agent, Accept, Connection λ±μ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€. λ§μ§λ§μΌλ‘ λΉ μ€(CRLF)μ΄ μμ² ν€λμ λ³Έλ¬Έμ ꡬλΆν©λλ€.
μλ΅ λ©μμ§
κ΅¬μ± μμ | μ€λͺ
|
μν λΌμΈ(Status Line) | μν μ½λ, μν λ©μμ§, HTTP λ²μ μ ν¬ν¨ν©λλ€. |
μλ΅ ν€λ(Response Headers) | μλ΅μ λν μ 보λ₯Ό ν¬ν¨νλ ν€λλ€μ
λλ€. |
λΉ μ€(CRLF) | μλ΅ ν€λμ λ³Έλ¬Έ(body)μ ꡬλΆνλ λΉ μ€μ
λλ€. |
λ³Έλ¬Έ(body) | μλ²μμ ν΄λΌμ΄μΈνΈλ‘ μ μ‘λλ λ°μ΄ν°μ
λλ€. |
μλ΅ λ©μμ§ μμ
HTTP/1.1 200 OK
Date: Wed, 06 Apr 2024 12:00:00 GMT
Server: Apache
Content-Length: 1234
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
Plain Text
볡μ¬
μμ μμλ μλ²λ‘λΆν° λ°μ HTTP 200 OK μλ΅ λ©μμ§μ
λλ€. μν λΌμΈμλ μν μ½λ(200), μν λ©μμ§(OK), HTTP λ²μ (1.1)μ΄ ν¬ν¨λμ΄ μμΌλ©°, μλ΅ ν€λμλ Date, Server, Content-Length, Content-Type λ±μ μ λ³΄κ° ν¬ν¨λμ΄ μμ΅λλ€. λ§μ§λ§μΌλ‘ λΉ μ€(CRLF)μ΄ μλ΅ ν€λμ λ³Έλ¬Έμ ꡬλΆνλ©°, λ³Έλ¬Έμλ HTML νμ΄μ§μ λ΄μ©μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
Content-Type ν€λ
HTTP λ©μμ§μμ μ λ¬λλ 컨ν
μΈ μ νμ
μ λνλ
λλ€. ν
μ€νΈ, μ΄λ―Έμ§, λμμ λ±μ λ°μ΄ν° μ νμ λͺ
μν©λλ€.
κΈ°λ³Έ Content-Type ν€λ
μ ν | ν€μλ | μ€λͺ
|
ν
μ€νΈ | text/plain | νλ¬Έ ν
μ€νΈλ₯Ό λνλ
λλ€. |
text/html | HTML λ¬Έμλ₯Ό λνλ
λλ€. | |
text/css | CSS μ€νμΌ μνΈλ₯Ό λνλ
λλ€. | |
text/javascript | JavaScript μ½λλ₯Ό λνλ
λλ€. | |
μ΄λ―Έμ§ | image/jpeg | JPEG μ΄λ―Έμ§λ₯Ό λνλ
λλ€. |
image/png | PNG μ΄λ―Έμ§λ₯Ό λνλ
λλ€. | |
image/gif | GIF μ΄λ―Έμ§λ₯Ό λνλ
λλ€. | |
λμμ | video/mp4 | MP4 λμμ νμΌμ λνλ
λλ€. |
video/webm | WebM λμμ νμΌμ λνλ
λλ€. | |
video/quicktime | QuickTime λμμ νμΌμ λνλ
λλ€. | |
κΈ°ν | application/json | JSON λ°μ΄ν°λ₯Ό λνλ
λλ€. |
application/xml | XML λ°μ΄ν°λ₯Ό λνλ
λλ€. | |
application/octet-stream | μ΄μ§ λ°μ΄ν°λ₯Ό λνλ΄λ νμ
μΌλ‘, μ£Όλ‘ μΌλ° νμΌμ λ€μ΄λ‘λ μ
λ‘λν λ μ¬μ©ν©λλ€. |
form νκ·Έμ enctype μμ±
μλ²λ‘ λ°μ΄ν°λ₯Ό μ μ‘ν λ λ°μ΄ν°μ μΈμ½λ© λ°©μμ μ§μ νλ μμ±μ
λλ€.
1.
application/x-www-form-urlencoded
2.
multipart/form-data
Content-Type (ecntype) | νΉμ§ |
application/x-www-form-urlencoded | νΌ λ°μ΄ν°λ₯Ό URL μΈμ½λ©νμ¬ μ μ‘ν¨.
μ£Όλ‘ ν
μ€νΈ λ°μ΄ν° μ μ‘μ μ¬μ©λ¨. |
multipart/form-data | νΌ λ°μ΄ν°λ₯Ό μ¬λ¬ λΆλΆμΌλ‘ λλμ΄ μ μ‘ν¨.
νμΌ μ
λ‘λμ κ°μ μ΄μ§ λ°μ΄ν° μ μ‘μ μ¬μ©λ¨. |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>File Upload Example</title>
</head>
<body>
<h2>νμΌ μ
λ‘λ</h2>
<form action="/upload.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<button type="submit">μ
λ‘λ</button>
</form>
</body>
</html>
HTML
볡μ¬
νμΌ μ
λ‘λλ₯Ό νκΈ° μν΄μλ enctype=βmultiart/form-dataβ λ₯Ό μ§μ ν΄μΌν©λλ€.
input type=βfileβ νκ·Έλ₯Ό μ΄μ©νμ¬ νμΌμ 첨λΆν©λλ€.
action=βμμ² κ²½λ‘β μμ±μ μ§μ ν κ²½λ‘λ‘ νμΌμ μ μ‘ν©λλ€.
μΌλ°μ μΌλ‘ HTML <form> μμλ₯Ό μ¬μ©νμ¬ μλ²λ‘ λ°μ΄ν°λ₯Ό μ μ‘ν λλ application/x-www-form-urlencodedλ multipart/form-data λ κ°μ§ μΈμ½λ© λ°©μμ μ¬μ©ν μ μμ΅λλ€. κ·Έλ¬λ νμΌμ μ
λ‘λν λλ multipart/form-dataλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. μ΄λ νμΌ λ°μ΄ν°λ₯Ό μλ²λ‘ μ μ‘νκΈ° μν΄ μ¬μ©λλ νμ€ λ°©μμ
λλ€.
μ¬κΈ°μ [μ
λ‘λ] λ²νΌμ λλ₯΄λ©΄, action μμ±μ μμ±λ μμ² κ²½λ‘λ‘ μ
λ‘λ μμ²μ΄ μ μ‘λ©λλ€.
νμΌ μ λ‘λ λΌμ΄λΈλ¬λ¦¬
JSP νλ‘μ νΈ(Dynamic Web Project)μμ μ£Όλ‘ μ¬μ©νλ νμΌ μ
λ‘λ λΌμ΄λΈλ¬λ¦¬λ₯Ό μκ°ν©λλ€.
β’
cos.jar
β’
commons
β¦
commons-fileupload.jar
β¦
commons-io.jar
μ€μ΅ μ½λ
β’
λΌμ΄λΈλ¬λ¦¬ μΆκ°
β’
index.jsp
β’
upload.jsp
λΌμ΄λΈλ¬λ¦¬ μΆκ°
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>νμΌ μ
λ‘λ</title>
</head>
<body>
<h2>νμΌ μ
λ‘λ</h2>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<button type="submit">μ
λ‘λ</button>
</form>
</body>
</html>
HTML
볡μ¬
upload.jsp
<%@page import="java.io.File"%>
<%@page import="java.util.UUID"%>
<%@page import="java.util.Iterator"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = "C:\\UPLOAD";
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(10*1000*1000); // 10MB - νμΌ μ΅λ ν¬κΈ°
List<FileItem> items = upload.parseRequest(request);
Iterator params = items.iterator();
while( params.hasNext() ) {
FileItem item = (FileItem) params.next();
String value = item.getString("utf-8");
// μΌλ° λ°μ΄ν°
if( item.isFormField() ) {
out.println(item.getFieldName() + " : " + value);
}
// νμΌ λ°μ΄ν°
else {
String fileName = item.getName();
String filePath = "";
// νμΌ μ€λ³΅ λ°©μ§ - νμΌλͺ
: 5a3089e0-22_κ°μμ§.jpg
fileName = UUID.randomUUID().toString().substring(0, 11) + "_" + fileName;
// νμΌ μ 체 κ²½λ‘ - νμΌκ²½λ‘ : C:\\UPLOAD\\5a3089e0-22_κ°μμ§.jpg
File file = new File(path + "/" + fileName);
filePath = file.getPath();
long fileSize = item.getSize();
// νμΌ λ°μ΄ν°
byte[] fileData = item.getInputStream().readAllBytes();
// νμΌ μ
λ‘λ (μ μ₯)
item.write(file);
}
}
%>
HTML
볡μ¬