45DAY / JSP지시어
JSP지시어 (Directive)
<%@ page langauge = "java" %>
JSP파일 내에서 사용 될 스크립트 언어 지정
<%@ page extends = "클래스명" %>
상속할 부모 클래스 지정
<%@ page import = "패키지명.클래스명" %>
Java의 import와 같은기능
<%@ page session = "true" %>
JSP내에서 세션사용
*세션(Session) : HTTP의 Stateless특성으로 인해 커넥션을 매번 새로 생성해야하기 때문에 동일한 클라이언트에 대해 정보를 유지할 필요가 있는 경우, 정보유지가 가능하도록 만드는 가상의 커넥션
<%@ page buffer = "8kb" %>
JSP페이지가 서블릿으로 변환되어 응답을 생성해 클라이언트에 전송할 때 사용되는 버퍼의 크기 지정
none으로 설정 할 경우 버퍼를 사용하지 않는다
<%@ page autoFlush = "true" %>
buffer속성에서 지정한 버퍼가 다 채워졌을경우
true : 클라이언트에게 전송 후 버퍼비운다
false : Exception발생시킨다
<%@ page isThreadSafe = "true" %>
다중스레드에 의한 동시접근을 차단한다
<%@ page info = "페이지설명" %>
페이지전체에 대한 주석의 역할
<%@ page errorPage = "errorpage.jsp" %>
예외가 발생했을 때 에러페이지를 지정해 에러페이지에서 예외처리함
<%@ page contentType = "text/html" %>
JSP페이지가 전송할 응답의 MINE형식 지정 대분류/소분류 순으로 명시한다
<%@ page isErrorPage = "false" %>
현재 페이지가 다른 페이지에서 발생한 예외처리할 페이지 일때 지정한다
<%@ page pageEncoding = "euc-kr" %>
JSP페이지 문자셋 인코딩방식을 지정
파일 업로드
</form>
enctype 속성을 multipart/form-data 로 지정하지 않으면 파일객체가 아닌 파일이름 이 문자열형태로 전송된다.
예제 / 단일 파일 업로드
<form action="./partUplaodPro1" method="post" enctype="multipart/form-data">
<label for ="writer">작성자</label>
<input type=text name="writer" id="writer"><br>
<label for ="partFile1">업로드 파일</label>
<input type="file" name="partFile1" id="partFile1">
<input type="submit" value="업로드">
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/partUplaodPro1")
@MultipartConfig(
fileSizeThreshold=0 ,
location = "d:/upload"
)
public class partUploadPro1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String writer = request.getParameter("writer");
System.out.println(writer);
Part part = request.getPart("partFile1");
String contentDisposition = part.getHeader("content-disposition");
String contentType = part.getHeader("content-type");
System.out.println(part);
if(contentType.equals("image/gif")
|| contentType.equals("image/jpeg")
|| contentType.equals("image/png")){
System.out.println(contentDisposition);
int dotPosition = contentDisposition.lastIndexOf(".");
String temp = contentDisposition.substring(dotPosition,contentDisposition.length()-1);
UUID uuid = UUID.randomUUID();
String fileName = uuid.toString()+temp;
part.write(fileName);
File srcFile = new File("d:\\upload\\"+fileName);
File destFile = new File("d:\\upload\\_"+fileName);
BufferedImage srcbi = ImageIO.read(srcFile);
BufferedImage destbi = new BufferedImage(50, 50, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g = destbi.createGraphics();
g.drawImage(srcbi, 0, 0, 50, 50, null);
ImageIO.write(destbi, temp.substring(1), destFile);
}
else{
response.sendRedirect("./partUploadForm1.jsp");
}
}
}
코드설명 /
@MultipartConfig 는 서블릿에서 multipart/form-data 형태로 전송된 데이터를 처리할 수 있게 지정한다.
파일이 최종 저장될 경로는 d:/upload 이고
업로드된 파일이 0바이트보다 커지면 임시 디렉토리에 저장된다.
파일이 gif,jpeg,png형식이 아닐경우 partUploadForm1.jsp로 돌아가고 맞을경우엔 흰화면