기존에 Sun JDK 를 사용하려면 많이 불편했었지요. FreeBSD 에서도 OpenJDK 를 사용할 수 있습니다. 설치는 아래와 같이 간단합니다.
# pkg_add -r openjdk7
# mount -t fdescfs fdesc /dev/fd
# echo "fdesc   /dev/fd         fdescfs         rw      0       0" >> /etc/fstab
혹시라도 JAVA_HOME 을 잡아주어야 하는 상황이라면, 아래와 같이 잡아주시면 되겠습니다.
export JAVA_HOME="/usr/local/openjdk7"
이제 실행해보면:
# java -version
openjdk version "1.7.0"
OpenJDK Runtime Environment (build 1.7.0-root_2011_12_03_14_00-b00)
OpenJDK Client VM (build 21.0-b17, mixed mode)
어때요? FreeBSD 에서도 OpenJDK 덕분에 Java 환경을 쉽게 구성할 수 있어서 좋네요~


CentOS에서 JDK를 설치하려면, 내장 패키지인 OpenJDK 를 설치하면 아주 쉽게 된다. 물론 Oracle 에서 다운로드 받아서 해도 되지만, 쉬운 방법이 있으니 그냥 쉽게 하자. OpenJDK도 특별히 문제 없고, 대부분 리눅스 배포판에서도 지원하고 있으니, 맘 놓고 사용하면 될 것 같다.

  • OpenJDK 패키지 확인/설치
    # yum list all | grep jdk
    gnu-crypto-sasl-jdk1.4.i386               2.1.0-2jpp.1                base
    java-1.6.0-openjdk.i386                   1:1.6.0.0-1.16.b17.el5      updates
    java-1.6.0-openjdk-demo.i386              1:1.6.0.0-1.16.b17.el5      updates
    java-1.6.0-openjdk-devel.i386             1:1.6.0.0-1.16.b17.el5      updates
    java-1.6.0-openjdk-javadoc.i386           1:1.6.0.0-1.16.b17.el5      updates
    java-1.6.0-openjdk-src.i386               1:1.6.0.0-1.16.b17.el5      updates
    ldapjdk.i386                              4.18-2jpp.3.el5             base
    ldapjdk-javadoc.i386                      4.18-2jpp.3.el5             base
    mockobjects-alt-jdk1.4.i386               0.09-14jpp.3                base
    mockobjects-jdk1.4.i386                   0.09-14jpp.3                base
    
    # yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel
    
  • Java 버전을 확인해본다.
    # javac -version
    javac 1.6.0_17
    # java -version
    java version "1.6.0_17"
    OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-i386)
    OpenJDK Client VM (build 14.0-b16, mixed mode)
    
개요
"최범균의 JSP 2.0 프로그래밍" 이라는 책의 내용중 파일업로드 하는 부분이 나오는데, 해당 라이브러리의 버전이 오래된 것이어서 테스트에 약간의 문제가 있었습니다. 이에 최신 버전으로 테스트할 수 있는 예제 소스를 정리해보았습니다. Java의 파일 업로드 모듈로 많이 사용되는 Apache commons fileUpload 의 최신 버전은 2008년 12월 31일 현재 1.2.1 입니다.또한, FileUpload 는 commons-io 1.3.2 에 의존적입니다.
예제

◎ fileUploadForm.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head><title>파일 업로드 폼</title></head>
<body>
<form action="processFileUpload.jsp" method="post" enctype="multipart/form-data">
파일1: <input type="file" name="file1" /><br/>
파일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>

◎ processFileUpload.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="java.io.File" %>
<%@ page import="java.io.BufferedInputStream" %>
<%@ page import="java.io.BufferedOutputStream" %>
<%@ page import="java.io.FileOutputStream" %>
<%@ page import="java.io.IOException" %>
<html>
<head><title>파일 업로드 처리</title></head>
<body>
<%
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if( isMultipart ) {
    File temporaryDir = new File("/tmp/");

    // Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // Set factory constraints
    factory.setSizeThreshold(1024*100);
    factory.setRepository(temporaryDir);
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // Set overall request size constraint
    upload.setSizeMax(1024*1024);
    // Parse the request
    List /* FileItem */ items = upload.parseRequest(request);

    // Process the uploaded items
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
        FileItem fileItem = (FileItem) iter.next();

        if (fileItem.isFormField()) {
            // processFormField(fileItem);
            out.println("폼 파라미터 : " + fileItem.getFieldName() + "=" + fileItem.getString("utf-8") + "<br/>");
        } else {
            // processUploadedFile(fileItem);
            out.println("파일 : " + fileItem.getFieldName() + "=<pre>" + fileItem.getString() + "</pre>(" + fileItem.getSize() + " bytes)<br/>");

            // 업로드한 파일이 존재하는 경우
            if( fileItem.getSize() > 0 ) {
                int idx = fileItem.getName().lastIndexOf("\\");
                if( idx == -1 ) {
                    idx = fileItem.getName().lastIndexOf("/");
                }
                String fileName = fileItem.getName().substring(idx + 1);

                try {
                    File uploadedFile = new File("/opt/project/jspstudy/web/chap16/data/", fileName);
                    fileItem.write(uploadedFile);
                } catch(IOException ex) {}
            }
        }
    }
} else {
    out.println("인코딩 타입이 multipart/form-data 가 아님.");
}
%>
</body>
</html>

저장하고자 하는 디렉토리는 바꾸어서 테스트해보시기 바랍니다.
이제 몇시간 후면 2009년이 되는군요. 내년도 건강하고 즐거운 한 해가 되시기 바랍니다.


오랜만의 포스팅이군요~ 그동안 이래저래 바빴답니다. 이번에는 FreeBSD 에서 Java 를 설치하는 방법을 정리하였습니다.

JDK는 라이센스 문제로 재배포를 할 수가 없다고 합니다. 그래서 사용자가 직접 사이트에서 다운로드하여 설치해야만 합니다. FreeBSD에 설치할 수 있는 JDK는 여러가지가 있습니다. 우선, /usr/ports/java 로 이동해보고 ls 를 해보면 여러 디렉토리가 나올 것입니다. jikes,diablo-jdk15, diablo-jre15, jdk11 ~ jdk16, linux-blackdown-jdk14,linux-sun-jdk12 ~ linux-sun-jdk16 과 같이 다양한 JDK를 볼 수 있습니다. 이중에서 diablo-jdk15 와 jdk15 를 설치하는 방법을 살펴보겠습니다. 그 전에 포트를 최신으로 업데이트 합니다.

# portsnap fetch update

포트를 처음 업데이트 하는 것이라면 # portsnap fetch extract update 로 업데이트해주셔야 합니다. 포트 업데이트를 하지 않으면 아래의 tzupdater 의 해당 버전을 구할 수 없는 문제가 발생할 수 있으니, 꼭 업데이트 해야 합니다. 아래 설치방법은 현재(2008-05-15)를 기준으로 FreeBSD 7.0 에서 작성되었습니다.

diablo-jdk15 설치

/usr/ports/java/diablo-jdk15 로 이동하여 바로 make 를 하면 에러를 보게 될 것이다.
우선, http://www.FreeBSDFoundation.org 에서 diablo-caffe-freebsd6-i386-1.5.0_07-b01.tar.bz2 를 다운로드 받고,
http://java.sun.com/javase/downloads/index.jsp 에서 tzupdater-1_3_5-2008b.zip 을 다운로드 받는다.
그리고, 다운로드 받은 파일을 /usr/ports/distfiles 에 복사한다.
이제 아래와 같이 수행하면 잘 설치될 것입니다.

# cd /usr/ports/java/diablo-jdk15
# make; make install

jdk15 설치

역시, /usr/ports/java/jdk15 로 이동하여 make 를 하면 에러를 보게 됩니다.
그러니, http://download.java.net/tiger/archive/tiger_u14/ 에서 jdk-1_5_0_14-fcs-src-b03-jrl-05_oct_2007.jar 와 jdk-1_5_0_14-fcs-bin-b03-jrl-05_oct_2007.jar 다운로드 받고,
http://java.sun.com/javase/downloads/index.jsp 에서 tzupdater-1_3_5-2008b.zip 을 다운로드 받는다.
http://www.eyesbeyond.com/freebsddom/java/jdk15.html 에서 bsd-jdk15-patches-8.tar.bz2 를 다운로드 받습니다.
그리고, 다운로드 받은 파일을 /usr/ports/distfiles 에 복사한다.
이제 아래와 같이 수행하면 잘 설치될 것입니다.

# cd /usr/ports/java/jdk15
# make; make install

jdk16 도 같은 방법으로 다운로드/설치하면 될 것 같습니다. diablo-sdk 는 1.6 버전이 없고, 꾸준이 업데이트되는 것 같지 않습니다. 따라서, java.net 에서 제공되jdk15 또는 jdk16을 설치해서 쓰는것이 좋을 듯 합니다.

+ Recent posts