▶Servlet 페이지 구현
package upload;
import java.io.File;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
/**
* Servlet implementation class testupload
*/
@WebServlet("/test/upload")
public class testupload extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public testupload() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("euc-kr");
response.setCharacterEncoding("euc-kr");
response.setContentType("text/html; charset = EUC-KR");
RequestDispatcher dis = request.getRequestDispatcher("/upload/form.jsp");
dis.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
String path = "C:\\Users\\hennie\\Desktop\\eclipes\\webworkspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\webapps\\img\\";
int size = 100 * 1024 * 1024; // 100M
MultipartRequest multipart = new MultipartRequest(request, path, size, "EUC-KR", new DefaultFileRenamePolicy());
String title = multipart.getParameter("title");
System.out.println("title" + title);
String fname = multipart.getOriginalFileName("file");
System.out.println("fname" + fname);
File f = multipart.getFile("file");
String ffname = f.getName();
File dir = new File (path);
String [] flist = dir.list()
request.setAttribute("flist", flist);
RequestDispatcher dis = request.getRequestDispatcher("/upload/list.jsp");
dis.forward(request, response);
}
}
● String path = "C:\\Users\\hennie\\Desktop\\········\\img\\";
이미지 업로드 할 경로 정하기
● int size = 100 * 1024 * 1024;
업로드 파일의 최대 크기 정하기
● MultipartRequest multipart = new MultipartRequest(request, path, size, "EUC-KR", new DefaultFileRenamePolicy());
업로드에 사용할 MultipartRequest 객체 생성
(param1: 요청객체, param2: 업로드 경로, param3: 파일 최대 크기, param4: 인코딩, param5: 파일명 중복 시 처리 방법)
DefaultFileRenamePolicy : 똑같은 이름을 가진 파일이 존재한다면 파일명(default)에 1, 2, 3 으로 붙게 해주는 클래스
파일 업로드를 해놓으면 이미 여기서 끝이났다. 밑에서는 그냥 파일을 이용한 후작업을 나타낸다.
● File dir = new File (path);
파일에 대한 정보를 얻고 싶으면 path(위에 주소로 넣어준 String path의 path)를 파라미터로 넣어서 디렉토리 정보를 알려줄 File 객체 생성 한다.
● String [] flist = dir.list();
디렉토리에 속한 (업로드 된) 파일 리스트명들을 string 배열에 담는다. 그러면 배열은 이미지에 대한 파일 이름과 형태를 {"1.jpg","2.png"}; 이렇게 문자 형태로 반환한다.
● request.setAttribute("flist", flist);
그 배열들을 request 에 담아서 jsp 에서 보이게끔 구현 해주면 된다.
● RequestDispatcher dis = request.getRequestDispatcher("/upload/list.jsp");
dis.forward(request, response);
어디로 보낼지 경로 설정하기
[ 업로드 된 파일의 추가적인 정보를 얻기 위해 사용 되는 코드 ]
● String title = multipart.getParameter("title");
폼파라메터 읽기 request.getParmeter 와 같고 업로드 할때 제목:<input type="text" name="title"> 이게 나오는것임
● String fname = multipart.getOriginalFileName("file");
업로드된 파일의 원본 이름
클라이언트가 a.jpg 를 업로드 했다. 그러면 원본 파일의 이름은 a.jpg야 근데 위에 DefaultFileRenamePolicy이거 때문에 같은 파일을 업로드를 하면 a1.jpg 이렇게 파일명일 업로드 될 때 변하게 된다. 그럼에도 불구하고 원본은 a.jpg이다. 바로 그 원본 파일을 명을 알려주는 메서드
● File f = multipart.getFile("file");
업로드된 파일을 파일객체로 반환한다.
File : 파일에 대한 정보를 가지고 있는 클래스 을 가지고 다양한 파일에 관련된 내용을 알 수 있다.
multipart의 이름이 "file" 인 파일을 가져와서 파일 객체 File (파일 객체 이름이 f 인) 에 할당한다.
● String filename = f.getName();
getName() : 파일에 이름을 반환하는 함수. 앞에 파일 경로를 제외하고 파일이름만 String 타입으로 반환한다.
파일객체 f에 있는 파일의 이름을 얻어갑니다~~
▶ JSP 페이지 구현
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h3>이미지 목록 </h3>
<c:forEach var = "f" items ="${flist }">
<img src = "/img/${f }" style = "width : 200px; height : 200px"><br/>
</c:forEach>
</body>
</html>
● <c:forEach var = "f" items ="${flist }">
배열에 있는 값들을 꺼내 주기 위해 생성한 c:forEach
앞서 작성한 servlet 의 request.setAttribute("flist", flist); 의 flist 를 jsp에서는 var = "f" 를 통해 f 로 지정했다.
● <img src = "/img/${f }" style = "width : 200px; height : 200px"><br/>
img 태그를 써서 src 경로를 표시해주고 파일은 "/img/밑에 있는 문자열을 빼 내줄 예정이다.
아까 servlet 에서 String [] flist = dir.list(); 를 통해 문자열 배열 {"1.jpg","2.png"};을 저장 했기 때문에 그 경로를 ${f } 이렇게 표시 해 준다.
● </c:forEach>
태그 닫아 주는 거 까먹지 말자!
'MVC > jsp & servlet' 카테고리의 다른 글
Include 지시자와 Include 액션 (0) | 2023.04.07 |
---|---|
[jsp와 servlet] 익명 방명록 만들기 ⑧ 비밀번호 확인 후 글 수정 (0) | 2023.03.29 |
[jsp와 servlet] 익명 방명록 만들기 ⑦ 글 번호 클릭하여 상세 보기 (0) | 2023.03.29 |
[jsp와 servlet] 익명 방명록 만들기 ⑥ 삭제 구현 하기 (0) | 2023.03.29 |
[jsp와 servlet] 익명 방명록 만들기 ⑤ 작성자로 검색하기 만들기 (0) | 2023.03.29 |