« Previous : 1 : 2 : 3 : 4 : 5 : ... 12 : Next »



참조 페이지 : http://blog.naver.com/minis24?Redirect=Log&logNo=80099448440


protected Object formBackingObject(HttpServletRequest request) throws Exception {
  logger.debug("### login page"); 
  return super.formBackingObject(request);
  
 }  

protected ModelAndView showForm(HttpServletRequest request, 
                                                     HttpServletResponse response, 
                                                     BindException errors)throws Exception{
  ModelAndView view = null;
/**
 * # BindException 객체는 커맨드 객체의 정보와 파라미터 값 검증 결과 정보를 담고 있는 객체.
 * # errors.getModel() 은 Map 타입의 객체를 리턴, Map 타입 객체는 <객체이름, 객체> 와 같이 저장
 * # 뷰에서 commandName을 통해서 커맨드 객체에 접근할 수 있음.
 * - view.addAllObject(errors.getModel()); 와 같이 사용 가능
 */
  String ipAddr = request.getRemoteAddr();
  String[] ipArr = ipAddr.split("\\.");
 /**
  * 접속자의 아이피를 체크하여 일부 허용.   
  */
  if(ipArr[0].equals("172") || 
     ipArr[0].equals("192") || 
     ipAddr.equals("211.221.223.111")){
   view = super.showForm(request, response, errors);
  }else{
   view = new ModelAndView("redirect:/error.do");
  }
  return view;
 } 



11 30, 2011 17:40 11 30, 2011 17:40

Trackback URL : http://develop.sunshiny.co.kr/trackback/677

Leave a comment


import java.util.Enumeration;
import java.util.Properties;

/**
* FileName : ShowSystemInfo.java
* Comment  : static Properties getProperties(), static String getProperty(String key) 
*          : 현재 시스템 정보를 알아낼 때 사용
*/
public class ShowSystemInfo {
    public static void main(String arr[]){

        /*
         * java.runtime.name     : 자바 실행환경(JRE)의 이름
         * java.runtime.version  : 자바 실행환경의 버전
         * java.vm.version       : 자바 VM의 버전
         * os.name               : 운영체제의 이름
         * java.class.path       : 환경변수 CLASSPATH에 지정된 경로명
         * user.language         : 사용 언어
         * sun.cpu.isalist       : CPU 종류 
        */        
        String attr = "java.runtime.version";
        System.out.println(attr + "=" + System.getProperty(attr));
        
        // 시스템의 추출 가능한 모든 속성 정보를 출력
        Properties prop = System.getProperties();
        Enumeration enums = prop.propertyNames();
        String key;
        while(enums.hasMoreElements()){
            key = (String)enums.nextElement();
            System.out.println(key + "=" + System.getProperty(key));
        }
    }
}


import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
* FileName : HashMapTest.java
* Comment  : entrySet() 메소드를 이용하여 원소를 Set 객체로 변환
*            Set 인터페이스의 iterator() 메소드를 이용하여 Iterator 객체를 생성
*            Iterator 객체의 next()메소드가 리턴하는  Map.Entry 객체를 이용하여
*            key값과 value값을 참조
*/
public class HashMapTest {
    public static void main(String[] arr){
        Map sp = new HashMap(System.getProperties());
        Set entries = sp.entrySet();
        Iterator it = entries.iterator();
        Entry entry;
        while(it.hasNext()){
            entry = (Entry) it.next();
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
        
        Map sp2 = new HashMap();
        sp2.putAll(System.getProperties());
    }
}


# 출력 결과
java.runtime.version=1.6.0_17-b04
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\bin
java.vm.version=14.3-b01
java.vm.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
file.encoding.pkg=sun.io
user.country=KR
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine
java.runtime.version=1.6.0_17-b04
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\endorsed
os.arch=x86
java.io.tmpdir=C:\Users\SUNSHINY\AppData\Local\Temp\
line.separator=

java.vm.specification.vendor=Sun Microsystems Inc.
user.variant=
os.name=Windows 7
sun.jnu.encoding=MS949
java.library.path=D:\01.WORKS_PROGRAM\JAVA\JDK6.17\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/01.WORKS_PROGRAM/JAVA/JDK6.17/bin/../jre/bin/client;D:/01.WORKS_PROGRAM/JAVA/JDK6.17/bin/../jre/bin;D:\oracle\product\11.2.0\dbhome_1\bin;C:\Program Files\Common Files\NetSarang;D:\oracle\product\10.2.0\client_1\bin;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\ESTsoft\ALZip;D:\01.WORKS_PROGRAM\APM_Setup\Server\Apache\bin;D:\01.WORKS_PROGRAM\APM_Setup\Server\MySQL5\bin;D:\01.WORKS_PROGRAM\APM_Setup\Server\PHP5;C:\Program Files\TortoiseSVN\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\ESTsoft\ALZip;D:\01.WORKS_PROGRAM\apache-tomcat-5.5.26/common/lib;D:\oracle\product\11.2.0\dbhome_1\BIN;D:\oracle\SqlQuery\test01;C:\Program Files\ESTsoft\ALSee
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot Client Compiler
os.version=6.1
user.home=C:\Users\SUNSHINY
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=MS949
java.specification.version=1.6
user.name=SUNSHINY
java.class.path=D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\bin;D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\lib\classes12.jar;D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\lib\commons-lang-2.4.jar;D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\lib\commons-logging.jar;D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\lib\commons-net-2.0.jar;D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\lib\mail.jar;D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\lib\servlet-api.jar;D:\10.WORKS\01.JAVA\01.MYSPACE\Sunshiny_Engine\lib\sinetfactory.jar;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\rt.jar
java.vm.specification.version=1.0
sun.arch.data.model=32
java.home=D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre
java.specification.vendor=Sun Microsystems Inc.
user.language=ko
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode, sharing
java.version=1.6.0_17
java.ext.dirs=D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
sun.boot.class.path=D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\resources.jar;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\rt.jar;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\sunrsasign.jar;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\jsse.jar;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\jce.jar;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\lib\charsets.jar;D:\01.WORKS_PROGRAM\JAVA\JDK6.17\jre\classes
java.vendor=Sun Microsystems Inc.
file.separator=\
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86

08 7, 2011 10:46 08 7, 2011 10:46

Trackback URL : http://develop.sunshiny.co.kr/trackback/653

Leave a comment



getCurrentlyURL.java
    /**
    * Comment  : 현재 페이지의 서블릿 URL 전체 경로를 추출. 
    */
    public static String getCurrentlyURL(HttpServletRequest req){
        Enumeration<?> param = req.getParameterNames();

        StringBuffer strParam = new StringBuffer();
        StringBuffer strURL = new StringBuffer();

        if (param.hasMoreElements()){
            strParam.append("?");
        }

        while (param.hasMoreElements()){
            String name = (String) param.nextElement();
            String value = req.getParameter(name);

            strParam.append(name + "=" + value);

            if (param.hasMoreElements()){
                strParam.append("&");
            }
        }

        String url;
        if(req.getAttribute("javax.servlet.forward.request_uri") == null) {
            url = req.getRequestURI().toString();
        }
        else {
            url = req.getAttribute("javax.servlet.forward.request_uri").toString();
        }
        // contextPath 제거, 필요한 값(/index.do)
        url = url.replace(req.getContextPath(),"");


        //# URL 에서 URI 를 제거, 필요 값만 사용(프로토콜, 호스트, 포트)
        String getUrl = req.getRequestURL().toString().replace(req.getRequestURI(), "");
        strURL.append(getUrl);
        strURL.append(url); // servlet 경로 : /index.do 
        strURL.append(strParam); // getQueryString() 값
        
        // 전체 추출 경로 : http://www.aaa.co.kr/index.do?type=aaa(쿼리스트링)
        return strURL.toString();
    }




JSP


<%@ page import="com.util.Utilities" %>

<%@ page import="java.net.URLEncoder" %>

<%
    // SNS 로 넘길 URL 경로 전체와 제목을 를 인코딩 함
    String urlEnc = URLEncoder.encode(Utilities.getCurrentlyURL(request), "utf-8");
    Report report = (Report)request.getAttribute("report");
    String pubTitle = URLEncoder.encode("\""+report.getReportTitle()+"\"", "utf-8");
    // 트위터 타이틀에 "" 있을시, 교차 사이트 스크립팅 오류
    String twitterTitle = URLEncoder.encode(report.getReportTitle(), "utf-8"); 

%>

<c:set var="currentlyEncURL" value="<%=urlEnc%>" />

<c:set var="facebookTitle" value="<%=pubTitle%>" />
<c:set var="twitterTitle" value="<%=twitterTitle%>" />
<c:set var="me2dayTitle" value="<%=pubTitle%>" />


<div id="snsSet">
   <a href="http://www.facebook.com/share.php?u=${currentlyEncURL}&t=${facebookTitle}" target="blank"><img src="${contextPath}/img/sns/facebook_b.gif"  alt="페이스북 보내기" /></a>
   <a href="http://twitter.com/share?url=${currentlyEncURL}&text=${twitterTitle}" target="blank"><img src="${contextPath}/img/sns/twitter_b.gif"  alt="트위터 보내기" /></a>
   <a href="http://me2day.net/posts/new?new_post[body]=${me2dayTitle}:${currentlyEncURL}&new_post[tags]=${me2dayTitle}" target="blank"><img src="${contextPath}/img/sns/me2day_b.gif"  alt="미투데이 보내기" /></a>
</div>




07 6, 2011 11:08 07 6, 2011 11:08

Trackback URL : http://develop.sunshiny.co.kr/trackback/641

  1. # 이종훈 2011年 10月 15日 14時 54分 Delete Reply

    이거 어떻게 사용하는건가요..

    죄송하지만 예제좀 만들어서 제 메일로 보내주시면 안될까요 ㅠㅠ

    배우고싶은데 아무리 찾아봐도 어렵네요 ㅠ..

    mose_love@naver.com 부탁드립니다 ㅠ

    1. Re: # sunshiny 2011年 10月 16日 16時 16分 Delete

      메일 보내드렸습니다.
      좋은 하루 보내세요^^

Leave a comment

Javascript - 중복 체크 알고리즘

Posted 01 10, 2011 10:25, Filed under: Language/JavaScript


  window.onload = function(){
   var submitBt = document.getElementById("submitBt");
   submitBt.onclick = function(){
    if(document.getElementById("newsTitle").value.length == 0){
     alert("제목을 입력하세요.");
     return false;
    }
    
    if(document.getElementById("fileName").value.length == 0){
     alert("파일명을 입력하세요.");
     return false;
    }

    // 중복된 태그 체크     if(checkTagName(document.getElementById('tagName').value)){      }else{       return false;      };             return confirm("등록하시겠습니까?");    };   };



 // 중복 태그 체크 함수.
 function checkTagName(tagList){
  var tagArr = tagList.split(',');
  var isTrue = true;
  for(i=0; i<tagArr.length-1; i++){
   for(j=i; j<tagArr.length-1; j++){
    if(tagArr[i] == tagArr[j+1]){
     alert("중복된 태그가 있습니다.");
     isTrue = false;
     }
    }
   }
  return isTrue;
  } 

01 10, 2011 10:25 01 10, 2011 10:25

Trackback URL : http://develop.sunshiny.co.kr/trackback/580

Leave a comment



# 차트 관련 예제및 소스 : http://www.java2s.com/Code/Java/CatalogJava.htm
참고사이트 : www.jfree.org
샘플예제 Applet 실행 : http://mimul.com/examples/jfree/jfreechart-1.0.10-demo.jnlp

# 차트 한글 깨짐 현상시 확인

# BarChartBean.java

package util.chart;

import org.jfree.chart.*;
import org.jfree.data.category.*;
import org.jfree.chart.renderer.category.*;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.*;
import java.awt.*;

/**
 * FileName : BarChartBean.java
 * Comment  : 
 * @version : 1.0
 * @author  : sunshiny
 * @date    : 2011. 1. 5.
 */
public class BarChartBean {

	public static void main(String arg[]){
		BarChartBean bcb = new BarChartBean();

		JFreeChart chart = bcb.getBarChart();
		ChartFrame frame1 = new ChartFrame("Bar Chart",chart);
		frame1.setSize(700,250);  
		frame1.setVisible(true);
		frame1.setLocation(100, 200);


	}

	public JFreeChart getBarChart() {
		String titleStr = "차트 타이틀";

		// row keys...
		final String series1 = "First";
		//        final String series2 = "Second";
		//        final String series3 = "Third";

		// column keys...
		final String category1 = "서울";
		final String category2 = "부산";
		final String category3 = "대구";
		final String category4 = "인천";
		final String category5 = "광주";
		final String category6 = "대전";
		final String category7 = "울산";
		final String category8 = "경기";
		final String category9 = "강원";
		final String category10 = "충북";
		final String category11 = "충남";
		final String category12 = "전북";
		final String category13 = "전남";
		final String category14 = "경북";
		final String category15 = "경남";
		final String category16 = "제주";

		// create the dataset...
		final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

		dataset.addValue(1.0, series1, category1);
		dataset.addValue(5.0, series1, category2);
		dataset.addValue(4.0, series1, category3);
		dataset.addValue(27.0, series1, category4);
		dataset.addValue(30.0, series1, category5);
		dataset.addValue(10.0, series1, category6);
		dataset.addValue(11.0, series1, category7);
		dataset.addValue(7.0, series1, category8);
		dataset.addValue(2.0, series1, category9);
		dataset.addValue(16.0, series1, category10);
		dataset.addValue(19.0, series1, category11);
		dataset.addValue(22.0, series1, category12);
		dataset.addValue(23.0, series1, category13);
		dataset.addValue(27.0, series1, category14);
		dataset.addValue(31.0, series1, category15);
		dataset.addValue(12.0, series1, category16);

		JFreeChart chart = ChartFactory.createBarChart(titleStr, "", ""
				, dataset, PlotOrientation.VERTICAL, true,true, false);

		/**
		 * Chart 폰트 설정, 클래스 파일 위치 : package org.jfree.chart.StandardChartTheme.java
		 * 		
		 */
		chart.getTitle().setFont(new Font("sansserif", Font.BOLD, 20));
		chart.getLegend().setItemFont(new Font("sansserif", Font.BOLD, 15));
		chart.getCategoryPlot().setNoDataMessageFont(new Font("sansserif", Font.BOLD, 15));
		chart.getPlot().setNoDataMessageFont(new Font("sansserif", Font.BOLD, 15));

		System.out.println(chart.getPlot().getNoDataMessageFont().getName());

		chart.setBackgroundPaint(Color.WHITE);
		chart.getTitle().setPaint(Color.orange);

		StandardCategoryItemLabelGenerator stdCateGen 
		= new StandardCategoryItemLabelGenerator();
		BarRenderer barRender = new BarRenderer();

		CategoryPlot plot = chart.getCategoryPlot();

		barRender.setItemLabelGenerator(stdCateGen); // 그래프별 값 출력
		plot.setRenderer(barRender);                 // 그래프별 값 출력

		/*		plot.setDomainAxis(new CategoryAxis("지역"));
		plot.setRangeAxis(new NumberAxis("수치"));
		plot.setOrientation(PlotOrientation.VERTICAL);
		 */

		//		plot.setDomainGridlinesVisible(true);
		plot.setRangeGridlinesVisible(true); // 가로 그리드 라인 보이기

		plot.setRangeGridlinePaint(Color.GRAY); 
		plot.setBackgroundPaint(Color.WHITE);

		// set the range axis to display integers only...
		final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
		rangeAxis.setUpperMargin(0.40);

		// disable bar outlines...
		final CategoryItemRenderer renderer = plot.getRenderer();
		renderer.setSeriesItemLabelsVisible(0, Boolean.TRUE);

		final CategoryAxis domainAxis = plot.getDomainAxis();
		// x축 문자열 회전(STANDARD, UP_45, UP_90,DOWN_45,DOWN_90)
		domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD); 
		domainAxis.setLowerMargin(0.01d);
		domainAxis.setUpperMargin(0.01d);
		domainAxis.setCategoryMargin(0.30);

		return chart;
	}
}
# chart.jsp
<%@ page language="java" contentType="image/png; charset=UTF-8"	pageEncoding="UTF-8" %>
<%@ page import="org.jfree.chart.*" %>
<%@ page import="util.chart.*"%>
<%@ page import="java.util.*"%>
<%@ page import="org.jfree.data.category.*"%>
<%@ page import="org.jfree.ui.RefineryUtilities"%>
<%@ page import="org.jfree.chart.plot.PlotOrientation"%>


<%
	ServletOutputStream sos = response.getOutputStream();
	BarChartBean bcb = new BarChartBean();
	JFreeChart chart = bcb.getBarChart();
	ChartUtilities.writeChartAsPNG(sos, chart, 700, 250);
	

/*
	심각: Servlet.service() for servlet jsp threw exception
	java.lang.IllegalStateException: getOutputStream() has already been called for this response
	# Exception
	jsp에서 outputStream을 사용할때 servlet에서 생성된 writer 객체와 중복이 되어서 발생하는 에러.
	이때 servlet에서 생성된 writer 객체를 clear 시키고 jsp에서 다시 생성해서 사용하면 되는것.
	
*/
	out.clear();
	out = pageContext.pushBody();	

%>
# Result Chart Image 사용자 삽입 이미지
01 5, 2011 10:20 01 5, 2011 10:20

Trackback URL : http://develop.sunshiny.co.kr/trackback/579

Leave a comment


1. DefaultPieDataset ds = new DefaultPieDataset();
   ds.setValue("BarChart, PieChart 동일 한글 깨짐.", new Double(40.0));
   ds.setValue("aaaa", new Double(40.0));
 
  JFreeChart chart = ChartFactory.createPieChart("득점현황", ds, true, true, false);
 
  System.out.println(chart.getTitle().getFont().getName());

  // ==> 폰트를 확인한다.
  ServletOutputStream out = res.getOutputStream();
 
  ChartUtilities.writeChartAsPNG(out, chart, 400, 400);    
  out.flush();
  out.close();


2. 컴퓨터에 없는 폰트일 시 한글깨짐

   1) jfreechart-1.0.13.jar파일의 압축을 풀고
   2) E:\jfreechart-1.0.13\org\jfree\chart\StandardChartTheme.class 파일을 역 컴파일
   3) StandardChartTheme메소드의 font부분을 모두 sansserif 로 바꾼다.
   4) 다시 컴파일, E:\jfreechart-1.0.13 위치에서
   5)  jar cvf jfreechart-1.0.13.jar org 로 다시 jar파일 생성
   6) was의 사용 lib폴더로 jar 파일을 교체하면 완료

3. 아래 첨부한 StandardChartThem.java 파일을 프로젝트에 적용하면 우선 적용되어짐.
package org.jfree.chart; 와 같이 패키지의 경로를 동일하게 생성.
프로젝트의 lib 폴더에는 jfreechart-1.0.13.jar 파일이 존재해야함.

- 버전 -
jfreechart 라이브러리 : jfreechart-1.0.13
java 컴파일 버전 : 1.5

 
    public StandardChartTheme(String name)
    {
        gridBandPaint = SymbolAxis.DEFAULT_GRID_BAND_PAINT;
        gridBandAlternatePaint = SymbolAxis.DEFAULT_GRID_BAND_ALTERNATE_PAINT;
        if(name == null)
        {
            throw new IllegalArgumentException("Null 'name' argument.");
        } else
        {
            this.name = name;
            extraLargeFont = new Font("돋음", Font.BOLD, 20);
            largeFont = new Font("돋음", Font.BOLD, 14);
            regularFont = new Font("돋음", Font.BOLD, 12);
            smallFont = new Font("sansserif", 0, 10);



 


01 4, 2011 13:38 01 4, 2011 13:38

Trackback URL : http://develop.sunshiny.co.kr/trackback/578

Leave a comment


import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
#java에서 지원하는 ZipEntry, zipOutputStream 을 사용 하면 경로 내의 디렉토리명, 파일명에서 한글을 사용할경우 깨지는 현상이 발생.

jazzlib 라이브러리를 사용하면 한글깨짐 문제가 해결됩니다.
import net.sf.jazzlib.ZipEntry;
import net.sf.jazzlib.ZipOutputStream;

jazzlib 는 http://jazzlib.sourceforge.net 여기에서 다운로드 할수있습니다.
또는 아래에서 다운 하세요.

jar 파일 :
 
 

 

아래 내용 출처 :
http://cafe.naver.com/itmecca.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1737

###################### ZipUtils.java ######################

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import net.sf.jazzlib.ZipEntry;
import net.sf.jazzlib.ZipInputStream;
import net.sf.jazzlib.ZipOutputStream;

/**
* FileName : ZipUtils.java
* Comment  : # 인자값 내용
   # createZipFile(압축할디렉토리위치, 저장될zip파일의 경로를 포함한파일명, 디렉토리 없을시 생성여부)
*/
public class ZipUtils {
    private static final byte[] buf = new byte[1024];
    
    /**
    * Comment  : 생성될 ZIP파일의 경로에 디렉토리가 없을경우 에러  발생
    */
    public static void createZipFile(String targetPath, String zipPath)throws Exception{
        createZipFile(targetPath, zipPath, false);
    }
    
    /**
    * Comment  : zip 파일을 생성.
    */
    public static void createZipFile(String targetPath, String zipPath, boolean isDirCre)throws Exception{
        File fTargetPath = new File(targetPath);
        File[] files = null;
        
        if(fTargetPath.isDirectory()){
            files = fTargetPath.listFiles();
        }else{
            files = new File[1];
            files[0] = fTargetPath;
        }
        
        File path = new File(zipPath);
        File dir = null;
        dir = new File(path.getParent());
        if(isDirCre){
            dir.mkdirs();
        }
        
        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(path));
        
        // zip 파일 압축
        makeZipFile(files, zipOut, "");
        
        // stream을 닫음으로서 zip 파일 생성
        zipOut.close();
        
    }
    
    
    /**
    * Comment  : # 일부 파일들을 배열로 설정하여 zip 파일 생성
    * ex) String[] arrZip = new String[]{"C:\\aaa.txt", "C:\\bbb.txt", "C:\\ccc.txt"}
    *     ZipUtils.createZipFile(arrZip, "C:\\test.zip");
    */
    public static void createZipFile(String[] targetFiles, String zipPath)throws Exception{
        createZipFile(targetFiles, zipPath, false);
    }
    
    /**
    * Comment  : # 일부 파일들을 배열로 설정하여 zip 파일 생성 (디렉토리 생성여부 선택)
    */
    public static void createZipFile(String[] targetFiles, String zipPath, boolean isDirCre)throws Exception{
        File[] files = new File[targetFiles.length];
        for(int i = 0; i < files.length; i++){
            files[i] = new File(targetFiles[i]);
        }
        
        File path = new File(zipPath);
        File dir = null;
        dir = new File(path.getParent());
        if(isDirCre){
            // 디렉토리가 없을경우 생성
            dir.mkdirs();
        }
        
        // zip 파일의 outputStream
        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(path));
        
        // zip 파일 압축
        makeZipFile(files, zipOut, "");
        
        // stream을 닫음으로서 zip 파일 생성
        zipOut.close();
    }
    
    
    /**
    * Comment  : zip 파일의 압축을 해제
    */
    public static void unZipFile(String targetZip, String completeDir)throws Exception{
        unZipFile(targetZip, completeDir, false);
    }    
    
    /**
    * Comment  :
    */
    public static void unZipFile(String targetZip, String completeDir, boolean isDirCre)throws Exception{
        ZipInputStream in = null;
        
        try{
            File fCompleteDir = null;
            fCompleteDir = new File(completeDir);
            if(isDirCre){
                // 디렉토리가 없을경우 생성
                fCompleteDir.mkdirs();
            }
            
            // zip 파일의 input stream을 읽어들임
            in = new ZipInputStream(new FileInputStream(targetZip));
            ZipEntry entry = null;
            
            // input stream내의 압축된 파일들을 하나씩 읽어들임.
            while((entry = in.getNextEntry()) != null){
                System.out.println("entry : " + entry);
                // zip 파일의 구조와 동일하게 가기위해 로컬의 디렉토리 구조를 만듬.
                String entryName = entry.getName();
                if(entry.getName().lastIndexOf("/") > 0){
                    String mkDirNm = entryName.substring(0, entryName.lastIndexOf("/"));
                    System.out.println("mkDirNm : " + mkDirNm);
                    new File(completeDir + mkDirNm).mkdirs();
                }
                // 해제할 각각 파일의 output stream을 생성
                FileOutputStream out = new FileOutputStream(completeDir + entry.getName());
                
                int bytes_read;
                while((bytes_read = in.read(buf)) != -1){
                    System.out.println("bytes_read : " + bytes_read);
                    out.write(buf, 0, bytes_read);
                }
                // 하나의 파일이 압축해제됨
                out.close();
            }
        }catch(Exception e){
            throw new Exception(e);
        }finally{
            // 모든 파일의 압축이 해제되면 input stream을 닫는다.
            in.close();
        }
    }
    
    // byte 배열을 받아서 압축된 byte배열을 리턴
    public static byte[] compressToZip(byte[] src)throws Exception{
        byte[] retSrc = null;
        ByteArrayOutputStream baos = null;
        
        try{
            // zip 파일의 output Stream
            ByteArrayInputStream bais = new ByteArrayInputStream(src);
            baos = new ByteArrayOutputStream();
            ZipOutputStream zos = new ZipOutputStream(baos) ;
            
            zos.putNextEntry(new ZipEntry("temp.tmp"));
            
            int bytes_read = 0;
            // 전달받은 src를 압축하여 파일에 씀
            while((bytes_read = bais.read(buf)) != -1){
                zos.write(buf, 0, bytes_read);
            }
            bais.close();
            zos.close();
            
            // 스트림을 닫은후 byte배열을 얻어옴
            retSrc = baos.toByteArray();
        }catch(Exception e){
            throw new Exception(e);
        }finally{
            baos.close();
        }
        
        return retSrc;
    }
    
    // 압축된 byte 배열을 받아서 zipPath위치에 zip 파일을 생성한다.
    private static void makeZipFile(byte[] src, String zipPath)throws Exception{
        FileOutputStream fos = null;
        ByteArrayInputStream bais = null;
        
        try{
            fos = new FileOutputStream(zipPath);
            bais = new ByteArrayInputStream(src);
            
            int bytes_read = 0;
            while((bytes_read = bais.read(buf)) != -1){
                fos.write(buf, 0, bytes_read);
            }
            
        }catch(Exception e){
            throw new Exception(e);
        }finally{
            fos.close();
            bais.close();
        }
    }
    
    // 압축된 byte 배열의 압축을 해제하여 byte배열로 리턴
    public static byte[] unZip(byte[] src)throws Exception{
        
        byte[] retSrc = null;
        ByteArrayOutputStream baos = null;
        ZipInputStream zis = null;
        int bytes_read = 0;
        
        try{
            zis = new ZipInputStream(new ByteArrayInputStream(src));
            baos = new ByteArrayOutputStream();
            
            zis.getNextEntry(); // entry는 하나밖에 없음을 보장
            while((bytes_read = zis.read(buf)) != -1){
                baos.write(buf, 0, bytes_read);
            }
            
            retSrc = baos.toByteArray();
        }catch(Exception e){
            throw new Exception(e);
        }finally{
            baos.close();
            zis.close();
        }
        
        return retSrc;
    }
    
    // 문자열을 압축하여 byte배열로 리턴(UTF-8)
    public static byte[] compressToZip(String src)throws Exception{
        return compressToZip(src.getBytes("UTF-8"));
    }
    
    // byte배열을 압축하여 zip 파일로 생성
    public static void srcToZipFile(byte[] src, String zipPath)throws Exception{
        byte[] retSrc = null;
        // 압축
        retSrc = compressToZip(src);
        
        // 파일로 만듬
        makeZipFile(retSrc, zipPath);
    }
    
    // byte 배열을 압축하여 zip 파일로 생성
    public static void srcToZipFile(String src, String zipPath)throws Exception{
        byte[] retSrc = null;
        
        // 압축
        retSrc = compressToZip(src.getBytes("UTF-8"));
        
        // 파일로 만듬
        makeZipFile(retSrc, zipPath);
    }
    
    // 압축된 zip파일을 해제후  byte배열로 리턴
    public static byte[] zipFileToSrc(String zipPath)throws Exception{
        byte[] retSrc = null;
        
        return retSrc;
    }
    
    public static void makeZipFile(File[] files, ZipOutputStream zipOut, String targetDir) throws Exception{
        for(int i = 0; i < files.length; i++){
            File compPath = new File(files[i].getPath());

            if(compPath.isDirectory()){
                File[] subFiles = compPath.listFiles();
                makeZipFile(subFiles, zipOut, targetDir+compPath.getName()+"/");
                continue;
            }

            FileInputStream in = new FileInputStream(compPath);
            zipOut.putNextEntry(new ZipEntry(targetDir+"/"+files[i].getName()));

            int data;

            while((data = in.read(buf)) > 0){
                zipOut.write(buf, 0, data);    
            }
            zipOut.closeEntry();
            in.close();
        }
    }
    
    public static void main(String[] arr) throws Exception{
        // 압축하기
        try {
            ZipUtils.createZipFile("D:\\02.TEMP\\backup2", "D:\\02.TEMP\\AAAA\\backup2_한글지원2.zip", true);
            //ZipUtils.unZipFile("D:\\02.TEMP\\backup2_aa.zip", "D:\\02.TEMP\\mkDirNm\\", true);
            
        /*
            // 문자열의 압축과 해제
            String str = "테스트333 데이터입니다.";
            byte[] src = str.getBytes("UTF-8");
            src = ZipUtils.compressToZip(src);
            byte[] retSrc = ZipUtils.unZip(src);
            System.out.println(new String(retSrc, "UTF-8"));
        */
        } catch (Exception e) {
            throw new Exception(e);
        }
    }
}
04 14, 2010 18:29 04 14, 2010 18:29

Trackback URL : http://develop.sunshiny.co.kr/trackback/427

  1. 파일 압축

    Tracked from Like RadioHead 11 8, 2010 19:07 Delete

    원문 출처 : http://develop.sunshiny.co.kr/trackback/427 Java - Zip 파일 형식 압축및 압축풀기(한글깨짐방지 - jazzlib 사용) Posted 2010/04/14 18:29, Filed under: Language/JAVA import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; #java에서 지원하는 ZipEntry, zipOutputS..

  1. # 쎄룽 2010年 11月 08日 19時 02分 Delete Reply

    잘보았습니다~ 퍼가두될까용?? ^^

    1. Re: # sunshiny 2010年 11月 12日 23時 46分 Delete

      에구.
      댓글 남기신걸 이제야 봤네요^^
      네~ 당연히 괜찮죠.
      저도 다른분이 정리해놓은거 가져온거 거든요.^^;
      글 남겨주셔서 고맙습니다^^

  2. # 자근앙마 2010年 12月 21日 18時 00分 Delete Reply

    감사합니다

    1. Re: # sunshiny 2010年 12月 21日 20時 37分 Delete

      네~
      글 남겨 주셔서 고맙습니다^^

  3. # 2011年 05月 31日 17時 26分 Delete Reply

    좋은 자료 감사합니다
    담아갑니다^^

    1. Re: # sunshiny 2011年 06月 02日 09時 11分 Delete

      네 고맙습니다^^

  4. # 열혈강군 2011年 07月 20日 13時 25分 Delete Reply

    좋은글이라 담아갑니다.~ ^^ 출처도 남겼습니다. 감사해요.

    1. Re: # sunshiny 2011年 07月 21日 11時 02分 Delete

      네~
      답글 고맙습니다^^

Leave a comment

Java - compile및 jar 파일 생성

Posted 04 14, 2010 17:00, Filed under: Language/JAVA

출처 : http://blog.daum.net/aswip/4508076


본 예제는 how.to 패키지내에 HelloJar 클래스를 갖는 jar파일을 생성하고
생성된 jar파일을 사용하여 HelloJar 클래스에 접근하는 방법에 대해서
설명하고 있습니다.

Step 1. HelloJar.java 소스파일 생성

package how.to;

public class HelloJar
{
public HelloJar() { }

public void PrintMsg(String msg)
{
System.out.println(msg);
}
}

Step 2. 컴파일

[root@linux ]# javac -d . *.java

위와 같이 컴파일 하면, 다음과 같이 how 디렉토리와
how 디렉토리 밑에 to 디렉토리가 자동으로 생성이되며
how/to 디렉토리 밑에는 "HelloJar.class"파일이
생성이 되어집니다.

Step 3. jar 생성

[root@linux ]# jar cvf hello.jar how
added manifest
added manifest
adding: how/(in = 0) (out= 0)(stored 0%)
adding: how/to/(in = 0) (out= 0)(stored 0%)
adding: how/to/HelloJar.class(in = 389) (out= 276)(deflated 29%)
------------------------------------------------------------------

jar 파일 생성후, 현재 디렉토리의 파일 목록을 살펴보면 다음과 같습니다.

[root@linux ]# ll
drwxr-xr-x 3 root root 4096 2008-06-04 11:29 ./
drwxr-xr-x 3 root root 4096 2008-06-04 11:28 ../
-rw-r--r-- 1 root root 926 2008-06-04 11:29 hello.jar
-rw-r--r-- 1 root root 135 2008-06-04 11:29 HelloJar.java
drwxr-xr-x 3 root root 4096 2008-06-04 11:29 how/

Step 4. Test.java 생성

import! how.to.*;
import! java.io.*;

public class Test
{
public Test() { }

public static void main(String[] args) throws IOException
{
how.to.HelloJar myJar = new how.to.HelloJar();
myJar.PrintMsg("Hello Jar");
}
}

Step 5. Test.java 컴파일

[root@linux ]# javac Test.java

Step 6. 실행

[root@linux ]# java Test
04 14, 2010 17:00 04 14, 2010 17:00

Trackback URL : http://develop.sunshiny.co.kr/trackback/428

Leave a comment

C 언어

Posted 04 2, 2010 18:38, Filed under: Language/Etc

C 언어의 자료형


정수형의 범위

정수형은 int, short long, unsigned형의 4가지이며, 정수형의 범위에 있어서 int의 경우 컴퓨터에 따라 범위가 다르므로 사용할 때 주의해야 한다.

정수형

범위

크기

short int

-32768 ~ 32767

2 byte

long int

-2147483648 ~ 2147483647

4 byte

int

-32768 ~ 32767

2 byte

unsigned short int

0 ~ 65535

2 byte

unsigned long int

0 ~ 42959667295

4 byte

unsigned int

0 ~ 65535

2 byte

 

실수형의 범위

실수형은 float, double형의 2가지이며, 소수점 형태와 지수 형태로 표현된다.

실수형

범위

크기

float

소수점이하6자리까지 기억

(지수는 -32 ~ + 32)

4 byte

double

소수점이하 12자리가지 기억

(지수는 -32 ~ +32)

8      byte

 

문자형의 범위

- char형은 한 글자를 기억한다.

- char형의 크기는 1 byte이다

- 문자는 내부적으로 0 ~ 255 사이으 정수인 ASCII 코드 값을로 처리된다.

- 문자의 치환시 단일 인용부호(' ' )로 묶어야한다.

 

 

선행 처리기


선행처리기(preprocessor)란 컴파일에 앞서 미리 처리되는 처리기를 말한다.

, C언어로 작성된 원시 프로그램을 컴파일하여 하나의 실행파일 형태를 만들어내는 데는

1 선행처리 2 컴파일 3 링킹의 3단계를 거치게 된다.

이때 원시 프로그램을 컴파일러에 전달하기 전에 사용자가 정의한 각종 내용을 먼저 처리하게 되는데(선행처리), 이를 선행처리기가 담당하게 되는 것이다.

예를 들어 C언어에 보면 *.h(헤더파일)라는 파일이 있고, *.h(stdio.h)내의 파일에는 각종 매크로와 외부 파일에 대한 정의가 들어있다.

따라서 프로그램상에 이러한 헤더 파일을 사용하게 되면 컴파일하기 전에 해당 헤더 파일을 불러와서 연결시켜 주게 되는 것이다.

 

일반적인 선행처리기의 종류와 기능

선행처리기

기능

#include

파일 포함

#define

매크로 정의

#if ~ #endif

조건부 컴파일

 

# 선행 처리기 사용시 주의사항

- 반드시 #으로 시작해야 한다.

- 명령문 끝에는 세미콜론( ; )을 붙이지 않는다.

- 한 줄에 하나의 명령만 쓴다.

- 일반적으로 첫 칸부터 기입한다.

 

 

C 언어의 표준 입출력 함수

 

- 출력함수

 printf()     화면에 여러 종류의 자료를 출력

 putchar()   화면에 1개의 문자를 출력

 puts()      화면에 문자열을 출력

 

- 입력함수

 scanf()     키보드를 통해 1개의 이상의 자료를 입력 받는다.

 getchar()   키보드를 통해 1개의 문자를 입력 받는다.

 gets()      키보드를 통해 문자열을 입력 받는다.

 

▶ 출력 양식 변환기호

% 문자

변환 기능

인자의 자료형

%d

지정한 자료를 10진 정수로 변환하여 출력

정수형, 문자형

%f

지정한 자료를 부동 소수점 형식으로 변환하여 출력

실수형

%e

지정한 자료를 지수형태로 변환하여 출력

실수형

%c

지정한 자료를 한 문자로 변환하여 출력

정수형, 문자형

%s

지정한 자료를 문자열로 변환하여 출력

문자열 포인터

%o

지정한 자료를 8진수로 변환하여 출력

정수형, 문자형

%x

지정한 자료를 16진수로 변환하여 출력

정수형, 문자형

 

 

입력 양식 변환기호

% 문자

변환 기능

%d

키보드를 통해 정수형을 입력받음

%ld

키보드를 통해 long 정수형을 입력 받음

%f

키보드를 통해 실수형을 입력 받음

%lf

키보드를 통해 double 실수형을 입력 받음

%c

키보드를 통해 문자형을 입력 받음

%s

키보드를 통해 문자열을 입력 받음

 

자료의 입 출력

(1) printf() 함수

- 형식 ; printf("출력양식", 변수 1, 변수 2, ...);

- 기능 : 주어진 양식으로 자료를 출력한다.

- 사용 예 : printf("This is an example\n");

          printf("A=%d, B=%c\n", a, b);

 

(2) scanf() 함수

- 형식 : scanf("입력양식", &변수 1, &변수 2, ....);

- 기능 : 주어진 양식으로 자료를 입력받아 지정된 기억공간(변수)에 저장.

- 사용 예 : scanf("%d", &a);

 

 

문자 단위의 입 출력

(1) getchar() 함수

- 형식 : getchar();

- 기능 : 한 문자를 키보드를 통해 입력받는다.

- 사용 예 : a = getchar();

 

(2) putchar() 함수

- 형식 : putchar(문자);

- 기능 : 한 문자를 화면에 출력한다.

- 사용 예 : putchar('A');

 

문자열 단위의 입 출력

(1) gets() 함수

- 형식 : gets(변수);

- 기능 : 문자열을 키보드로부터 입력 받는다.

- 사용 예 : char s[50]

          gets(s);

(2) puts() 함수

- 형식 : puts(변수);

- 기능 : 문자열을 화면에 출력한다.

- 사용 예 : char s[] = "seoul"

          puts(s);

 

 

연산자 우선 순위


연산자명

연산자

결함 방향

우선순위

괄호, 구조체, 공용체 연산자

() [] -> .

높음

 

 

 

 

 

 

 

 

 

 

 

 


낮음

단항 연산자

! ~ ++ -- & * sizeof()

→ 좌

 

 

 

 

이항 연산자

* / %

→ 우

∙ 감

+ -

→ 우

비트 이동

<< >>

→ 우

대소 비교

< <= > >=

→ 우

등가 판정

== !=

→ 우

비트 AND

&

→ 우

비트 XOR

^

→ 우

비트 OP

\

→ 우

논리 AND

&&

→ 우

논리 OR

||

→ 우

조건 연산자

?  :  

→ 좌

대입 연산자

= += *= ∙∙∙ &=

→ 좌

 


Escape 문자


escape 문자

기능

\n

출력시 줄바꿈(new line)

\t

수평으로 탭 이동

\f

프린터의 form feed

\a

'' 소리를 낸다.

\r

커서를 행의 시작 위치로 이동(carrige return)

\0

ASCII 코드 값 0인 문자(null 문자)

 


자료 출처 : C 프로그래밍 - 곽덕훈, 김형근 공저

04 2, 2010 18:38 04 2, 2010 18:38

Trackback URL : http://develop.sunshiny.co.kr/trackback/424

Leave a comment


에러 내용 :
java.lang.Throwable: java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
 at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
 at sun.awt.X11GraphicsEnvironment.access$000(X11GraphicsEnvironment.java:95)
 at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:184)
 at java.security.AccessController.doPrivileged(AccessController.java:192)
 at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:173)
 at java.lang.J9VMInternals.initializeImpl(Native Method)
 at java.lang.J9VMInternals.initialize(J9VMInternals.java:177)
 at java.lang.Class.forNameImpl(Native Method)
 at java.lang.Class.forName(Class.java:131)
 at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:99)
 at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1174)
 at com.sun.media.jai.codecimpl.JPEGImage.<init>(JPEGImageDecoder.java:95)
 at com.sun.media.jai.codecimpl.JPEGImageDecoder.decodeAsRenderedImage(JPEGImageDecoder.java:49)
 at com.sun.media.jai.codec.ImageDecoderImpl.decodeAsRenderedImage(ImageDecoderImpl.java:148)
 at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:60)
 at com.sun.media.jai.opimage.JPEGRIF.create(JPEGRIF.java:52)
 at javax.media.jai.OperationRegistry.create(OperationRegistry.java:2956)
 at com.sun.media.jai.opimage.StreamRIF.create(StreamRIF.java:92)
 at com.sun.media.jai.opimage.FileLoadRIF.create(FileLoadRIF.java:102)
 at javax.media.jai.OperationRegistry.create(OperationRegistry.java:2956)
 at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:402)
 at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:414)
 at javax.media.jai.RenderedOp.getHeight(RenderedOp.java:1252)
 at jeus_jspwork._servlet_engine3._MyGroup2._site._WEB_5fINF._jsp._wap._main._500_M802_5fjsp._jspService(_500_M802_5fjsp.java:153)
 at jeus.servlet.jsp.HttpJspBase.service(HttpJspBase.java:53)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at jeus.servlet.jsp.JspServletWrapper.executeServlet(JspServletWrapper.java:94)
 at jeus.servlet.servlets.JspServlet.executeServlet(JspServlet.java:423)
 at jeus.servlet.engine.RequestDispatcherImpl.processCommonRequestDispatcher(RequestDispatcherImpl.java:299)
 at jeus.servlet.engine.RequestDispatcherImpl.doForward(RequestDispatcherImpl.java:212)
 at jeus.servlet.engine.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:170)
 at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
 at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
 at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:306)
 at jeus.servlet.filter2.FilterChainImpl.internalDoFilter(FilterChainImpl.java:139)
 at jeus.servlet.filter2.FilterChainImpl.doFilter(FilterChainImpl.java:91)
 at jeus.servlet.filter2.FilterChainImpl.internalDoFilter(FilterChainImpl.java:122)
 at jeus.servlet.filter2.FilterChainImpl.doFilter(FilterChainImpl.java:91)
 at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
 at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
 at jeus.servlet.filter2.FilterChainImpl.internalDoFilter(FilterChainImpl.java:122)
 at jeus.servlet.filter2.FilterChainImpl.doFilter(FilterChainImpl.java:91)
 at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:194)
 at jeus.servlet.engine.WebtobRequestProcessor.run(WebtobRequestProcessor.java:207)
<<__!Exception__>>
javax.servlet.ServletException: sun.awt.X11GraphicsEnvironment (initialization failure)
 at jeus.servlet.jsp2.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:859)
 at jeus.servlet.jsp2.runtime.PageContextImpl.handlePageException(PageContextImpl.java:789)
 at jeus_jspwork._servlet_engine3._MyGroup2._site._WEB_5fINF._jsp._wap._main._500_M802_5fjsp._jspService(_500_M802_5fjsp.java:201)
 at jeus.servlet.jsp.HttpJspBase.service(HttpJspBase.java:53)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at jeus.servlet.jsp.JspServletWrapper.executeServlet(JspServletWrapper.java:94)
 at jeus.servlet.engine.RequestDispatcherImpl.processCommonRequestDispatcher(RequestDispatcherImpl.java:299)
 at jeus.servlet.engine.RequestDispatcherImpl.doForward(RequestDispatcherImpl.java:212)
 at jeus.servlet.engine.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:170)
 at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
 at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
 at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:306)
 at jeus.servlet.filter2.FilterChainImpl.internalDoFilter(FilterChainImpl.java:139)
 at jeus.servlet.filter2.FilterChainImpl.doFilter(FilterChainImpl.java:91)
 at jeus.servlet.filter2.FilterChainImpl.internalDoFilter(FilterChainImpl.java:122)
 at jeus.servlet.filter2.FilterChainImpl.doFilter(FilterChainImpl.java:91)
 at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
 at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
 at jeus.servlet.filter2.FilterChainImpl.internalDoFilter(FilterChainImpl.java:122)
 at jeus.servlet.filter2.FilterChainImpl.doFilter(FilterChainImpl.java:91)
 at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:194)
 at jeus.servlet.engine.WebtobRequestProcessor.run(WebtobRequestProcessor.java:207)
[2009.12.24 11:08:06][1][0_299] [container3-43] [WEB-3456] [_MyGroup2/site] fail to execute servlet : action
<<__Exception__>>


설정 방법 :
# 먼저 X11 관련 라이브러리가 설치되어있는지 확인합니다.
   - /usr/bin/X11

1. Window 로컬 환경 일경우 java -Djava.awt.headless=true Test(자바클래스파일)
   위와 같은 방법으로 시스템 속성을 설정과 함께 클래스를 실행시켜줍니다.


2. 톰켓일경우 이용할때는 catalina.sh 파일에
CATALINA_OPTS=-Djava.awt.headless=true 를 추가하고 재구동합니다.

3. 제우스일경우 /jeus/config/JEUSMain.xml
<engine-container> 부분에 -Djava.awt.headless=true 설정을 넣어줍니다.

# JEUSMain.xml
<?xml version="1.0" encoding="utf-8"?>
<jeus-system xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
    <node>
        <name>test</name>
        <engine-container>
            <name>container3</name>
            <id>123</id>
            <base-port>10981</base-port>
            <command-option>-Xms128m -Xmx512m -Djava.awt.headless=true</command-option>
            <engine-command>
                <type>servlet</type>
                <name>engine3</name>
            </engine-command>
            <invocation-manager-action>AutoClose</invocation-manager-action>
        </engine-container>



################### 에러 관련 추가 내용 - 펌글 ######################

이것은 일종의 JDK의 버그이다. 원인은 자바가 BufferedImage 를 생성하고 실제로 Graphics 객체를 얻어오기 위해 getGraphics나 createGraphics 메소드를 부를때, 실제로 display하거나 mouse, keyboard 자원을 하나도 쓰지 않을 것임에도 불구하고 내부적으로 AWT Toolkit이 그것들에 대한 자원을 얻어오게 되어있었기 때문이다. 

Sun에서는 이걸 버그로 취급하며 해결 방법은 2가지가 있다.

1. JRE 1.3 이하 일경우 www.x.org 에서 다운로드 받을 수 있는 Xvfb 라는 것을 사용하는 방법이다. 이것은 X-server 에뮬레이터이다.

참고

1.1. 가상 xwindow실행하기

1.1.1 리눅스

리눅스의 경우 XFree86-Xvfb-4.1.0-3.i386.rpm 을 설치해야 합니다.
XFree86-Xvfb-4.1.0-3.i386.rpm 패키지는 아래의 패키지가 최소한 설치되어 있어야 합니다.
XFree86-4.1.0-3.i386.rpm
Mesa-3.4.2-7.i386.rpm
Xaw3d-1.5-10.i386.rpm

설치과정중에 에러가 발생하면 아래 커맨드를 이용하여 의존성을 검사하면 됩니다.
rpm -ivh --nodeps ./Mesa-3.4.2-7.i386.rpm
rpm -ivh ./XFree86-4.1.0-3.i386.rpm
rpm -ivh ./Xaw3d-1.5-10.i386.rpm
rpm -ivh ./XFree86-Xvfb-4.1.0-3.i386.rpm

Xvfb는 100dpi 및 75dpi용 폰트도 설치되어 있어야 합니다.
폰트와 관련하여 간단하게 작업하려면 아래와 같이 하세요
wget http://www.psoft.net/downloads/X11.tgz
tar xfz ./X11.tgz -C /usr/X11R6/lib/

이제 모든 설치가 완료되면 아래 커맨드로 Xvfb를 활성화 시킵니다.
/usr/X11R6/bin/Xvfb ':0' -screen 0 100x100x8 &

이제 서버가 시작할 때 마다 이 기능을 활성화 시키려면
/etc/rc.d/rc.local에 추가하면 됩니다.

1.2.1  Solaris :

다운로드 : X11R6_bin.tar.gz

1.2.2 설치 :
% su -
# mkdir /usr/X11R6
# cp X11R6_bin.tar.gz /usr/X11R6
# cd /usr/X11R6
# gunzip X11R6_bin.tar.gz
# tar xvf X11R6_bin.tar
# rm X11R6_bin.tar


1.2.3. 자동실행
실행 스크립트 : xvfb.server 다운로드
자동 실행 설정 스크립트 : install.xvfb다운로드
xvfb.server에서 RUN_AS_USER=tomcat 을 적절히 수정 후 install.xvf 만 실행하면 끄~읕

참조 :
http://www.x.org/
http://developers.sun.com/solaris/articles/solaris_graphics.html#3
http://www.idevelopment.info/data/Unix/General_UNIX/GENERAL_XvfbforSolaris.shtml
http://chartworks.com/support/server/XvfbonUnix.html
 

2. JRE 1.4 이상에서  Headless AWT Toolkit을 이용해서 이 문제를 해결한다. 파일을 실행할때 간단히 -Djava.awt.headless=true 옵션을 주는것만으로 가능하다.
 

[참고]

java 1.4 버전 이상에서는 자바 자체에서 처리 가능하게 할수 있습니다.

리눅스에서 굳이 x-window나 xvf 깔기 귀찮다고 아니면 할줄 모르시는 분들은 간단하게 이문제를 해결하는 방법이 있습니다.

<!--
Note: If true, the system property, java.awt.headless, will be set to true.
This should be used with JDK 1.4+ on servers without graphics cards and
monitors. Otherwise, the property is not set.
-->
<!-- <headless-server>true</headless-server> -->

/WEB-INF/flex/flex-config.xml에서 이부분의 주석을 제거 해주시면 됩니다.

<headless-server>true</headless-server>


그리고 자바 구동시에(톰켓이나 레진) JVM 파라메터를 적는 부분이 있을 것입니다.

레진 같은 경우 걍 뒤에 자바 파라메터 적으면 작동됩니다.

resin start -Djava.awt.headless=true

즉 flex-config에서 headless-server 수정하고 jsp 엔진 구동시에 파라 메터 Djava.awt.headless=true 를 넣어주면 에러없이 잘 해결된다.


톰캣에서 이용할때는 catalina.sh 파일에
CATALINA_OPTS=-Djava.awt.headless=true를 추가하고 재구동하면 된다.


12 24, 2009 19:54 12 24, 2009 19:54

Trackback URL : http://develop.sunshiny.co.kr/trackback/363

Leave a comment

« Previous : 1 : 2 : 3 : 4 : 5 : ... 12 : Next »

Recent Posts

  1. Linux - Telnet 서비스 비활성및 실행
  2. NT - 서버 원격데스크탑 연결
  3. NT - http와 https간에 세션 공유가...
  4. Unix - 대량 파일 이동, 삭제시 Argu...
  5. Oracle - SYS_CONTEXT 함수를 이용하...

Recent Comments

  1. 네. 고맙습니다^^ 행복한 한해 보... sunshiny 01 16,
  2. sunshiny님. 안녕하세요... 올려 주... yihans 01 16,
  3. 답글 주셔서 고맙습니다^^ 소스 복... sunshiny 01 11,
  4. 관리자만 볼 수 있는 댓글입니다. 비밀방문자 01 11,
  5. 넵 답변감사합니다^^ 좋은 하루 되... 노로링

Recent Trackbacks

  1. 윈도우 cmd 명령어 팁 월풍도원(月風道院) - Delight on th... %M
  2. 파일 압축 Like RadioHead %M
  3. Mysql - mysql 설치후 Character set... 멀고 가까움이 다르기 때문 %M

Calendar

«   02 2012   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. Oracle All Documentation
  4. 엑셈
  5. 오라클 클럽
  6. 네이버개발자센터
  7. API - Java
  8. API - Spring
  9. Java Community
  10. Reference - Spring
  11. 스프링사용자
  12. 자바지기
  13. Ready System
  14. Solaris Freeware
  15. Linux-Site
  16. RedHat Korea
  17. 윈디하나의 솔라나라

Site Stats

TOTAL 217714 HIT
TODAY 16 HIT
YESTERDAY 115 HIT