Spring Tool Suite 3.0.0.RELEASE

 

스프링 소스 툴 슈트(STS) 3.0.0 이 드디어 릴 됐다. 13일자 업데이트 내용을 참조하고 아래 주소에서 다운로드 받으면 된다. 약간은 심플하고 어찌보면 투박해 보이기까지 한 UI를 보여주고 있다.

물론 STS 이전에 eclipse 4.2버전에 맞추어 개발되었기 때문이겠지만, 항상 새로운 것을 접한다는 것은 설레이게 마련이다.

 

http://www.springsource.org/downloads/sts-ggts

 

Groovy / Grails 전용으로도 IDE를 만나볼 수 있다.

 

업데이트 사이트를 통해 업데이트도 가능해 졌다.

 

자, 이제 사용하기만 하면 된다. ㅋㅋ

'Languages > Java' 카테고리의 다른 글

servlet에서 outputstream을 사용하기  (0) 2012.07.19
자바기초(1) Hello World  (0) 2012.06.29
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

1. response.setContentType() 으로 파일의 MIME type 을 지정하여

browser가 받아들일 준비를 할 수 있게 한다.

 

response.reset();

response.setContentType("application/octet-stream");

 

2. getServletContext()ServletContext를 받아온 후,

getResourceAsStream()으로 파일에 대한 InputStream을 만든다.

 

3. response에 대한 OutputStream을 만들고,

 

4. buffer 역할을 하는 byte array를 통해서

stream 내용을 loop 으로 복제하고 flush 한다.

 

※ 이는 일반적인 링크 방식으로 GET 하지 않도록 막을 수 있다.

※ 각종 robot 에 의한 무분별한 GET 이나

※ role base와 같은 형태로 권한을 걸어줄 수도 있다.

 

'Languages > Java' 카테고리의 다른 글

Spring Tool Suite 3.0.0.RELEASE  (0) 2012.08.16
자바기초(1) Hello World  (0) 2012.06.29
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

모처럼 그루비 스크립트로 코딩을 하다보니 한글이 깨져서 나왔다.

 

한글깨짐 현상은 어느 언어에서나 나오는 문제이기도 하고, 

대한민국의 개발자라면 참 서럽고 귀찮은 문제가 아닐 수 없다.

 

그래서 찾아봤다.

 

Matthias Bohlen said...

 

set the system property
groovy.source.encoding=UTF-8

 

You can do that on the command line:
export JAVA_OPTS=-Dgroovy.source.encoding=UTF-8

 

Or in Eclipse.ini (if you work with Eclipse)
-Dgroovy.source.encoding=UTF-8

 

Cheers
Matthias

June 22, 2009 4:19 PM

 

이제 됐다.

 

난 이클립스가 아니라 STS를 사용한다.

 

일단 적용 해 보고 콘솔이든 화면이든 한글을 좀 제대로 써 볼 수 있게 되었다.

 

만쉐이!

 

[추가내용]

혹시라도 이클립스나 STS에서 돌릴 때,

별도의 쉘창이나 그루비 전용 콘솔창에서는 한글이 잘 보이는데, STS 하단의 콘솔에서만 한글이 깨지는 경우는

Run > Run Configurations... > 스크립트 파일 선택  후 우측 Common 탭에서

Encoding 다이얼로그 부분을 UTF-8로 설정한다.

 

또는, 개별적으로 설정하기 귀찮다면,

 

Run >> Run Configuration >> application or server(java ee) 선택 >> common 탭 >> console encoding : UTF-8 로 변경, 그리고 Apply~!

 

이것도 적용해 본다.

 

 

 

'Languages > Groovy' 카테고리의 다른 글

Groovy DB 접속 테스트  (0) 2012.07.04

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

1. 목표 : 그루비 스크립트로 아주 간단하게 DB 접속을 해보고자 한다.

2. 방법 : 아주 많이 사용하는 My-SQL과 Oracle 에 각각 접속을 해 본다.

 

먼저 My-SQL ...

 

소스 코드는 아래와 같다

 

import groovy.sql.*;

void testSelect() {
    def url = "jdbc:mysql://localhost:3306/test"
    def username = "사용자명" 
    def passwd = "패스워드"
    def driver = "com.mysql.jdbc.Driver" 
    def sql = groovy.sql.Sql.newInstance(url, username, passwd, driver) 
    def strSql = "select now() as now_date"
    def list = sql.rows(strSql)
	      sql.eachRow(strSql) { row -> println row.now_date}
    // println list
}
testSelect()

 

이번에는 Oracle ...

import groovy.sql.Sql

sql = Sql.newInstance("jdbc:oracle:thin:${아이피}:${포트}:${SID}","아이디"
		,"패스워드","oracle.jdbc.driver.OracleDriver")

rows =[]

sql.eachRow("select to_char(sysdate, 'yyyy-mm-dd, HH24:mi:ss') sys_date from dual"){
	rows << it.toRowResult()
}

rows.each {println rows.sys_date}

 

몇 줄 안되는 코드로 위와 같이 접속 테스트를 진행해 봤다.

 

다음 목표는 인서트, 업데이트..... 기대하시라~!!

'Languages > Groovy' 카테고리의 다른 글

그루비 한글이 깨져나올 때...  (0) 2012.07.05

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

"자바를 한번 해보자!" 라고 생각하는 개발자나 개발자이기를 희망하는 분들이 있다.

흔히 프로그래머라고 하면 까만 화면에 알아 볼 수 없는 텍스트 들로 컴퓨터와 대화를 하는 족속들을 떠올리기 쉽다.

막상 개발자가 되어보면 별 것 아닌 일이지만, 처음 보는 사람들에겐 무척이나 신기하고 어려워 보이는게 사실이다.

그래서 잠깐 시간이 난 사이 몇 가지 기초적인 이야기들을 해볼까 한다.

 

우선 자바는 이런거다~ 하고 시작하면 벌써 졸음이 오고 짜증이 밀려오는 분들이 있기에 화면에 뭔가 찍히는 것을 보고

'아 이렇구나~!'를 같이 느껴 봤으면 하는 생각에 몇 자 적어 보려고 한다.

 

몇 줄 안썼는데 벌써 뭔가 답답함이 밀려온다. ㅎㅎ 나만 그런가?

 

우선 코드부터 보자.

이쯤에서 생각나는게 자바는 컴파일 언어라서 바로 뭔가 보이지 않는다. 컴파일 하는 방법도 모르는 분들에게

죄송함이 밀려온다. 차차 그 과정도 설명해 보겠다.

우선 자바가 돌아가는 환경을 만드는 작업부터 설명하고 싶었는데, 그건 일단 미뤄야 겠다.

며칠 전 이클립스 버전도 4.2 버전이 출시되었고, STS도 3.0.0M 버전이 나왔다는데, 마일스톤 버전이라 정식

배포까지는 좀 기다려야 하나보다.

뭔 소리냐고 하시는 분들이 있을까봐 각설!

 

public class HelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Hello, World!");

	}

}

 

우선 자바가 돌아가는 환경은 구축 되어 있다고 가정하고

(안되시는 분들은 여러 곳에서 검색을 통해 기본적으로 JDK나 jre정도는

설치를 해 주시길 바란다. 거기 위의 소스도 대강 정리는 되어 있을 것 같은데..

괜한 짓을 하고 있는 걸까? 암튼 ....)

 

자바는 텍스트(문자) 형태로 코딩을 한다. C나 C++도 마찬가지다.

한줄한줄 명령을 내리면 컴파일 과정에서 컴퓨터가 알아 듣는 코드로 바뀌고

우린 그걸 실행하는 것으로 컴퓨터와 대화를 한다.

 

위의 코드를 메모장이나 울트라 에디트 등의 편집기, 혹은 이클립스라는 개발툴을 이용해 타이핑 한 후,

HelloWorld.java 라는 이름으로 저장을 하자. 우선 하자!

 

자바는 대소문자를 구분하기 때문에 이를 무시하고 마구 때려 넣으면 성질을 낸다.

잘 보고 타이핑 해야 한다.

 

컴파일 방법은 간단하다. 윈도우 환경이라면, 그리고 패스 설정이 잘 되어 있다면,

윈도 환경에서 실행>cmd (엔터) 쳤을 때의 까만 화면에서 이를 컴파일 해 볼 수 있다.

컴파일 명령은 아래와 같다.

 

javac HelloWorld.java

 

정상적으로 컴파일이 되었다면, 실행을 해 보자.

실행 명령은 아래와 같다.

 

java HelloWorld

 

실행하면 아래와 같이 나온다.

 

Hello, World!

 

모든 개발자들이 여기부터 시작했다는 것을 잊지 말기 바란다.

 

여기까지 잘 되었다면 이제 머리아픈 설명을 조금 덧붙이고자 한다.

 

- public class HelloWorld 의 의미 :

 

지금 만든 이 녀석은 클래스이고, 이름은 HelloWorld이며 어디서든

접근 가능하다는 뜻이다.

 

뒤에 붙는 {} 안에 그 내용을 적는다.

 

- public static void main(String[] args)

 

이녀석은 클래스 내부 어디서나 사용할 수있는 스태틱 메소드 이고 리턴값은 없으며(void) 이름은 main이고, 외부에서도 접근 가능(public)하다.

String이란 문자들로 이루어진 배열 형태의 이름이 args라는 인자를 가진다.

 

두 줄만 붙잡고 얘기했는데 겁나 머리아프다. 일단 무시하고 넘어가자. 클래스를 만들었고 그 안에 메소드가 있다고 그냥 알고 넘어가면 된다.

 

- System.out.println("Hello, World!");

 

화면에 Hello, World! 라고 찍으라는 명령이다. 물론 화면이 아니라 다를 곳이 될 수도 있다. 기본적인 출력 방향이 모니터이기에 모니터에

원하는 글씨가 찍혔다고 보면 된다.

 

 

 

 

 

 

 

 

 

 

'Languages > Java' 카테고리의 다른 글

Spring Tool Suite 3.0.0.RELEASE  (0) 2012.08.16
servlet에서 outputstream을 사용하기  (0) 2012.07.19
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

웹 개발자다 보니 애플리케이션 실행의 빈도가 매우 낮다.

 

그러다 보니 꼭 잊어버린다.

 

이클립스 or STS 에서 해당 프로젝트에 오른쪽 마우스 클릭 후,

 

 Properties > Run/Debug Settings > New > Java Application > OK >

 

Arguments Tab > VM arguments 에 다음을 추가

 

-Dfile.encoding=MS949

 

그 후 Apply ~ ! > OK !

 

잊지 말자.

 

잊었으면 찾아라도 보자. ㅜㅜ

'Languages > Java' 카테고리의 다른 글

servlet에서 outputstream을 사용하기  (0) 2012.07.19
자바기초(1) Hello World  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
간단한 암호화 모듈  (0) 2012.06.25
EJB란?  (1) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

DOM Script라는 말이 있는데, 이는 새로운 스크립트를 말하는 것은 아니다. 사실 DOM Script 라는 말은 없다. DOM 과 Script는 구분 되는 개념이다. 다만 두 개념이 아주 밀접한 관계가 있어서 연결해서 부르고 있을 뿐이다.

 

1.DOM

DOM은 문서의 논리적 구성을 말한다.

좁게 예기하지만 논리적 마크업이다.

DOM에선 문서의 각 요소를 노드(Node)라고 부르며 요소 노드(Element Node)와 텍스트 노드(Text Node) 및 요소 노드에 있는 속성 값들을 속성 노드(Atrribute Node)로 인식한다.

 



2.스크립트

스크립트의 표준은 ECMA Script이며 대부분 자바스크립트 중에서 표준을 정한 것이다. 거의 대부분의 브라우저가 ECMA Script를 지원한다. 다만 스크립트 작성 시 아래 사항을 고려해야한다.

 

 

 

● onclick과 같은 이벤트 핸들러를 마크업에 추가하면 스크립트의 완벽한 분리가 어려우며 id나 class를 사용하여 외부 스크립트 함수를 통해 실행 되도록 한다.

● return false;를 추가하여 스크립트 미작동 환경에서는 마크업의 a 태그가 실행되도록한다.

● 하위 호환성을 위해 if (!document.getElementById) return false;를 추가한다.

● 브라우저가 문서를 다 불러온 후 코드가 실행되도록 onload이벤트를 추가한다.

 

 

[출처] 웹표준과 DOM Script (컴퓨터/웹표준/웹접근성/사진/여행...) |작성자 박실짱

'Languages > JavaScript' 카테고리의 다른 글

동적 폼 생성 스크립트  (0) 2012.06.22

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

Java API 모음

Languages/Java 2012. 6. 25. 21:48

자바 1.5 api 영문 : http://java.sun.com/j2se/1.5.0/docs/api/index.html
 
자바 1.6 api 영문 : http://java.sun.com/javase/6/docs/api/
 
자바 1.7 api 영문 : http://docs.oracle.com/javase/7/docs/api/index.html

 

스프링 2.5 api 영문 : http://static.springsource.org/spring/docs/2.5.x/api/index.html

 

스프링 3.1 api 영문 : http://static.springsource.org/spring/docs/3.1.x/javadoc-api/

 

그루비 api 영문 : http://groovy.codehaus.org/groovy-jdk/
 
Tomcat 5.5 Servlet api 영문 : http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html
 
Tomcat 5.5 Jsp api 영문 : http://tomcat.apache.org/tomcat-5.5-doc/jspapi/index.html
 
Tomcat 6.0 api 영문 : http://tomcat.apache.org/tomcat-6.0-doc/api/index.html
 
Tomcat 7.0 api 영문 : http://tomcat.apache.org/tomcat-7.0-doc/api/index.html
 
Tomcat 7.0 Servlet api 영문 : http://tomcat.apache.org/tomcat-7.0-doc/servletapi/index.html
 
Tomcat 7.0 Jsp api 영문 : http://tomcat.apache.org/tomcat-7.0-doc/jspapi/index.html
 
iBatis dev api : http://ibatis.apache.org/docs/java/dev/
 
iBatis user api : http://ibatis.apache.org/docs/java/user/

 

자바 POI API 영문 : http://poi.apache.org/apidocs/

'Languages > Java' 카테고리의 다른 글

자바기초(1) Hello World  (0) 2012.06.29
AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
간단한 암호화 모듈  (0) 2012.06.25
EJB란?  (1) 2012.06.21
POJO란 무엇인가?  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

아주아주 간단한 암호화 모듈을 하나 소개 합니다.

암호화 : 키 값을 정하고 정한 키값과 스트링을 입력해서 암호화된 스트링을

반환 받습니다.

복호화 : 키 값과 암호화 된 스트링을 입력하면 원래의 암호화 되기 전 스트링 값을 리턴 받습니다.

 

소스는 아래와 같습니다.

 

package enc;


import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * Usage:
 * 
 * String crypto = SimpleCrypto.encrypt(masterpassword, cleartext)
 * ...
 * String cleartext = SimpleCrypto.decrypt(masterpassword, crypto)
 * 
* @author ferenc.hechler */ public class SimpleCrypto { private final static String HEX = "0123456789ABCDEF"; public static String encrypt(String seed, String cleartext) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] result = encrypt(rawKey, cleartext.getBytes()); return toHex(result); } public static String decrypt(String seed, String encrypted) throws Exception { byte[] rawKey = getRawKey(seed.getBytes()); byte[] enc = toByte(encrypted); byte[] result = decrypt(rawKey, enc); return new String(result); } private static byte[] getRawKey(byte[] seed) throws Exception { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(seed); kgen.init(128, sr); SecretKey skey = kgen.generateKey(); byte[] raw = skey.getEncoded(); return raw; } private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(clear); return encrypted; } private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] decrypted = cipher.doFinal(encrypted); return decrypted; } public static String toHex(String txt) { return toHex(txt.getBytes()); } public static String fromHex(String hex) { return new String(toByte(hex)); } public static byte[] toByte(String hexString) { int len = hexString.length()/2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue(); return result; } public static String toHex(byte[] buf) { if (buf == null) return ""; StringBuffer result = new StringBuffer(2*buf.length); for (int i = 0; i < buf.length; i++) { appendHex(result, buf[i]); } return result.toString(); } private static void appendHex(StringBuffer sb, byte b) { sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f)); } public static void main(String args[]) { SimpleCrypto cr = new SimpleCrypto(); // 암호화 Key 설정 String key = "EncTestByKimByoungKi"; try { System.out.println("Encryped ID1 : " + cr.encrypt(key, "tds")); System.out.println("Encryped PW1 : " + cr.encrypt(key, "1qaz@WSX")); System.out.println("Encryped ID2 : " + cr.encrypt(key, "tds_dev2")); System.out.println("Encryped PW2 : " + cr.encrypt(key, "dnsdud123!")); System.out.println("Encryped ID1 : " + cr.decrypt(key, "58544B468EE67EB87FF2A617FFB7D7C0")); System.out.println("Encryped PW1 : " + cr.decrypt(key, "C9D99D34BB00936FA1C0731D98873CE2")); System.out.println("Encryped ID2 : " + cr.decrypt(key, "4D7E7AD0670DC2FCD0E9D7D4C98008A8")); System.out.println("Encryped PW2 : " + cr.decrypt(key, "3DFB2746F3CBD8D87D7E239DD7ADBE4C")); } catch (Exception e) { e.printStackTrace(); } } }

이클립스 등에서 실행 해보면 간단한 암/복호화를 실제 해볼 수 있습니다.

 

'Languages > Java' 카테고리의 다른 글

AWT, Swing 이클립스에서 실행시 한글 깨짐  (0) 2012.06.29
Java API 모음  (0) 2012.06.25
EJB란?  (1) 2012.06.21
POJO란 무엇인가?  (0) 2012.06.21
History of Java  (0) 2012.06.21

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,

아주 자주 사용하는 자바스크립트 함수중에 동적으로 폼을 생성하고, 히든 값을 추가하고, 서브밋 하는 함수를 소개하고자 한다.

물론 자바스크립트에서 [폼네임].submit(); 으로 대부분의 포스트 방식으로 페이징이 가능하지만,

그렇게 되면 HTML 상에 폼 태그가 반드시 있어야 하고, 폼의 위치나 전송방법 때문에 애를 먹는 일이 종종 있다.

그래서 얘를 조금 바꿔봤다.

 

	/* 폼: 생성 */
	function formCreate(nm,mt,at,tg) {
	 var f = document.createElement("form");
	 f.name = nm;
	 f.method = mt;
	 f.action = at;
	 f.target = tg ? tg : "_self";
	 return f;
	} 
	
	/* 폼: 인풋 생성 */
	function formInput(f,n,v) {
	 var i = document.createElement("input");
	 i.type = "hidden";
	 i.name = n;
	 i.value = v;
	 //f.appendChild(i);
	 f.insertBefore(i, null);
	 //f.insertBefore(i);
	 return f;
	}
	
	 /* 폼: 전송 */
	function formSubmit(f) {
	 document.body.appendChild(f);
	 f.submit();
	} 

이렇게 세 개의 함수를 공통으로 사용하는 js 파일에 추가한 뒤, 아래와 같이 사용한다.

 

function goCategoryPage(category_name) {
	var frm = formCreate('frmCategory','post','/main/category.do','');
	frm = formInput(frm, 'category_name', category_name);
	formSubmit(frm);	
}

1.  첫 번째 인자는 동적으로 만들 폼 이름을 정해주는 것이고,

    두 번째 인자는 포스트 방식과 겟방식 모두를 지원하기 위해 인자로 받는다.

    세 번째 인자는 이동하고자 하는 페이지다. 서버상에 존재하는 경로를 적는다.

    위의 예제에서는 '/main/category.do' <---- 요게 이동하고자 하는 페이지다.

     ( jsp를 바로 부른다고 하면 --> "/test/formtest.jsp" 이런걸 쓰면 된다.)

    네 번째 인자는 타겟인데, 페이지를 전송하는 대상이 자신이 아닌 프레임이나, 아이프레임, 혹은 팝업일 경우

    유용하게 사용할 수 있다.(포스트 방식의 팝업에 많이 썼던 것 같다.)

2.  frm = formInput(frm, 'category_name', category_name);

    얘는 동적으로 생성한 폼에 히든 값을 추가할 때 사용한다. 위의 예제에서는 'category_name' 이란 이름으로

    받아온 값을 'category_name' 이란 변수에 담아 폼에 저장해 준다. (얘를 이용하면 지저분한 폼태그와 히든 값

   넣는 태그 없이 값을 실을 수 있다.

3.  formSubmit(frm); --> 동적으로 만든 폼을 body 태그에 붙여준다. 동적으로 만들었기 때문에 메모리상에만

    존재하던 폼을 실제 HTML에 추가하고 해당 폼을 submit 해준다.

 

'/main/category.do' 라는 페이지로 category_name 의 값을 담아서 전송한다. 해당 페이지에서는 늘 하던 것 처럼

리퀘스트로 값을 받아서 처리할 수 있다.

 

'Languages > JavaScript' 카테고리의 다른 글

웹표준과 DOM Script  (0) 2012.06.27

WRITTEN BY
GrimReaper
안녕하세요 Grim Reaper의 티스토리에 오신 것을 환영합니다.

,