index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="index.jsp?han=한글">Send GET</a><br>
<form name="hanForm" method="POST" action="index.jsp">
<input type="hidden" name="han" value="한글"/>
<input type="submit" value="Send POST"/>
</form>

</body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String han = request.getParameter("han");
if(han == null || han.equals(""))
han="한글";

//String charsets[] = {"euc-kr", "ksc5601", "iso-8859-1", "utf-8"};
//for(int i=0;i<charsets.length;i++)
//for(int j=0;j<charsets.length;j++)
//System.out.println(charsets[i] + " to " + charsets[j] + " : " + new String(han.getBytes(charsets[i]), charsets[j]));
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=han + ": " + han.getBytes().length + " Bytes "%><br/>
<a href="index.jsp?han=<%=han %>">Send GET</a><br>
<form name="hanForm" method="POST">
<input type="hidden" name="han" value="<%=han %>"/>
<input type="submit" value="Send POST"/>
</form>
</body>
</html>

catalrina home/conf/server.xml

...

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>
...

eclipse

window > preferences > Web > CSS Files, HTML Files, JSP Files > Encoding: ISO 10646/Unicode(UTF-8)

eclipse

window > preperences > Geneeral > Content Types > Text > Default encoding : UTF-8 > Update

eclipse

servers > Open launch configration > Common > Encoding > Other UTF-8

WEB-INF/web.xml

<!-- CharacterEncodingFilter -->
<filter>
<filter-name>Encoding Filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

WEB-INF/lib

org.springframework.web.jar

org.springframework.beans.jar

org.springframework.context.jar

org.springframework.core.jar

commons-logging.jar

한 페이지 내의 frame 또는 iframe 간에 서로 세션ID가 다른 경우가 발생함.

Explorer 버그라는데...

WEBMain.xml의 <context-group> 노드 아래에아래 설정을 추가한다.

...

<context-group>
...

<response-header>
<custom-header>
<header-field>
<field-name>P3P</field-name>
<field-value>CP='CAO PSA CONi OTR OUR DEM ONL'</field-value>
</header-field>
</custom-header>
</response-header>
...

</context-group>

...

'Java' 카테고리의 다른 글

window java background start.bat, stop.bat  (0) 2011.09.30
Eclipse Tomcat 환경에서 UTF-8 적용하기  (2) 2011.09.28
iBATIS SQL Maps 튜토리얼  (0) 2008.09.23
iBATIS SQL Maps 튜토리얼  (0) 2008.09.04
iBATIS SQL Maps 개발자 가이드  (0) 2008.09.04
iBATIS-SqlMaps-2-Tutorial_ko.pdf
iBATIS-SqlMaps-2_ko.pdf

boolean flag1 = false;

boolean flag2 = false;

... 생략 ...

// 트랜잭션 처리

... 생략 ...

if(트랙잭션 처리 성공여부)
{
flag1 = true;

//트랜잭션성공시 처리

... 생략 ...

}
else
{
flag1 = false;

if(flag1 && flag2)
{
flag1 = true;
flag2 = true;
}
else
{
flag1 = false;
flag2 = (flag1)?true:false;
}
}

... 생략 ...

지금 하는 프로잭트가 기존 업무를 리뉴얼 하는 작업인데

AS-IS를 보면 위와 같은 로직들이 상당히 많이 보여진다.

이게 뭥미... -.,ㅡ;;;

기냥 이렇게 하면 되지 참나...

boolean flag1 = false;

boolean flag2 = false;

... 생략 ...

// 트랜잭션 처리

... 생략 ...

if(트랙잭션 처리 성공여부)
{
flag1 = true;

flag2 = true;

//트랜잭션성공시 처리

... 생략 ...

}
else
{
flag1 = false;

flag2 = false;

}

... 생략 ...

이전 작업한 사람이 무슨 생각으로 저렇게 만들어 놨는지... 당췌

boolean flag1 = false;
boolean flag2 = false;

... 생략 ...

if(flag1 && flag2)
{
flag1 = true;
flag2 = true;
}
else
{
flag1 = false;
flag2 = (flag2)?true:false;
}

이런 것도... ㅋㅋ

프로그램 이렇게 짜지 말자.

<%
String url = "thisPageName.jsp?";
Enumeration e = request.getParameterNames();
while(e.hasMoreElements())
{
String name = (String)e.nextElement();
if(request.getParameter(name)!=null)
{
url += name + "=" + request.getParameter(name) + "&";
}
else
{
url += name + "=" + "" + "&";
}
}
%>

asp나 php로는 간단하게 구현되는 섬네일이 자바에서는구현하기가 만만치 않다.

불행중 당행으로JDK 1.4 부터는 Image I/O API가 추가되었다고 하니

JDK 1.4 이상이거나 MS Windows이거나 유닉스라도 X-Window가 구동이 되는 환경이라면

잠깐의 웹 검색만으로 훌륭한 샘플을 얻을 수 있을것이다.

아쉽게도 본인이 일하는 곳의 환경 SUN Solaris에 Weblogic 6.1 + JDK 1.3

X window 설정이 제되로 되어 있지 않았다.

(전임자가 이런 저런 방법으로 일주일정도 고생했는데 X-Window설정을 잡지 못하고 포기했다고 한다.)

여기저기 검색끝에 PJA Toolkit 이라는 놈을 이용하면X-Window 없이도 섬네일을 구현할 수 있다고 한다.

http://blog.naver.com/jeany4u/30000252147

국내 사이트에서 검새으로 찾은 PJA에 관한 자료는 모두 이글의 카피본 인듯 하다.

본인역시 저 글을 참조했지만 설명이 부족해서 인지 한나절 정도 헤멨다.(토요일 오후에 이게 뭔짓거리인지 -.,ㅡa)

자세한 내용이 궁금하신 분은 저위에 링크되어 있는 글과http://www.eteks.com/pja/en/사이트를 참고 하시길...

(붉은색으로 표시된 곳은 자신의 환경에 맞도록 하면됨)

1. http://www.eteks.com/pja/en/#Download에서 Other platforms pja_2.5.zip을 받는다.

2. 압축을 풀면 몇개의 jar파일이 생성되는데

pja_2.5/lib/pja.jar

pja_2.5/lib/pjatools.jar

이 두개의 jar파일만 있으면 된다.서버의 원하는 위치에 위치하도록 한다.

본인의경우 /user/pja/lib 아래에 두었다.

3. /user/pja/lib/fonts 폴더를 생성

4. 우리 서버의 경우 jdk1.3 이 /user/jdk131 에 설치되어 있었다.

jdk1.3 JVM의 폰트를 가져다 쓰도록 했다.

/user/jdk131/jre/lib/font.properties-> /user/pja/lib/font.properties 복사

/user/jdk131/jre/lib/font.properties.co -> /user/pja/lib/font.properties.co복사

/user/jdk131/jre/lib/fonts/*.ttf->/user/pja/lib/fonts/*.ttf 복사

5. /user/bea/wlserver6.1/config/mydomain/startWebLogic.sh에 자바옵션을 추가

# For PJA Image library
JAVA_OPTIONS="$JAVA_OPTIONS -Xbootclasspath/a:/user/pja/lib/pja.jar"
JAVA_OPTIONS="$JAVA_OPTIONS -Dawt.toolkit=com.eteks.awt.PJAToolkit"
JAVA_OPTIONS="$JAVA_OPTIONS -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment"
JAVA_OPTIONS="$JAVA_OPTIONS -Djava2d.font.usePlatformFont=false"
JAVA_OPTIONS="$JAVA_OPTIONS -Duser.home=/user/pja/lib"
JAVA_OPTIONS="$JAVA_OPTIONS -Djava.awt.fonts=/user/pja/lib/fonts"
CLASSPATH=$CLASSPATH:/user/pja/lib/pjatools.jar

각 변수의 의미는 http://blog.naver.com/jeany4u/30000252147를 참고하도록 한다.

CLASSPATH에 pjatools.jar 를 걸어주지 않으면 일부 클래스를 import하지 못함

물론 pjatools.jar의 클래스를 사용하지 않을꺼라면 안해도 무방

6. 웹로직을 재기동 한다.

7. 샘플 JSP

<%@ page import="java.awt.*"%>
<%@ page import="java.io.*"%>
<%@ page import="Acme.JPM.Encoders.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="java.awt.image.*"%>
<%
String args[] = new String[5];
args[0] = "/user/webroot/pjatest/DSC_2078.JPG"; // 절대 경로를 사용해야 한다.
args[1] = "/user/webroot/pjatest/thumbDSC_2078.jpg"; // 절대 경로를 사용해야 한다.
args[2] = "200";
args[3] = "300";
args[4] = "80";
Image image = Toolkit.getDefaultToolkit().getImage(args[0]);
MediaTracker mediaTracker = new MediaTracker(new Frame());
mediaTracker.addImage(image, 0);
mediaTracker.waitForID(0);
// determine thumbnail size from WIDTH and HEIGHT
int thumbWidth = Integer.parseInt(args[2]);
int thumbHeight = Integer.parseInt(args[3]);
double thumbRatio = (double)thumbWidth / (double)thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double)imageWidth / (double)imageHeight;
if (thumbRatio < imageRatio) thumbHeight = (int)(thumbWidth / imageRatio);
else thumbWidth = (int)(thumbHeight * imageRatio);
// draw original image to thumbnail image object and
// scale it to the new size on-the-fly (drawImage is quite powerful)
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
// save thumbnail image to OUTFILE
BufferedOutputStream Imgout = new BufferedOutputStream(new FileOutputStream(args[1]));
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(Imgout);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = Integer.parseInt(args[4]);
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float)quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
%>
<IMG SRC="/pjatest/DSC_2078.JPG" ALT="">
<IMG SRC="/pjatest/thumbDSC_2078.jpg" ALT="">

8. Java Beans로만든샘플다운로드

PJAThumbNail.java

'Java' 카테고리의 다른 글

이런코딩 하지말자  (0) 2008.07.09
[JSP] request.getParameterNames(); 예제  (0) 2008.07.09
[UNIX] crontab에서 자바프로그램 실행(한글문제 해결법)  (1) 2007.04.11
[Java] Singleton 패턴...  (0) 2007.01.09
[Java] ftp client  (0) 2007.01.09

일반적 환경이 설정되어 있는유닉스 서버에 telnet으로 로그인을 해서

Java 컴파일이나class를 실행하는 등 작업을 하면 잘 되는데

주기적으로 해야 하는 작업이 필요해 커맨드라인 명령을 똑같이 crontab에 등록을 하면

잘 실행되던 명령도 에러를 내면서 원하는 결과가 나오지 않는 경우가 자주 있다.


원인은 환경변수때문인데...

telnet으로 로그인 할경우 쉘의 종류에 따라서 유저의 홈디렉토리에 있는 .profile(본쉘), .cshrc(C쉘) 파일들이 마치 윈도우의 시작 프로그램처럼 자동으로 실행되어서 PATH, CLASSPATH, 터미널타입, 에디터, 프롬프트의 모양 등의 여러가지 환경변수들이 자동으로 설정된 상태에서 Java프로그램을 실행하기 때문에 명령줄 실행하는 것들은 잘 실행되는 것이다.

하지만 crontab으로 자바클래스을 실행하는 것은 telnet로그인과는 무관하기때문에 자바프로그램을 실행하는 스크립트를 만들어 실행전에 환경변수를 원하는 형태로 잡아주던가 아주 긴 형태의 자바실행명령(ex:java -classpath ...... -D...... )을 크론텝에 등록해줘야 한다.

게다가 자바에서 사용하는 유니코드와 UNIX시스템의 한글코드방식이 다른경우가 대부분이기때문에 Java프로그램에서 System.out.println(...)과 같은 Standard OUT의 내용과 File OUT등 한글 출력이 깨지게 된다.

해결 방법은 여러가지가 있지만... 본인은자바 환경변수 file.encoding을 지정하는 방법으로 해결했다. 사용하는 머신의 한글 엔코딩 방식을 알고 있다면 바로 적용하면 되고 잘 모른다면 한글 출력예제 프로그램을작성 해서 테스트 해보자 

(샘플 다운로드 1176266469_EncodeingTest.java EncodeingTest.java)


샘플 프로그램은 한글을 오라클 DB, System.out, file OUT 등으로 출력하는 프로그램이다.

/user/hantest/ 디랙토리를 생성하고

$java-Dfile.encoding=EUC_KR EncodingTest EUC_KR >> /user/hantest/EUC_KRSTD.out

$java-Dfile.encoding=8859_1 EncodingTest 8859_1 >> /user/hantest/8859_1STD.out

$java-Dfile.encoding=UTF_8 EncodingTest UTF_8 >> /user/hantest/UTF_8STD.out

등등 무식하게...(-.,ㅡa) 돌려보자


프로그램 내부에서 file io로 출력하는 .txt 파일과 STD OUT을 담는 .out 파일이 둘다 제대로 나오는 엔코딩 방식을 선택하면 된다.

위 샘플은 오라클 접속을 하기때문에 오라클 드라이버가 클래스패스에 잡혀있어야 제대로 동작한다.

DB한글 테스트가 필요 없는 경우에는 오라클 관련 부분을 제거하면 된다.

결론으로 우리서버의 경우 EUC_KR 방식이었다.

============================================================================================

#!/bin/sh

CLASSPATH=.:/user/java1.3.1/lib/dt.jar:/user/java1.3.1/lib/tools.jar:...생략..:

export CLASSPATH

cd /user/batch

java -Dfile.encoding=EUC_KR DailyCronbJob >> /user/batch/log/DailyCronbJob`date +%Y%m`.log
============================================================================================

SUN Os 5.6 에서 테스트한 샘플 입니다.

이렇게 쉘 스크립트를 작성해 주고

크론텝에 등록해 주면 완료

public static class Singleton1

{
pirvate static final Singleton1 theInstance = new Singleton1();
public static Singleton1 getInstance()
{
return theInstance;
}
}

혹은...

public static class Singleton2

{
private static Singleton2 theInstance;
public static synchronized Singleton2 getInstance()
{
if (theInstance == null)
theInstance = new Singleton2();
return theInstance;
}
}

+ Recent posts