JSP - JSP 페이지의 캐시 영역 날리기

Published on: 2009.09.20 00:35 by krespo


가끔 플렉스로 프로그램을 짜거나 JFreeChart plugin으로 프로그램을 짤때 변경된 사항이 그때그때 바뀌지 않는 경우가 있다.

이는 각 브라우져에 캐시기능이 있기 때문에 변경된 내용의 XML데이터나 이미지 정보를 불러오지 않고 기존에 정보들을 가지고 있음으로 플렉스 차트의 XML같은경우에 아무리 변경해도 값이 플렉스에 반영되지 않는다..

이럴때는 다음과 같은 코드로 캐시의 영역을 초기화 해주며 XML파일 위쪽에 다음과 같이 선언한다.

 String httpVersion = request.getProtocol();
 if(httpVersion.equals("HTTP/1.0")){
    response.setDateHeader("Expires", 0);
    response.setHeader("Pragma", "no-cache");
 }
 else if(httpVersion.equals("HTTP/1.1")){
    response.setHeader("Cache-Control", "no-cache");
 }

 

신고
Name
Password
Homepage
Secret

파일 업로드 하기2 - 데이터베이스 테이블 생성

Published on: 2009.03.31 19:18 by krespo

<!--DATABASE 연결방식-->

TB_MEMBER_BOARD        ----->      ASSOCIATE TABLE         ----->         TB_ATTACHFILE

<TB_ATTACHFILE>

 SEQ

 NUMBER 8 N/N

 기본키

 BOARD_SEQ

 NUMBER 8 N/N

 TB_MEMBER_BOARD와 연관된 외부키

 FILE_NAME

 VARCHAR2 255 N/N

 파일 이름 저장

 FILE_SIZE

 NUMBER 8 N/N

 파일 사이즈

 CONTENTS_TYPE

 VARCHAR2 30 N/N

 파일 타입

 TEMP_NAME

 VARCHAR2 255 N/N

 업로드 되어 변경된 파일 이름 저장


파일이 업로드 될 때 기존의 이름과 같으면 파일이 덮혀 씌워질수 있다.
그렇기 때문에 업로드 시 파일이름을 고유하게 변경하는 것이 필요하다.(TEMP_NAME 에 저장)

신고
Name
Password
Homepage
Secret

파일 업로드 하기3 - Function

Published on: 2009.03.31 17:38 by krespo

<!-- FileUpload Function -->
참조:: http://javastore.tistory.com/entry/파일-업로드-하기


void fileUpload (HttpServletRequest request, String realPath, Map<String, String> parameters, 
                      Map<String, UploadFile> uploadFiles) throws FileUploadException, UnsupportedEncodingException {
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);

 if( isMultipart ) {
  File temporaryDir = new File("c:\\tmp\\");
  
  DiskFileItemFactory factory = new DiskFileItemFactory();
  factory.setSizeThreshold(0);
  factory.setRepository(temporaryDir);
 
  ServletFileUpload upload = new ServletFileUpload(factory);
  upload.setSizeMax(10 * 1024 * 1024);
  List<FileItem> items = upload.parseRequest(request);
  
  Iterator iter = items.iterator();
  while (iter.hasNext()) {
   FileItem fileItem = (FileItem) iter.next();
 
   if (fileItem.isFormField()) {
    parameters.put(fileItem.getFieldName(), fileItem.getString("euc-kr"));
    //out.println("폼 파라미터 : " + fileItem.getFieldName() + "=" + fileItem.getString("euc-kr") + "<br/>");
   } else {
   if( fileItem.getSize() > 0 ) {
    UploadFile uf = new UploadFile();
 
    String fieldName = fileItem.getFieldName();
 
    int idx = fileItem.getName().lastIndexOf("\\");
    if( idx == -1 ) {
     idx = fileItem.getName().lastIndexOf("/");
    }
    String fileName = fileItem.getName().substring(idx + 1);
 
    
    String contentType = fileItem.getContentType();
    boolean isInMemory = fileItem.isInMemory();
    long sizeInBytes = fileItem.getSize();
 
    uf.setFileName(fileName);
    uf.setTempName(fileName);
    uf.setContentType(contentType);
    uf.setFileSize(sizeInBytes);
    
    uploadFiles.put(fileItem.getFieldName(), uf);
    
    
    try {
     File uploadedFile = new File(realPath, fileName);
     fileItem.write(uploadedFile);
     //fileItem.delete();
    } catch(Exception ex) {}
   }
   }
  }
 } else {
  out.println("인코딩 타입이 multipart/form-data 가 아님.");
 }
}

=========================================================================================================
<!-- 실제 사용할때 -->

String realPath = config.getServletContext().getRealPath("/upload/");
Map<String, String> parameters = new HashMap<String, String>();
Map<String, UploadFile> uploadFiles = new HashMap<String, UploadFile>();

 fileUpload(request, realPath, parameters, uploadFiles);
 

 UploadFile uf1=uploadFiles.get("file1");                                    //write_form.jsp 의 input name='file1'
 UploadFile uf2=uploadFiles.get("file2");
 UploadFile uf3=uploadFiles.get("file3");

 String title = parameters.get( "title" );                                        //post형식으로 보내면 getParameter로 받는것이 아니라
 String contents = parameters.get( "contents" );                         //Map<String, String> parameters = new HashMap<String, String>();
 String userId=(String)session.getAttribute("userId");                  //parameters.get으로 한다.

======================================================================================================
write_form.jsp

<form name='writeFrm' action='write.jsp' method='post'  enctype='multipart/form-data'>
       <table width="690" border="1" cellpadding="10" cellspacing="0" style="border:solid 1px #d6d7d6;">
           
            <tr>
              <td align="left">제목</td>
              <td align="left"><input name="title" type="text" value="" size="40" /></td>
            </tr>
            <tr>
             <td>내용</td>
             <td><textarea name='contents' cols='70' rows='10'></textarea></td>
            </tr>
            <tr>
                <td colspan="2">
                 파일1: <input type="file" name="file1" size='50'/><br>
                 파일2: <input type="file" name="file2" size='50'/><br>
                  파일3: <input type="file" name="file3" size='50'/><br>
                 </td>
            </tr>
            <tr>
               <td colspan="2" align="right">
                 <img src="/images/button_save.gif" width="67" height="30" style="cursor:hand;" onclick="javascript:checkUserRegist();" />
            </tr>
           
         </table>
      </form>

신고
Name
Password
Homepage
Secret

파일 업로드 하기1 - 기본 개념

Published on: 2009.03.31 12:39 by krespo

-파일을 업로드 하려면 파일하나를 여러 파트로 나눠서(멀티파트) "POST" 방식으로 업로드 시킨다.
#주의사항
1.임시폴더(c://tmp)는 직접 만든다.
2.이클립스에서 webcontents 폴더 밑에 upload라는 폴더를 직접 생성해야 한다.
3.library파일을 2개 추가 해야한다.
    -commons-fileupload-1.2.1.jar
    -commons-io-1.4.jar

http://commons.apache.org/downloads/download_fileupload.cgi

http://commons.apache.org/downloads/download_io.cgi



<!--기본적인 FILE UPLOAD HTML FORM-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="upload.jsp" method="post" enctype="multipart/form-data">     //파일전송일 때는 항상 METHOD는 POST로 하고 ENCTYPE을
                                                                                                          //항상 주 어야 함
파일1: <input type="file" name="file1"/><br>                                             //TYPE은 FILE로 주어야 함!!
파일2: <input type="file" name="file2"/><br>
파일3: <input type="file" name="file3"/><br>
파라미터1: <input type="text" name="param1"/><br>
파라미터2: <input type="text" name="param2"/><br>
파라미터3: <input type="text" name="param3"/><br>
<input type="submit" value="전송" />
</form>
</body>
</html>

<!--실제적인 데이터를 전달받기 위한 JSP 파일-->

-www.apach.org-> commons ->io,FileUpload 라이브러리를 다운 받아야 한다.

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="java.io.File"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="java.util.List"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.io.IOException"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);                   // multipart로 전송되었는가를 체크

 if (isMultipart) {                                                                                            // multipart로 전송 되었을 경우
  File temporaryDir = new File("c:\\tmp\\");                                                 //업로드 된 파일의 임시 저장 폴더를 설정
  String realDir = config.getServletContext().getRealPath("/upload/");                  //톰켓의 전체 경로를 가져오고 upload라는 폴더를 만들고 거기다
                                                                                                                  //tmp의 폴더의 전송된 파일을 upload 폴더로 카피 한다
.

  DiskFileItemFactory factory = new DiskFileItemFactory();                                   
  factory.setSizeThreshold(1 * 1024 * 1024);                                                      //1메가가 넘지 않으면 메모리에서 바로 사용
  factory.setRepository(temporaryDir);                                                               //1메가 이상이면 temporaryDir 경로 폴더로 이동
                   //실제 구현단계 아님 설정단계였음

  ServletFileUpload upload = new ServletFileUpload(factory);                              
  upload.setSizeMax(10 * 1024 * 1024);                                                             //최대 파일 크기(10M)
  List<FileItem> items = upload.parseRequest(request);                                      //실제 업로드 부분(이부분에서 파일이 생성된다)
  
  Iterator iter=items.iterator();                                                                            //Iterator 사용
  while(iter.hasNext()){
   FileItem fileItem = (FileItem) iter.next();                                                            //파일을 가져온다
   
   if(fileItem.isFormField()){                                                                               //업로드도니 파일이 text형태인지 다른 형태인지 체크
                                                                                                                    // text형태면 if문에 걸림
    out.println("폼 파라미터: "+ fileItem.getFieldName()+"="+fileItem.getString("euc-kr")+"<br>");
   }else{                                                                                                         //파일이면 이부분의 루틴을 탄다
    if(fileItem.getSize()>0){                                                                                 //파일이 업로드 되었나 안되었나 체크 size>0이면 업로드 성공
     String fieldName=fileItem.getFieldName();
     String fileName=fileItem.getName();
     String contentType=fileItem.getContentType();
     boolean isInMemory=fileItem.isInMemory();
     long sizeInBytes=fileItem.getSize();
     out.println("파일 [fieldName] : "+ fieldName +"<br/>");
     out.println("파일 [fileName] : "+ fileName +"<br/>");
     out.println("파일 [contentType] : "+ contentType +"<br/>");
     out.println("파일 [isInMemory] : "+ isInMemory +"<br/>");
     out.println("파일 [sizeInBytes] : "+ sizeInBytes +"<br/>");
     
     try{
      File uploadedFile=new File(realDir,fileName);                                                   //실제 디렉토리에 fileName으로 카피 된다.
      fileItem.write(uploadedFile);
      fileItem.delete();                                                                                            //카피 완료후 temp폴더의 temp파일을 제거
     }catch(IOException ex) {} 
    }
   }
  }
 }else{
  out.println("인코딩 타입이 multipart/form-data 가 아님.");
 }
%>
</body>
</html>

신고
Name
Password
Homepage
Secret