성공하려면 오직 성공만 생각하라


성공한 사람들의 비결은 단순하다.
알고 있는 사실을 즉각 행동으로 옮기느냐,
그렇지 않느냐에 그 차이가 있다.
누구나 성공비결을 알고 있다.
다만 그것을 실행하지 못하고 있을 뿐이다.


***** 변치않는 20가지 성공 키워드 *****

1. 자기 변화를 위해 실천하라.
자기 변화에 적극적인 사람은 사회에서 인정받고 성공할 확률도 높다.
자기 변화를 위해서는 반드시 해야만 할 것이 있다. 바로 실천이다.

2. 자기만의 비전을 가져라
비전(Vision)이란 높고 올바른 꿈을 말하며, 원대한 목표이다.
지식, 기술, 신용, 건강, 의지 등등 여러 가지 힘이 있어야 비전을 실현할 수 있다.

3. 자신감을 가져라.
자신을 존중하는 마음과 자신감을 가지고 목표를 향해 최선을 다하자.
그러면 최상의 결과가 주어지게 될 것이다.

4. 신념을 가져라.
사람은 무한한 가능성을 지닌 존재이므로 신념으로 무장하면 강해진다.
"나는 할 수 있다. 세상에 안 될 일이 없다"는 신념을 가진다면 성공자가 될 것이다.

5. 긍정적인 사고를 가져라.!
긍정적인 사고는 희망에 찬 밝은 미래를 가져다 주며 성공의 길로 인도해 준다.
긍정적인 마음은 매일매일 겪는 실패나 패배조차 승리로 전환시키는 힘을 갖는다.

6. 실패를 극복하라.
만약 당신이 계획에서 실패했다면 곧바로 계획을 수정해 나가라.
패배에 좌절하지 않을려면 긍정적인 자세가 필수적이라는 사실을 명심하라.

7. 자신의 약점을 극복하라.
남보다 나은 점이 많다고 해서 반드시 남보다 성공한다는 보장은 없다.
자신의 꿈을 이루기 위해 나아가는 사람들과 가까이 지내도록 노력하라.

8. 시련을 극복하라.
시련은 회피의 대상이 아닌, 도전과 극복의 대상이어야 한다.
정면으로 맞서서 돌파하라. 그러면 시련은 아무일도 아닌 것처럼 극복될 것이다.

9. 두려움을 버려라.
마음의 상태는 언제나 무엇인가에 의해 항상 지배되고 방향을 지시 받는다.
두려움에서 벗어나 과감히 시도할 때 성공에 이를 수 있을 것이다.

10. 원만한 대인관계를 가져라.
성공한 사람들은 원만한 인간관계를 큰 자산으로 여기며, 계속 유지 확대해 나갔다.
다른 사람의 ! 도움이 전혀 없이는 성공할 수 없으며, 혼자서 살아갈 수 없다.

11. 자신을 낮추라.
남보다 나은 위치에 있을수록 겸손하게 대한다면 상대방은 나를 신뢰하게 될 것이다.
자신만이 최고라는 아집과 자만을 버리고 자신의 모자란 점을 돌아 보라.

12. 고정관념을 깨라.
고정관념을 깨지 않고서는 회사나 사회의 발전뿐 아니라 개인의 발전도 이룰 수 없다.
정보화 사회에서는 끊임없이 새로운 것에 도전하는 사람만이 성공할 수밖에 없다.

13. 칭찬을 아끼지 마라.
사람은 누구나 다른 사람으로부터 인정을 받고자 하는 마음이 있다.
칭찬하는 것을 부끄럽게 생각하거나 쑥스럽게 여겨서는 안 된다.

14. 남에게 베풀어라.
희생은 크나큰 기쁨과 무엇보다 긍정적인 사고를 부여한다.
꼭 보답을 바라고 베푸는 것은 아니지만, 대개는 주는 대로 받는 것이 인지상정이다.

15. 지식을 쌓아라.
책은 인간에게 필요한 정보와 지식을 전달하는 최고의 매체중 하나다.
엄청난 성공을 이룩한 사람들의 비밀과 비법이 담겨져 있기도 하다.

16. 가족과 친구를 사랑하라.
! 친구와 당신과의 상호 행동은 두뇌를 변화시키는 역할을 한다.
가정이 바로 서야만 자신의 성공도 이룰 수 있으며, 인생에서의 진정한 성공이다.

17. 현재의 위치에 안주하지 마라.
새로운 일에 대한 결과를 염려하기보다는 과감하게 시도해야 한다.
전정한 성공이란 자신의 인생에 최선을 다하는 것이다.

18. 시간을 관리하라.
시간을 효율적으로 관리하지 못하면 그 성공이란 더디고 힘들지도 모른다.
시간을 생명처럼 귀중히 여겨라. 시간은 언제까지 당신을 기다리지 않는다.

19. 말을 조심하라.
한번의 말실수로 돌이킬 수 없는 후회를 하게 되는 경우가 많다.
듣는 상대방의 입장을 생각하여 말을 하는 지혜가 필요하다.

20. 일에 몰두하라.
나는 혼신의 힘을 다해서 내 일에 열정을 쏟고 있는가?
성공한 사람들은 자신이 쉬지 않고 일할 수 있도록 상황을 만들어 간 사람들이다.


--- 이정창님의 성공법칙에서 ---

사용자 삽입 이미지

공자는 사람을 보는 방법을 이렇게 말했습니다.

"무릇 사람의 마음은 험하기가 산천보다 더하고,
마음속을 꽤뚫어 보기는 하늘보기 보다 더 어려운 것이다.

하늘에는 그래도 봄,여름,가을,겨울의 사계절과
아침,저녁의 구별이 있지만,
사람은 꾸미는 얼굴과 깊은 감정 때문에 알기가 어렵다.

외모는 진실한 듯하면서도 마음은 교활한 사람이 있고
겉은 어른다운 듯하면서도 속은 못된 사람이 있으며,
겉은 원만한 듯하면서도 속은 강직한 사람이 있고,
겉은 건실한 듯하면서도 속은 나태한 사람이 있으며,
겉은 너그러운 듯하면서도 속은 조급한 사람이 있다.

또한,의로 나아가기를 목말라 하는 사람은
의를 버리기도 뜨거운 불을 피하듯 한다.

그러므로 군자는 사람을 쓸때에


1. 먼 곳에 심부름을 시켜 그 충성을 보고

2. 가까이 두고 써서 그 공경을 보며,

3. 번거로운 일을 시켜 그 재능을 보고

4. 뜻밖의 질문을 던져 그 지혜를 보며

5. 급한 약속을 하여 그 신용을 보고

6. 재물을 맡겨 그 어짐을 보며

7. 위급한 일을 알리어 그 절개를 보고

8. 술에 취하게 하여 그 절도를 보며

9. 남녀를 섞여 있게 하여 그 이성에 대한 자세를 보는 것이니

이 아홉가지 결과를 종합해서 놓고 보면
사람을 바로 알아볼 수 있게 되는 것이다."

<장자의 열어구>
사용자 삽입 이미지

인간이란 잊으려 하면 할수록 잊지 못하는 동물이다.
망각에는 특별한 노력 따위는 필요도 없는 것이다.
끝도 없이 밀려오는 새로운 일들 따윈,
거의 모두 잊어버리고 살아간다.
잊었다는 것조차 모르는 게 보통이다.

어느 때 문득,
그러고 보니 그런 일이 있었지, 하고 떠올리기도 하지만
그걸 또 머리 속에 새겨 두지 않으니,
기억이란 덧없는 아지랑이의 날개처럼
햇살 아래 녹아 내려 영원히 사라져 버리는 것이다.

그런데 그로부터 5년이란 세월이 흘렀는데도,
잊으려 하면 할수록 아오이는 기억 속에서,
이를테면 횡단보도를 건너갈 때, 지각하지 않으려고 마구 달릴 때,
심할 경우는 매미를 바라보고 있을 때,
망령처럼 불쑥 모습을 드러내 나를 당혹스럽게 한다."
말잘하는 능력은 타고난다고. 아니다. 말 잘하는 능력은 학습에 의해 키워나갈 수 있는 능력이다.


머리엔 정보로 가득채우고, 가슴엔 자신감이 충만하다면 어떤 자리에서 누굴 만나도 말 잘하는 사람으로 인식될 수 있을 것이다.


다시 강조하는데, 우리가 습관으로 익혀야할 말 잘하는 능력은 단순한 언변이나 에드립이 아니다. 입으로만 말하는게 아니라 머리로 말하는 능력이 필요한 것이다.



첫째, 다른 사람의 얘기를 잘 들어야 한다.
말 잘하는 사람치고 남의 말을 경청하지 않는 사람은 없다. 상대가 무슨 말을 하는지를 제대로 들어야, 자신도 그에 맞게 적절한 말을 할 수 있지 않겠는가. 그리고 이렇게 경청하는 매너는 상대로 하여금 호감을 주기에 충분하고, 자신의 말도 상대가 경청하게 하는데 효과적인 방법이다. 잘 듣는 것이 곧 잘 말하는 것의 시작인 것이다.



둘째, 시나리오 능력이 뛰어나야 한다.
머릿속에서 즉흥적으로 떠오른 말을 입으로 내뱉는데에는 한계가 있다. 말 잘하는 사람들은 대개 미리 시나리오를 그려보고 말을 한다. 프레젠테이션이나 회의를 앞두고 미리 머릿속으로 내가 어떻게 얘기하면, 상대는 어떻게 얘기할 것이고, 그럼 난 어떻게 얘기해야겠다는 등을 미리 그려보는 것이다. 그러면 훨씬 체계적이고 논리적인 말하기가 될 수 있을 것이다.

무조건 생각나는걸 입으로 내뱉기전에, 한번 머릿속에서 생각하고 판단해보라. 그러면 말이 너무 느려지지 않겠나고. 걱정마라. 연습을 통해 그렇게 말하는 것이 익숙해지면 1초 사이에도 머릿속에서 여러개의 문장을 되새김해볼 수 있게 될 것이다.



셋째, 자신감을 가져야 한다.
말하는 능력에서 자신감은 50% 이상을 차지한다. 그렇다고 틀리거나 부정확한 얘길 자신감있게 해서는 안된다. 정확한 얘기를 자신있게 하면 상대로 하여금 훨씬 더 높은 신뢰감을 얻게 된다. 아울러 설득도 쉽게 된다. 같은 말이라도 자신있게 하는 것과 그렇지 않은 것은 차이가 크다. 절대 끝말을 흐려서도 안되고, 부정확한 발음이어도 안된다. 또박또박하게 자신의 말을 정확하게 자신있게 전달하도록 노력해라. 어차피 말하는 것으로 먹고사는 사람이 아니지 않는가.

말하다 조금씩 실수한다고 뭐라고 할 사람도 없다. 자신감만 가지고 과감하게 말하는게 필요하다. 그렇다고 큰소리 뻥뻥치란 얘기는 아니다. 자신감은 소리가 크고 작고의 문제가 아닌, 명확하고 당당함의 문제인 것이다.



넷째, 신속한 정보수집력이 필요하다.
새로운 얘기는 듣는 사람으로서도 집중을 잘하게 한다. 다들 아는 식상한 얘기를 거론하는 것이나 했던 얘기 또하고 또하는 것은 곤란하다. 정보수집력은 말잘하는 사람의 필수자질이다.

특히 유행하는 트렌드나 이슈, 그리고 유머 등은 정보수집 능력에 비례해서 말잘하는 능력이 가늠되는 것이다. 자신만의 정보수집 경로를 만들어두고, 꾸준히 새로운 정보를 업데이트해 나가는 것이 필요하다.

매일 주요 신문을 보는 것은 기본이고, 전문분야 잡지는 꼭 구독해서 가치있는 정보를 확보해야 하며, 필요한 뉴스레터는 꼬박꼬박 챙겨서 받기도 해야한다. 특히 차를 타고 이동할 때 라디오의 시사프로그램이나 교양프로그램을 청취하는 것도 도움이 된다.



다섯째, 말 할때는 신중해야 한다.
말은 글과 다르게 한번 내뱉으면 주워담거나 고칠 수가 없다. 계속 줄줄 떠든다고 말잘하는게 아니다. 그런 말빨은 나이트클럽에서나 써먹을 수 있을뿐 그리 쓸만한데가 많지는 않다. 필요한 말을 신중하고 적절하게 잘하는 것도 중요하다. 말을 많이 하지 않더라도 충분히 말 잘하는 사람이 될 수 있다는 얘기다.



여섯째, 아는 것이 많아야 한다.
자신이 알고있는 분야의 얘기를 할 경우에는 말이 많아지게 되고, 말도 술술 자연스레 풀리게 된다. 누구나 공감하는 얘기일 것이다. 그렇다면 자신이 하는 일이나 전문분야에 대해서는 상대보다 더 많이 알도록 준비하는 것이 필요하다.

대개 말을 잘 못하는 사람이라 하더라도 특정 분야에 대해서는 상대적으로 말을 더 잘하는 경우를 보게된다. 대개 그 특정분야라고 하는게 자신의 관심사에 해당되는 분야이다. 연애나 술 얘기에는 침튀기며 얘기하다가도, 정작 필요하고 중요한 얘길 해야할 자리에선 말을 잘 못한다는 사람은 반성해야 한다. 그런 사람들은 자신의 관심사를 좀더 생산적이고 전문적인 분야로 옮겨보도록 노력해야 한다.



일곱째, 여유가 있어야 한다.
우선 앞에서 제시한 여섯가지 요소를 갖춘다면 여유를 가지고 말을 해야 한다. 조급해지면 말도 빨라지고, 해야할 말도 놓치게 된다. 여유를 가지고 말한다면 훨씬 더 조리있고 차분하게 상대를 설득시킬 수도 있을 것이며, 유머나 재치도 자연스레 나온다.

말하는 간간히 섞여나오는 유머는 상대를 집중시키는데 효과적이다. 절대 말 할때 흥분하지 않도록 스스로에게 여유를 가지도록 당부해야 하고, 말하는 템포도 스스로가 적절히 조절할 줄 알아야 한다.

말하는 것은 상대방과의 커뮤니케이션이다. 일방적으로 속사포처럼 떠들고 사라진다면 그건 말을 한 것이 아니라 소음을 만든 것이다. 최대한 밝은 미소와 여유로운 말이 훨씬 더 말 잘하는 사람으로 만들어줄 것이다.

date 를 convert 시킬때 형식입니다..

참조하시면 제일 편하게 쓰실 수 있으실듯..

세기 포함 안함(yy) 세기 포함(yyyy) 표준 입력/출력**
- 0 또는 100 (*) 기본값 mon dd yyyy hh:miAM(또는 PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 영국/프랑스 dd/mm/yy
4 104 독일 dd.mm.yy
5 105 이탈리아 dd-mm-yy
6 106 - dd mon yy
7 107 - Mon dd, yy
8 108 - hh:mm:ss
- 9 또는 109 (*) 기본값 + 밀리초 mon dd yyyy hh:mi:ss:mmmAM(또는 PM)
10 110 USA mm-dd-yy
11 111 일본 yy/mm/dd
12 112 ISO yymmdd
- 13 또는 113 (*) 유럽 기본값 + 밀리초 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 또는 120 (*) ODBC 표준 yyyy-mm-dd hh:mi:ss(24h)
- 21 또는 121 (*) ODBC 표준(밀리초) yyyy-mm-dd hh:mi:ss.mmm(24h)
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(스페이스 없음)
- 130* 회교식**** dd mon yyyy hh:mi:ss:mmmAM
- 131* 회교식**** dd/mm/yy hh:mi:ss:mmmAM

'IT > DB' 카테고리의 다른 글

[DB2] DB2 - SQL state [54048]; error code [-1585];  (0) 2008.09.20
[DB2] 명령어 모음  (0) 2008.09.20
[ORACLE] 파티션테이블  (0) 2008.09.19
[ORACLE] ERROR 관련  (0) 2008.09.19
[ORACLE] CREATE USER  (0) 2007.03.16
아는 것은 싸움의 절반에 해당한다. 내가 하는 실수를 제대로 알고 있다면, 고치는 것은 시간문제다. 초보와 베테랑 개발자 모두 전체 프로젝트의 진척에 방해가 될 수 있는 업무의 측면에 대해 잘못 알고 있는 경우들이 많다. 범하기 쉬운 실수들을 왜 미리 살펴봐야 하는지 알아본다.

필자는 최근 중급, 초보 개발자들과 함께 일해 왔는데, 베테랑 개발자를 포함해 모든 개발자들이 주의하지 않는다면 쉽게 빠질 수 있는 오해의 함정들을 몇가지 발견하게 됐다. 여기에는 적절한 도구의 선택에서부터 웹 서비스의 적절한 사용법에 이르기까지 다양한 아이디어가 포함된다.

개발자들이 갖기 쉬운 6가지의 오해에 대해 설명한다.

1. 닷넷 애플리케이션 개발을 위해서는 비주얼 스튜디오 닷넷이 필수적이란 생각.

이런 생각을 했다면, 버려라. MS 닷넷 개발을 처음 접해본 사람들은 닷넷 프레임워크를 이용한 애플리케이션 개발을 위해 비주얼 스튜디오 닷넷이 꼭 필요하다는 오해를 하기 쉽다. 이는 사실이 아니다. 단지 MS 웹 사이트에 있는 닷넷 프레임워크를 무료로 다운로드받기만 하면 된다.

닷넷 프레임워크를 설치한 후 좋아하는 텍스트 편집기와 커맨드-라인 닷넷 도구를 사용하면 된다. 또한 샤프디벨롭과 같은 서드파티 개발 도구를 써도 된다.

비주얼 스튜디오 닷넷의 대안에 관한 보다 자세한 논의를 담은 이전 기사를 참고하면 좋다. 개발도구 선택은 개인적인 취향에 달려있지만 많은 개발 팀들은 협업을 단순화하기 위해 도구를 표준화한다.

2. 내가 습득한 정보, 꼭꼭 숨기기

개발자들이 갖는 독특한 특징의 하나는 정보를 모으는 것이다. 타인이 모르는 것에 대해 알 수 있는 능력은 종종 중요성에 대한 잘못된 인식을 키우게 된다. 반대로 이런 정보를 공유하게 되면 그룹 전체의 지식이 확대되므로 팀에 도움이 된다. 또한 공유된 개념은 다른 팀 멤버의 의견에 따라 발전할 수도 있다. 이 것은 오픈소스 운동의 핵심 측면이기도 하다. 마지막으로 다른 개발자나 개발자들에게 어떤 개념이나 아이디어를 설명하게 되면 많은 경우 당신의 지식도 커진다.

팀워크는 애질 소프트웨어 개발(Agile Software Development)와 같은 운동에 있어서 추진력이 된다. 또한 많은 그룹이 동료가 작성한 코드를 리뷰하고 조언을 주고 있다. 이런 행위는 양측이 서로 배우고 이해를 넓히는 역할을 한다.

3. 코드에서 코멘트 빠뜨리기

코드에 코멘트를 하는 것은 쉬우면서도 단순한 절차이다. 그렇다면 왜 코멘트가 자주 간과되고 무시되는가? 일부 개발자들은 어떤 형태로든 문서화를 하지 않는다면 일자리를 유지하는데 도움이 된다고 생각한다. 이는 바로 전에 다룬 정보 공유에 관한 오류와 밀접한 관계가 있다.

몇 군데 잘 배치된 코멘트는 코드의 판독성과 관리성을 향상시킨다. 그런데 코멘트가 남용될 수도 있다. 기본적으로 코드의 목적, 변수, 메쏘드 등을 짧게 설명하는 코멘트가 있으면 된다. 많은 그룹들은 코드에 변화가 생기면 코멘트를 삽입하기를 원한다. 이는 문제가 생겼을 때 변화의 내용을 파악하기 쉽게 한다.

4. 버전 컨트롤 시스템의 가치를 간과하는 것

많은 개발자들이 다음과 같은 시나리오를 너무나 잘 알고 있다. 중요한 웹 애플리케이션의 새 버전을 내놓았다. 그런데 웹 사이트의 문제점을 항의하는 전화가 다음날 아침부터 줄지어 날아든다.

개발자가 한두 가지 실수를 범했다는 것을 수용할 용의가 있다면, 버전 컨트롤 시스템은 이런 상황에서 최고의 친구가 될 수 있다. CVS, IBM 래쇼날 클리어케이스, MS 비주얼 소스세이프와 같은 버전 컨트롤 시스템을 사용함으로써 기존 버전의 애플리케이션으로 쉽게 돌아가서 이를 기반으로 제품을 생산할 수 있다. 이는 제품 사이트가 가동되는 것과 병행해 개발 환경 내에서 문제를 찾는데 필요한 시간을 벌 수 있도록 해준다. 이는 문제를 찾기 위해 제품 코드를 미친 듯이 찾는 것을 방지한다.

또한 소스 컨트롤 시스템은 병행 개발을 가능하게 하므로 팀 멤버들이 동일한 코드를 작성할 수 있다. 개발자들이 시스템에 변경된 사항을 입력하면 이들 변경사항이 한꺼번에 통합된다.

일부 개발자들이 버전 컨트롤 시스템을 싫어하는 한 가지 이유는 개발 절차에 있어서 하나의 계층을 추가하기 때문이다. 소스 컨트롤 시스템에 코드를 제출하고 추출하는 것이 시간을 잡아먹을 수 있다. 이런 시간이 일부 개발자들의 인내심을 시험할 수 있다.

5. 웹 서비스가 모든 프로젝트에서 필요하다는 생각

웹 서비스에 대한 모든 감언이설 때문인지 많은 개발자들은 프로젝트를 시작하면서 어떤 형태로든 웹 서비스를 사용해야겠다고 생각한다. 웹 서비스가 필요하거나 적절한 방법일 수는 있지만 무조건 써야 되는 것은 아니다. 상황을 분석해 웹 서비스의 구현이 적절한지 검토할 필요가 있다. 예를 들어 원격화와 같은 기술이 보다 적절할 수도 있다.

6. 데이터 확인의 중요성을 자주 잊는 것

데이터는 애플리케이션에서 다양한 방식으로 처리되고 조작된다. 이런 이유 때문에 개발자들은 데이터의 무결성과 유효성을 개발과정에서 확인해야 된다. 데이터는 널 문자를 리턴할 수 있는 백엔드 데이터베이스로부터 읽혀질 수도 있다. 널 문자는 대부분의 경우 예외상황 (exception)을 발생시키므로 실행을 계속하기 전에 데이터는 검사돼야 한다.

당신이 초보 개발자이거나 베테랑 개발자이거나에 상관없이 개발자들이 여섯까지 오해에 빠지기 쉽다는 것을 잘 알아야 한다. 심지어 이런 나쁜 습관에 당신이 빠지지 않는다고 해도 다른 팀원들이 이들 함정에 빠질 수 있다. 잠재적 실수에 대해 경각심을 가진다면 팀 프로젝트를 방해할 수 있는 실수들을 방지하는데 도움이 될 것이다.

1.화폐단위

import java.text.*;

public class Formatting{

     double b=53.47698;

     NumberFormat formatter=NumberFormat.getCurrencyInstance();

     String money=formatter.format(b);

}

---->$53.48


로케일저정으로 화폐단위포매팅

Locale ja=Locale.JAPAN;

NumberFormat formatter=Number.getCurrencyInstance(ja);

String money=formatter.format(b);


숫자포메팅(쉼표,화폐표시3자리마다)

int num=538927393;

NumberFormat formatter=NumberFormat.getCurrencyInstance();

String number=formatter.format(num);

-----> 538,927,393


숫자포매팅(소수점 이하자리 자릿수 설정)

double d=5679082.3456767676;

NumberFormat formatter=new DecimalFormat("0.###");

String number=formatter.format(d);

----->5679082.346


날짜 포매팅

Date d=new Date();

DateFormat formatter=DateFormat.getDateInstance();

String dateUS=formatter.format(d);

-----> Mar 10,2003


로케일을 사용하여 날짜 포매팅

Locale localeUK=LOcale.UK;//영국에 해당하는 객체생성

Date d=new Date();

DateFormat formatter=DateFormat.getDateInstance(DateFormat.DEFAULT,localeUK);

String dateUK=formatter.format(d);

----->24-Mar-03


'IT > Language' 카테고리의 다른 글

EBCDIC 변환  (0) 2008.05.19
JDK Bit 확인  (0) 2008.02.11
[JSP] 한글 이름 파일 다운로드  (0) 2007.06.29
[JAVA] javac, java 명령어의 옵션  (0) 2007.06.29
[JAVA] 숫자를 화폐단위로 변경  (0) 2007.06.29

down.jsp

JSP 에서 파일을 그냥 링크하면 일부 파일의 경우
깨진 내용이 보이거나 이상하게 반응하게 된다.
특히, 한글로 된 파일의 경우 오동작이 생긴다.
이것을 해결하는 방법으로 별도의 다운로드를 담당하는

JSP를 사용해보자.
톰캣 버젼 등 환경이 다르면 오류가 발생할 수 있음 ^^;

수많은 해결 방법 중에 하나일 뿐이니 참고하기 바람.

-------------------------------------------------------
downtest.jsp : 테스트 할 간단한 파일
-------------------------------------------------------

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<form action="down.jsp" name="form1">
 <% String filename = "새 텍스트 문서.txt";%>
 <input type="hidden" name="file" value="<%=filename%>">
 <a href="#" onClick="form1.submit()">다운로드</a>
</form>

 

-------------------------------------------------------
down.jsp : 다운로드를 담당하는 파일
-------------------------------------------------------

<%@ page contentType="application;" %>
<%@ page import="java.util.*,java.io.*,java.sql.*,java.text.*"%>
<%
 request.setCharacterEncoding("euc-kr"); // request 한글로 설정
 String filename = request.getParameter("file"); // 파일명 받기
 String filename2 = new String(filename.getBytes("euc-kr"),"8859_1");
 ServletContext context = getServletContext(); // 서블릿 컨텍스트 얻기

 /*
 예를 들어 톰캣 설치 폴더가 c:\tomcat41 이고
  c:\tomcat41\webapps\test 가 웹 어플리케이션 일때
  c:\tomcat41\webapps\test\filestorage 폴더에
  파일을 업로드한 경우로 가정한다.
*/

 String saveFolder = "filestorage";

 String realFolder = "";
 realFolder = context.getRealPath(saveFolder); // 상대경로(저장할 폴더)
 
 // 자바 I/O를 이용하여 다운받는다.

 File file = new File(realFolder + "/" + filename);
 byte b[] = new byte[4096];
 response.setHeader("Content-Disposition", "attachment;filename=" + filename2 + ";");


 if (file.isFile())
 {
  BufferedInputStream fin = new BufferedInputStream(new FileInputStream(file));
  BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
  int read = 0;
  while ((read = fin.read(b)) != -1){
   outs.write(b,0,read);
  }//while
  outs.close();
  fin.close();
 }//if
%>


'IT > Language' 카테고리의 다른 글

JDK Bit 확인  (0) 2008.02.11
[JAVA] 숫자,날짜 포메팅하는 방법  (0) 2007.06.29
[JAVA] javac, java 명령어의 옵션  (0) 2007.06.29
[JAVA] 숫자를 화폐단위로 변경  (0) 2007.06.29
[JAVA] 날짜 구하기 팁  (0) 2007.06.29

자바 컴파일과 실행에 사용되어지는 javac, java 명령어의 옵션 정리

javac - 자바컴파일러로써, 자바코드를 작성한 소스파일(.java)을 자바 가상머신이 인식할수 있는 바이트 코드(.class)
타입으로 변환시켜주는 명령어 입니다.

사용법: javac <options> <souce files>
예를들어, Hello.java, Greeting.java 두개의 파일이 존재한다면,
javac Hello.java Greeting.java
javac *.java (*을 사용해서, 모든 확장자가 .java인 파일을 컴파일할수 있다.)

1) 옵션:

a) -classpath:

 -classpath(cp) path(파일 절대 경로):
 컴파일러가 컴파일 하기 위해서 필요로 하는 참조할 클래스 파일들을 찾기 위해서 컴파일시 파일 경로를 지정해주는
옵션. 예를 들어,  Hello.java파일이 C:\Java 디렉터리에 존재하고, 필요한 클래스 파일들이 C:\Java\Engclasses에 위치한다면,
javac -classpath C:\Java\Engclasses C:\Java\Hello.java 로 해주면 된다. 만약 참조할 클래스 파일들이 C:\Java\Engclasses외의
다른 디렉터리에도 존재한다면, C:\Java\Korclasses 일경우,
javac -classpath C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java
그리고, 현재 디렉터리역시 포함하고 싶다면,
javac -classpath .;C:\Java\Engclasses;C;\Java\Korclasses C:\Java\Hello.java
기본적으로, dos에서는 .는 현재 디렉터리를 의미하고, ..는 현재 디렉터리의 상위디렉터리를 의미한다.
또한 classpath 대신 단축어인 cp를 사용해도 된다.
javac -cp C:\Java\Engclasses C:\Java\Hello.java 

b) -d:
 -d directory
 클래스 파일을 생성할 루트 디렉터리를 지정합니다.
기본적으로 컴파일러는 -d옵션을 주지 않으면, 소스파일이 위치한 디렉터리에 클래스 파일을 생성시킵니다.
예를 들어,  Hello.java파일이 C:\Java 디렉터리에 존재하고 클래스 파일의 루트디렉터리를 C:\Java\Classfiles라고 하면,
javac -d C:\Java\Classfiles C:\Java\Hello.java 입니다.

만약 -d 옵션을 사용하려고 하는데, 루트디렉터리(위예에서는 C:\Java\Classfiles) 가 존재 하지 않는다면,
"The system cannot find the path specified"라는 에러 메시지를 보게 됩니다.
현재 작업 디렉터리가 C:\Java\Classfiles 에 위치하면,
javac -d .\Classfiles Hello.java 와 같이 상대 디렉터리로 표현할수 있습니다.

java class내에서 package를 선언한 경우 package별 폴더를 생성하고 해당 폴더에(package) compile한다.

c) -encoding:
-encoding encoding name
소스 파일에 사용된 문자열 인코딩을 설정합니다.
만약 위옵션이 설정되어 있지 않으면, 플래폼의 기본적인 컨버터가 사용되어 집니다.

d) -g:
모든 디버깅 정보를 생성시킵니다.
만약 위옵션이 설정되어 있지 않으면, 기본적으로, 라인넘버만 생성시킵니다.
-g:none: 디버깅 정보를 전혀 생성 시키지 않습니다.
-g:{lines, vars, source}:
위처럼 명시적으로, 몇몇 디버깅 정보를 생성시킬수 있습니다.
lines은 라인정보, vars는 지역변수, sounce는 소스 파일 정보를 나타냅니다.

e) -nowarn:

경고 메시지 (warning message)를 생성시키지 않습니다.

f) -verbose:

컴파일러와 링커가 현재 어느 소스파일이 컴파일되고 있고, 어느 파일이 링크되고 있는지
그정보를 출력한다.

h) -deprecation:

소스 코드내에서, 사용되어진 deprecated API의 위치 를 출력 합니다.

ex)
C:\Java> javac World.java
Note: World.java uses a deprecated API. Recompile with "-deprecation" for details
.
1 warning
C:\Java> javac -deprecation World.java
World.java:52: Note: The method java.awt.Dimension size() in class java.awt.Compon
ent has been deprecated.
Dimension d = size();

Note: World.java uses a deprecated API. Please consult the documentation for a be
tter alternative.

i) -sourcepath:

-sourcepath 소스패스

소스파일의 위치를 지정합니다.

j) -target:

-target 자바버젼

지정된 자바버젼의 VM에서 작동 되어지도록 클래스파일을 생성 시킵니다.

1.1
jvm 1.1 버젼에서 호환되어질수 있는 클래스 파일생성
1.2
jvm 1.2 버젼에서 호환되어질수 있는 클래스 파일생성
1.3
jvm 1.3 버젼에서 호환되어질수 있는 클래스 파일 생성

ex)

javac -target 1.2 Helloworld.java

k) -bootclasspath 패스:

특정한 bootstrap또는 확장 클래스를 지정할수 있다.
기본적으로, 자바컴파일러는 javac(컴파일러명령)이 설치된 플래폼의 bootstrap과 확장클래스들을 통해서, 컴파일작업을 수행하지만,
bootclasspath 옵션을 사용하면, cross-compiling이라고 해서, 다른 자바플래폼의 bootstrap과 확장클래스들을 통해서, 컴파일 할수 있는 기능을 지원한다.
예를들어,
javac -target 1.1 -bootclasspath jdk1.1.7/lib/classes.zip -extdirs "" OldCode.java
컴파일러에게 현재 자신의 bootstrap을 사용하지 말고, jdk1.1.7/lib/classes.zip bootstrap클래스들을 사용해서 컴파일 하라고
명령하는것이다.
참고로, 모바일자바에서, 모바일폰에 설정된, jvm에 맞도록, 소스코드를 컴파일하기 위해서, 주로 사용되어지는 옵션이다.

l) -extdirs 디렉터리:
특정한, 확장 디렉토리를 지정한다.cross-compiling시 주로, 사용되어지는 옵션이면, 각디렉터리들은 콜론(:)에 의해서, 분리되어진다.
컴파일시, 기술한 디렉터리의 클래스 파일을 참조한다.

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

출처 : http://blog.naver.com/darkhan1?Redirect=Log&logNo=10009423507

java 컴파일시 알아 두면 유용하게 쓰일거 같다..

#################################################
Usage: javac <options> <source files>
where possible options include:
  -g                                  Generate all debugging info
  -g:none                          Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                         Generate no warnings
  -verbose                        Output messages about what the compiler is doing
  -deprecation                   Output source locations where deprecated APIs are used
  -classpath <path>           Specify where to find user class files and annotation processors
  -cp <path>                     Specify where to find user class files and annotation processors
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>                Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -proc:{none,only}            Control whether annotation processing and/or compilation is done.
  -processor <class1>[,<class2>,<class3>...]

                                       Names of the annotation processors to run; bypasses default discovery process
  -processorpath <path>      Specify where to find annotation processors
  -d <directory>                 Specify where to place generated class files
  -s <directory>                 Specify where to place generated source files
  -implicit:{none,class}      Specify whether or not to generate class files for implicitly referenced files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release
  -target <release>            Generate class files for specific VM version
  -version                         Version information
  -help                             Print a synopsis of standard options
  -Akey[=value]                Options to pass to annotation processors
  -X                                 Print a synopsis of nonstandard options
  -J<flag>                         Pass <flag> directly to the runtime system
 
 
 
 
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
    -client   to select the "client" VM
    -server   to select the "server" VM
    -hotspot   is a synonym for the "client" VM  [deprecated]
                  The default VM is client.
                 
    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives, and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose[:class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -jre-no-restrict-search
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                    see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image
 

M) package 선언된 Java class 실행시키기

- package위치는 CLASSPATH 하위 폴더부터로 인식한다. 따라서 Package폴더의 Root가 ClassPath에 지정되든지

.(현위치)를 ClassPath에 등록 후 현 위치 아래서부터 package의 위치를 지정한다.

java package.class명 (현위치 아래에 package폴더가 존재)

java com.test.SampleMain

import  java.text.*;


public class Test 
{
 public Test(double str, int b)
 {
  String c = "###,###";
  if( b != 0)
  {
   c = c+".";

   for(int i=0;i<b;i++)
   {
    c = c+"#";
   }
  }
//  DecimalFormat fd = new DecimalFormat("###,###.####");
 
  DecimalFormat fd = new DecimalFormat(c);
  String fdVal = fd.format(str);

  System.out.println(fdVal);
 }
 public static void main(String[] args)  throws ParseException
 {
  Test t = new Test(2222222222998.61295, 0);
 }
}

//// b만큼 의 소수점 자리로 반올림된다

+ Recent posts