'분류 전체보기'에 해당되는 글 2491건

  1. 2009.03.02 [Tip] 윈도우 탐색기에서 오른쪽버튼으로 커맨드창(cmd..
  2. 2009.03.02 동일한 IIS 프로세스에서 서로 다른 버전의 ASP.NET을 실행할 수 없습니다.
  3. 2009.03.02 Visual Studio 2005 IDE Tip / 단축키
  4. 2009.03.02 Visual Studio(Visual Basic) 2005 tip
  5. 2009.03.02 IE용 웹 개발 도구 DebugBar
  6. 2009.02.27 Velocity-Style Syntax
  7. 2009.02.27 Java application 에서 velocity 사용하기
  8. 2009.02.27 Velocity 소개
  9. 2009.02.27 Velocity UI for Eclipse 1
  10. 2009.02.27 Eclipse Plug-In : Velocity WebEditor 설치 방법 1
  11. 2009.02.27 Oracle WebLogic Server Downloads
  12. 2009.02.27 웹로직 시작시 아래와 같은 InvalidClassException 오류가 발생한다면? 1
  13. 2009.02.27 WebLogic 설치 및 환경설정법 1
  14. 2009.02.26 WebLogic Platform 8.1 Installation Guide (초보자를 위한 웹로직 설치법)
  15. 2009.02.26 JSTL cannot be resolved error
  16. 2009.02.26 Tomcat 5.x, 6.x] JSTL 사용 시 org.apache.jasper.JasperException
  17. 2009.02.26 Index of /apache/struts/binaries 1
  18. 2009.02.26 archive.apache.org [struts1.X] 스트럿츠1.X 오래된 버전
  19. 2009.02.26 JSP Tomcat 개발환경 구축(window기준)
  20. 2009.02.26 [펌] myeclipse 이용한 스트럿츠 개발환경
  21. 2009.02.26 가메출판사 struts2 예제
  22. 2009.02.26 [펌] Struts Guide : 스트럿츠 처음 배우기
  23. 2009.02.26 내가생각하는 페이징 처리
  24. 2009.02.26 Struts Guide : 스트럿츠 처음 배우기
  25. 2009.02.26 [펌]즐겨찾기
  26. 2009.02.26 Spring 프레임워크
  27. 2009.02.25 Web Java Class Decompiler 이용 방법
  28. 2009.02.25 Eclipse 사용시 알아두면 좋은 유용한 단축키 모음
  29. 2009.02.25 TortoiseSVN 설치 및 사용방법 1. ToroiseSVN...
  30. 2009.02.25 Subversion을 사용한 소프트웨어 구성 관리에 관한 도움말
98..Etc/Etc...2009. 3. 2. 14:41
반응형
 
프로그램을 하는 사람이라면 이 방법에 무지 감동할 듯 ^^

예전에 선배에게 배운적있었는데.. 그때는 이렇게 을 죽도록 하게될 지 몰랐기에..

흘려들었었던.. 그 스킬..

암튼.. 다시 알게되서 무지 !! ^_______^


아래와 같이 윈도우 탐색기에서 오른쪽 버튼을 눌러 해당 경로로 도스커맨드창을 여는 방법이다.



< 설 정 방 법 >

 

먼저 [시작] - [실행] (윈도우키 + R) 에서 "regedit"를 입력하여 레지스트리 편집기를 띄운다.



레지스트리 편집기를 띄운후 다음의 경로로 이동한다.

"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell"

"shell" 키에서 오른쪽 버튼을 클릭한 후 "새로만들기 -> 키"를 선택.



그러면 "shell" 아래에 폴더형태로 "새 키 #1"가 생성된다.

이 키의 이름을 "Dos Command"로 바꾼다. (물론 이름은 원하는대로 ^^;)

오른쪽을 보면 "기본 값"이 있는데, 이 값을 더블클릭하여 키의 값을 "Command(&Q)"로 바꾼다.

여기서 &Q는 단축키를 지정하는 방법이다.




새로 생성한 "Dos Command"에서 오른쪽 버튼을 눌러서 "새로만들기 -> 키"를 또 생성.

이 키의 이름은 "command"로 하였다.

새로 생성된 키의 기본값을 더블클릭하여 값을 "cmd /k" 로 바꾼다.

 


 

< 마지막 확인 >

 


자~ 이제.. 탐색기를 띄워 아무 디렉토리에서나 오른쪽 버튼을 클릭해 보자.

방금 만든 "Command(Q)"라는 명령이 보일 것이다.

클릭하면 바로 그 경로로 도스커맨드창이 열린다.

 

ㅋㅑ~ 정말 편리한 방법이지 않은가!! ^^


------------------------------------------

odly75님의 내용을 참고하여 작성하였습니다~

http://blog.naver.com/oldy75/60009781493

Posted by 1010
98..Etc/ASP.NET2.02009. 3. 2. 14:33
반응형
난 지금까지 CS만 해와서 웹에 대해 잘 몰랐다가 요즘 ASP.NET을 사용하면서 곤란했던적이 한 두번이 아니다.
한번은 그냥 간단하게 데이터만 조회하는 페이지를 만들라고 지시를 받았는데..
만드는건 그닥 어렵지 않았다. 인터넷에 자료들이 넘쳐나니..
하지만 문제는 IIS 요녀석....
서버에 기존 웹사이트는 ASP.NET 버전을 1.1로 쓰고 있었고 내가 만든 페이지는 2.0버전이었다.
한창 내가 만든 페이지를 테스트하면서 잘 돌아가 흐믓해 하고 있을때 갑자기 전화가와
아침까지도 잘 접속되던 웹사이트[버전1.1]가 접속이 안된다는것이 었다.
이건 뭥미?? 내가 브라우저로 접속에서 보니 이런 에러가...



이벤트 뷰어에 나타난 오류는 다름 아닌



세상에.. 동일한 IIS 프로세스에서는 서로 다른 버전의 ASP.NET이 실행이 안되는 것이었다.
검색결과 역시 해결책은 있었다.

새 응용프로그램 풀을 만들면 되는 것이 었다.
응용프로그램 풀을 만들었으면 웹사이트 속성에 가상디렉토리 탭에 가서 밑의 그림과 같이 설정해 주면 된다.



응용프로그램 풀을 이용한 해결책 참조 사이트 :
http://www.wssplex.net/TipnTech.aspx?Seq=282
http://technet2.microsoft.com/windowsserver/ko/library/1b758129-e461-4b49-ab63-113c4341133b1042.mspx?mfr=true
Posted by 1010
반응형
SQL문을 쓸때 항상 따옴표를 넣으주는 일이 정말 귀찮은 여러분!!
이 TIP으로 이제 따옴표 넣는 일은 이제 그만!!



본론으로 들어가서 일단 위의 그림 처럼 SQL문을 선택해 주시고 Ctrl+H를 누르시면
빠른 바꾸기 창이 나타납니다.



빠른 바꾸기 창이 나타나면 위에 빨간네모 박스에 표시된것 처럼 설정해주세요...
그리고 모두 바꾸기 버튼을 누르시면..!!



위 그림과 같이 바뀝니다.. 이렇게 편리할 수가..ㅠㅠ
조금 수정해서 ..

완성되었습니다.. ^^

추가로 한가지 더..!!

try / catch 문을 넣고 싶은데 일일이 찍기 귀찮으면 Ctrl+K , S 누르시면 밑의 그림과 같이
코드 감싸기가 나옵니다.


여기서 try를 선택하시고 Enter 키를 누르시면

try / catch문이 자동적으로 들어 갔습니다. 참~~~ 쉽쬬?ㅋ
try / catch문 이외도 많이 있으니 활용하시기 바랍니다.

참고로 다른 단축키라든지 Visual Studio 2005 IDE Tip은 밑의 사이트를 참조하세요..
저도 여기서 많이 배웠습니다. ^^

참조사이트 : http://www.chinhdo.com/20070920/top-11-visual-studio-2005-ide-tips-and-tricks-to-make-you-a-more-productive-developer/
Posted by 1010
반응형

1. 파일 읽어올 때 한글 깨지지 않게 불러오기

Text1.Text = System.IO.File.ReadAllText("경로", System.Text.Encoding.Default)

 

2.  어플리케이션 경로 구하기

vb6.0:  app.path -> vb2005: My.Application.Info.DirectoryPath 

Posted by 1010
반응형

IE용 웹 개발 도구 DebugBar

웹 사이트를 개발하는 과정은 수많은 디버깅의 연속입니다. 특히 HTML, CSS, JavaScript를 개발하는 과정은 다양한 브라우저에서 테스트를 병행해야 하기 때문에 많은 시간과 노력이 필요합니다.

DebugBar 그나마 파이어폭스(Firefox)의 FireBug라는 확장기능을 이용하면 보다 수월하게 웹 개발을 진행할 수 있습니다. 이 멋진 디버깅 도구는 DOM 구조를 분석해서 HTML의 트리 구조를 실시간으로 확인하여 구문 오류를 쉽게 확인할 수 있습니다.

또한 브라우저의 기본 CSS와 제작자의 CSS 속성 관계에서 상속(inherit)과 겹침(cascading) 결과를 정리해주기 때문에 코드를 제작/수정하기 쉽습니다. 마찬가지로 Script 구문 오류도 쉽게 확인할 수 있기에, 많은 사용자들에게 웹 개발을 위한 필수 도구로 사랑받고 있습니다.

그에 비해 국내에서 가장 높은 시장 점유율을 기록중인 인터넷익스플러(Internet Explorer)는 이와 같은 도구를 사용할 수 없었습니다. 물론 Internet Explorer Developer Toolbar라는 도구가 있지만, 기능이 무척 미비해서 실무에 도움이 거의 안되는 실정이었죠.

이제 DebugBar를 이용하면 보다 쉽고 빠르게 웹 개발을 진행할 수 있습니다. Jean-Fabrice Rabaute가 제작한 이 도구는 아직까지 FireBug에 못미치지만, Internet Explorer Developer Toolbar보다 훨씬 유용한 기능을 제공하고 있습니다. 앞으로는 IE의 Firebug로써 역할을 수행할 수 있을 것입니다.

개인은 무료로 다운받아서 사용할 수 있으며, 회사의 경우는 유료이네요. 자세한 내용은 DebugBar 홈페이지를 참고하세요.

기념으로 DebugBar와 Internet Explorer Developer Toolbar를 사용중인 제 IE의 모습을 스크립캡쳐합니다.

DebugBar와 Internet Explorer Developer Toolbar를 사용중인 IE

아니 벌써~ 한글화를 진행해주신 Junios님께 감사드립니다. ㅎㅎ

Posted by 1010
98..Etc/velocity2009. 2. 27. 15:52
반응형

The Apache Velocity project introduces an alternative syntax to the familiar JSP expressions and scriptlets. Resin's extension allows the use of Velocity-style syntax in JSP files. The Velocity-style syntax is transformed into JSTL standard tags.

  1. Enabling velocity-style syntax
  2. expressions
  3. scriptlets
  4. if statements
  5. foreach statements

The syntax is based on expressions like ${foo} and scriptlets with #\{...}#. Because the alternative syntax avoids the brackets which fill JSP pages, it can make pages more readable and therefore more maintainable.

Because Resin's Velocity-style syntax is transformed to the JSTL tag library, all JSTL expressions are allowed.

JSP style
<%
int count;
%>

<h3>A sample <%= count %></h3>

<% if ("foo".equals(request.getParameter("a"))) { %>
  <h3>Foo!</h3>
<% } else { %>
  <h3>Bar!</h3>
<% } %>

The same JSP file could be written in Velocity-style as follows. The jsp:directive is required because JSP pages use strict JSP syntax by default.

Velocity style
<jsp:directive.page velocity='true'/>
#{
int count;
}#

<h3>A sample ${count}</h3>

#if ("foo" == params.a)
  <h3>Foo!</h3>
#else
  <h3>Bar!</h3>
#end

The choice between the two is a matter of preferences. An advantage of the velocity style is that expressions and scriptlets avoid using brackets. In large pages, sorting out the HTML or XML from the JSP syntax can become confusing.

Enabling velocity-style syntax

Velocity-style syntax can either be enabled on a per-JSP page with velocity='true' or in the web-app with the <jsp> tag:

Enabling velocity for a page
<jsp:directive.page velocity='true'/>
  ...

Enabling velocity for a web-app
<web-app>
  <jsp velocity='true'/>
  ...
</web-app>

expressions

Expressions are enclosed between "${" and "}", for example '${count}' and '${count + 15}'.

The '${...}' syntax is equivalent to '<c:out value="..."/>'.

#{

${expression}

scriptlets

Scriptlets use the '#{ ... }#' syntax. This is entirely equivalent to '<% ... %>'. (Note, Velocity does not have this syntax because it creates its own language instead of escaping to Java.)

#{
 statements
}#

#{
String key = request.getParameter("key");
if (key.equals("")) {
  response.sendError(500, "Bad key");
  return;
}
}#
...

if statements

The velocity-style syntax directly supports if statements. The syntax is

#if (expr1)
  ...
#elseif (expr1)
  ...
#else
  ...
#end

The expressions can be any JSTL expression. The if statement is transformed into:

<c:choose>
<c:when test="${expr1}">
  ...
</c:when>
<c:when test="${expr2}">
  ...
</c:when>
<c:otherwise>
  ...
</c:otherwise>
</c:choose>

foreach statements

The velocity-style syntax directly supports iteration with a foreach statements.

#foreach (var in expr)
  ...
#end

This style of foreach is transformed into the following:

<c:forEach items="${expr}" var="var">
  ...
</c:forEach>

An example use might be the following:

foreach in Java
<jsp:page.directive velocity='true' import='java.lang.*'/>
#{
  ArrayList list = new ArrayList();
  list.add("foo");
  list.add("foobar");
  pageContext.setAttribute("list", list);
}#
#foreach (value in list)
  <li>${value}
#end

The velocity-style syntax also supports integer iteration.

An example might be the following:

foreach in Java
<jsp:page.directive velocity='true'/>
#foreach (value in [3..9])
  <li>$value
#end

Posted by 1010
98..Etc/velocity2009. 2. 27. 15:15
반응형

웹에서 처럼 Java application 에서 velocity 를 사용한다.

그러면 화면(로그) 구성 로직을 vm 에 옮기고 변화가 많지않은 부분을 java 로 코딩하여

컴파일을 해 놓으면 어떤 로직에 수정이 가해졌을 때 재 컴파일 없이 properties 처럼

Vm 파일만 수정하면 된다. 활용여하에 따라서 효과적이고 유지보수와 개발의 편리성을

제공할수 있을 것 같다.

 

필요한 jar : commons-collections-3.2.jar, commons-lang-2.3.jar, velocity-1.5.jar,

velocity-dep-1.4.jar, velocity-tools-1.3.jar, velocity-tools-generic-1.4.jar,

velocity-tools-view-1.1.jar

 

jdk : 1.4

 

java 소스 상에서 사용하기 위해선 다음과 같은 절차를 따른다.

1: Velocity.init() 메서드를 사용하여 엔진을 초기화 한다.

2: VelocityContext 객체를 생성하는데 이곳에 넘길값을 셋팅한다.

3: methodproperties 를 다루는데 사용하는 Template 객체를 생성한다.

이 객체에 velocity 파일위치를 파라미터로 넘겨주면 리턴값으로 Template 객체를넘겨준다.

그리고 이 Template 객체에 VelocityContext 를 넘겨주면된다.

 

Velocity.init();

Template template=Velocity.getTemplate("./src/velocity/conditionals/if.vm");

VelocityContext context = new VelocityContext();


Writer writer =
new StringWriter();

template.merge(context, writer);

 

System.out.println(writer);

 

소스를 컴파일 하게 되면 console vm 에 대한 로그는 나타나지 않는다.

Velocity.log  파일을 자동으로 만들어 컴파일에 대한 내용을 출력한다.


Posted by 1010
98..Etc/velocity2009. 2. 27. 15:11
반응형

1. 주석 사용
## 로 시작하면 한 줄 코멘트
#* 로 시작하고 *#로 끝나면, 여러 줄 코멘트
#** 로 시작하고 *#로 끝나면, 블록 코멘트.

2. 레퍼런스
$(variable) : 컨텍스트에서 제공되는 변수에 대한 레퍼런스
$(variable.property) : 속성에 대한 레퍼런스
$(cariable.method(arg)) : 메소드에 대한 레퍼런스

예)
$date.format("yyyy-MM-dd", $createTime)

3. 디렉티브
#set : 레퍼런스의 값 설정
#if/#elseif/#else : 조건문 제어
#foreach : 객체 리스트에 댛란 반복 제어
#include : 벨로시티로 파싱되지 않은 로컬 파일 출력
#parse : 벨로시티로 파싱된 로컬 템플릿 출력
#stop : 템플릿 엔진의 동작 정지
#macro : 반복적으로 사용될 VM(velocimacro)

예)
*. set
#set ($val = 1234567)

*. if/elseif/else
#if( $foo == $bar ) -> 등치 연산자
#if( $foo == 42 )
#if( $foo == "bar" )
#if( !$foo ) -> Boolean NOT

*. foreach
$allPages가 List나 Array인 경우
#foreach( $page in $allPages)
   $page
#end

$allPages가 Map이나 Hashtable일 경우

#foreach( $key in $allPages.keySet())
   $key -> $allPages.get($key)
#end

*. include
Velocity에 의해 파싱되지 않는 로컬 파일(들)을 렌더링
#include ("a.html")

*. parse
Velocity에 의해 파싱되는 로컬 템플릿을 렌더링
#parse ("me.vm")

*. macro
편리한 함수를 만들어서 사용 가능함
#**
 * General purpose date formatter. Need to be careful of whitespace.
 * @param dateFormat Date format to be used (see java.text.SimpleDateFormat).
 * @param date Date object to be formatted (see java.util.Date).
 *#
#macro(formatDate $dateFormat $date )
  $utils.formatDate($date, $dateFormat)
#end

4. toolbox.xml(Velocity Tool)을 활용한 사용자 정의 오브젝트의 사용
toolbox.xml에 사용자 정의 클래스를 적용하여 vtl에서 사용할 수 있다. getXX(), setXX(), isXX() 형태로 정의되었을 경우 가능

예)
*. Date Tool
org.apache.velocity.tools.generic.DateTool class를 추가함
$date.format("yyyy-MM-dd HH:mm:ss", $myDate)   -> 2008-06-03 19:11:09

*. Number Tool
org.apache.velocity.tools.generic.NumberTool class를 추가함
$number.format("currency", $val)   -> ₩1,234,567
$number.format("integer", $val)    -> 1,234,567

*. Escape Tool
org.apache.velocity.tools.generic.EscapeTool를 추가함
$javascript                  -> I'm Mimul
$esc.javascript($javascript) -> I\'m Mimul

Posted by 1010
98..Etc/velocity2009. 2. 27. 15:10
반응형

Velocity UI for Eclipse

This project leverages the Eclipse platform (v2.x) by adding support for the template/scripting engine Velocity. It provides the following plugins:
org.apache.velocity
Velocity binaries (currently v1.3.1-final) packaged as an Eclipse plugin
org.vaulttec.velocity.ui
Velocity-aware text editor (associated to files with extensions '*.vsl' or '*.vm') with outline view

Editor Features

  • Syntax-highlight for Velocity Template Language (VTL)
  • Outline view with hierarchy of VTL directives and Velocimacro references
  • Content assist for VTL directives (Screenshot) and references (Screenshot) -> auto-activation after the character '#' or '$' or manually via keyboard shortcut Ctrl+Space
  • Automatic template validation while typing (the first syntax error is show in task list and the according line is marked in annotation column) -> Screenshot
  • Annotation hover with definition of references (Screenshot) and template syntax errors (Screenshot)
  • Go to definition of variable or Velocimacro reference under current cursor position (via context menu or keyboard shortcut F3)
  • Comment and uncomment blocks (via Ctrl+/ and Ctrl+\)
  • Preference pages for definition of Velocity counter name and user-defined Velocity directives (Screenshot)
  • Preference pages for color settings of the editor's syntax highlighting (Screenshot)
  • Preference pages for Velocimacro library (Screenshot)

Installation

Via Eclipse Update Manager

Online updates are available on http://veloedit.sourceforge.net/updates/. Define a site bookmark in Eclipse's Update Manager view (Screenshot), navigate to the update site via this bookmark (Screenshot) and install the Velocity UI feature. This update site can also be downloaded from SourceForge and used locally.

Manually

Download the archives org.apache.velocity_x.x.x.zip and org.vaulttec.velocity.ui_x.x.x.zip from here and unzip them in your Eclipse plugin directory "<eclipse install path>/plugins/".
SourceForge Logo
Posted by 1010
98..Etc/velocity2009. 2. 27. 14:40
반응형
VTL (Velocity Template Language)에 대해서는 여지껏 접해본바 없는 상황인지라 문법 익히기에도 급급하다.
대충 문법 정의 문서를 살펴보니 그리 어려운 언어는 아니라는 결론을 얻었다.

HTML 사용 하는거야 그냥 똑같이 쓰면 되고, 그 안에 스크립트를 끼워 넣는 것인데...
좀 더 쓰다 보면 익숙해지겠지... :-)

자.. 이제 익숙해지는 단계 이전까지는 뭔가 도움이 될만한 것들을 찾아봐야 하는데, 역시나 이클립스를 무시할 수가 없다. Velocity 코드 작성을 위한 Plug-In이 분명 존재할 것이란걸 믿고 찾아봤더니...
세상에나... 정말로 있다!!

Eclipse 사이트의 Plug-In Central 화면 캡춰



이제 설치를 해보자.

Velocity WebEditor - Eclipse Plugin : 아래 다운로드 클릭
상단에 링크된 파일을 다운받아서 압축을 해제하면 plugin 디렉토리가 생성되고 그 안에 실제로 설치에 필요한 디렉토리 및 파일들이 존재한다.


com.hudson.velocityweb_1.0.8 디렉토리를 Eclipse 설치 디렉토리 아래 plugins 디렉토리 하위에 복사.

Eclipse가 실행 중이었다면 재실행 해야 반영된다.


VM 파일을 수정하는 화면이다. 가장 도움이 되는 기능이 Syntex Coloring 과 Code Assist 기능이 지원된다는 것.
이제 눈을 부릅뜨고 코딩하는 일만 남았다.

조금이라도 빨리 퇴근하길 바라는 마음에서... ㅠ_ㅠ
Posted by 1010
98..Etc/weblogic2009. 2. 27. 14:07
반응형
Oracle WebLogic Server Downloads

Thank you for accepting the OTN License Agreement; you may now download this software.


 
Microsoft Windows
Linux
Solaris
HP
Oracle WebLogic Server 10.3 - Net Installer



Oracle WebLogic Server 10.3 - Package Installer

x86: 39 MB
File1



x86: 742 MB
File1

x86: 42 MB
File1



x86: 748 MB
File1
SPARC: 47 MB
File1



SPARC: 463 MB
File1
Itanium: 8 MB
File1



Itanium: 473 MB
File1
Mandatory for 10.3 Net/Package Installers:

- Security Advisory
- Apache Plug-ins zip
- Instructions
Oracle WebLogic Server 10.0 MP1

Oracle WebLogic Server 9.2 MP3


x86: 688 MB
File1

x86: 636 MB
File1
x86: 695 MB
File1

x86: 639 MB
File1
SPARC: 636 MB
File1

SPARC: 598 MB
File1
   
Oracle WebLogic SIP Server 3.1

x86: 371 MB
File1
x86: 379 MB
File1
     
Documentation Library
All    


Additional Fusion Middleware Downloads
 
Microsoft Windows
Linux
Solaris
Oracle Coherence

All versions    
Oracle JRockit

All versions    
Oracle WebLogic Operations Control
All versions
Posted by 1010
98..Etc/weblogic2009. 2. 27. 13:11
반응형
웹로직 시작시 아래와 같은 InvalidClassException 오류가 발생한다면?

serialVersionUID의 값이 다르다는 것으로 보아 웹로직과 JDK가 서로 호환이 되지 않아서 발생하는 문제다.
동일한 클래스일지라도 serialVersionUID가 다르면 다른 클래스로 인식되어 서로 데이터를 주고 받을 수 없다.

There are 1 nested errors:

weblogic.management.ManagementException: [Management:141266]Parsing Failure in c
onfig.xml: javax.xml.namespace.QName; local class incompatible: stream classdesc
 serialVersionUID = 4418622981026545151, local class serialVersionUID = -9120448
754896609940
        at weblogic.management.provider.internal.RuntimeAccessImpl.<init>(Runtim
eAccessImpl.java:122)
        at weblogic.management.provider.internal.RuntimeAccessService.start(Runt
imeAccessService.java:38)
        at weblogic.t3.srvr.ServerServicesManager.startService(ServerServicesMan
ager.java:374)
        at weblogic.t3.srvr.ServerServicesManager.startInStandbyState(ServerServ
icesManager.java:125)
        at weblogic.t3.srvr.T3Srvr.initializeStandby(T3Srvr.java:630)
        at weblogic.t3.srvr.T3Srvr.startup(T3Srvr.java:402)
        at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:361)
        at weblogic.Server.main(Server.java:67)
Caused by: java.io.InvalidClassException: javax.xml.namespace.QName; local class
 incompatible: stream classdesc serialVersionUID = 4418622981026545151, local cl
ass serialVersionUID = -9120448754896609940
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:546)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:155
2)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
699)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at java.util.HashMap.readObject(HashMap.java:1066)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946
)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:19
08)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at java.util.HashMap.readObject(HashMap.java:1067)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946
)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:19
08)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)

        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
719)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
        at com.bea.staxb.buildtime.internal.bts.BindingFile.forSer(BindingFile.j
ava:77)
        at com.bea.staxb.buildtime.internal.tylar.RuntimeTylar.getBindingFiles(R
untimeTylar.java:111)
        at com.bea.staxb.buildtime.internal.tylar.RuntimeTylar.getBindingLoader(
RuntimeTylar.java:90)
        at com.bea.staxb.runtime.internal.BindingContextFactoryImpl.createBindin
gContext(BindingContextFactoryImpl.java:66)
        at com.bea.staxb.runtime.internal.BindingContextFactoryImpl.createBindin
gContext(BindingContextFactoryImpl.java:52)
        at weblogic.descriptor.internal.MarshallerFactory.<init>(MarshallerFacto
ry.java:48)
        at weblogic.descriptor.DescriptorManager$DefaultMarshallerFactorySinglet
on.<clinit>(DescriptorManager.java:40)
        at weblogic.descriptor.DescriptorManager.getDefaultMF(DescriptorManager.
java:116)
        at weblogic.descriptor.DescriptorManager.getMarshallerFactory(Descriptor
Manager.java:125)
        at weblogic.descriptor.DescriptorManager.getDescriptorFactory(Descriptor
Manager.java:153)
        at weblogic.descriptor.DescriptorManager.createDescriptor(DescriptorMana
ger.java:277)
        at weblogic.management.provider.internal.DescriptorManagerHelper.loadDes
criptor(DescriptorManagerHelper.java:52)
        at weblogic.management.provider.internal.RuntimeAccessImpl$IOHelperImpl.
parseXML(RuntimeAccessImpl.java:599)
        at weblogic.management.provider.internal.RuntimeAccessImpl.parseNewStyle
Config(RuntimeAccessImpl.java:230)
        at weblogic.management.provider.internal.RuntimeAccessImpl.<init>(Runtim
eAccessImpl.java:110)
        ... 7 more

>
<2007. 10. 12 오전 10시 32분 56초 KST> <Notice> <WebLogicServer> <BEA-000365> <S
erver state changed to FAILED>
<2007. 10. 12 오전 10시 32분 56초 KST> <Error> <WebLogicServer> <BEA-000383> <A
critical service failed. The server will shut itself down>
<2007. 10. 12 오전 10시 32분 56초 KST> <Notice> <WebLogicServer> <BEA-000365> <S
erver state changed to FORCE_SHUTTING_DOWN>


해결안:

1. setDomainEnv.cmd 파일에
- Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0 추가

2. ant task 수행 중 다음과 같이 ANT_OPT를 설정한다.
Set ANT_OPT=-Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0

3. 모든 ANT 파일의 java 혹은 javac 작업에서 jvmarg를 아래 샘플처럼 적용하라.
<target name="run">
<java classname="examples.webservices.jws_basic.simple.Client" fork="true"
failonerror="true" >
<!--Note the jvmarg tag -->
<jvmarg line="-Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0" />
<classpath refid="client.class.path"/>
<arg line="http://${wls.hostname}:7001/jws_basic_simple/SimpleService" />
</java>
</target>
Posted by 1010
98..Etc/weblogic2009. 2. 27. 12:02
반응형

1. JEUS 5.0 깔끔하게 삭제
(프로그램 추가/제거에서 삭제 후 C:\TmaxSoft 폴더 직접 삭제)


2. WebLogic 설치 (계속 Next 눌러서 설치)
   -> install 이 시작 됨
   -> Install XML Spy 과 Run QuickStart 체크 해제 후 Done

▶▶▶ 설정 하기 ◀◀◀

Configuration Wizard 실행
-> Create a new WebLogic configuration
-> Basic WebLogic Server Domain
-> Express
-> 패스워드 입력 : 12345678 (최소 8자)
-> Development Mode / Bea Supplied SDKs (Sun SDK 1.4.1)
-> Create 클릭

User Project -> mydomain -> Start Server 실행

http://localhost:7001/console 접속
(아이디 weblogic / 비번 12345678)


C:\bea\user_projects\domains\mydomain\applications 에 webtest 폴더 만들기
(webtest가 루트가 됨)


webtest 폴더 밑에 WEB-INF 폴더 생성
WEB-INF 폴더 밑에 classes, lib, src 폴더 생성(총 3개)

* 폴더 구조 *
webtest ─ WEB-INF ─ classes
          └ lib
          └ src


web.xml, weblogic.xml 를 WEB-INF폴더에 카피 후 내용 지우기

<< web.xml 내용 >>
<?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE web-app PUBLIC
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
</web-app>

<< weblogic.xml 내용 >>
<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE weblogic-web-app
    PUBLIC "-//BEA Systems, Inc.//DTD Web Application 7.0//EN"
    "http://www.bea.com/servers/wls700/dtd/weblogic700-web-jar.dtd" >
<weblogic-web-app>
</weblogic-web-app>


C:\bea\user_projects\domains\mydomain\startWebLogic.cmd 문서 열기
38번 라인 수정 -> set PRODUCTION_MODE=false


▶▶▶ 테스트 하기 ◀◀◀

webtest 폴더 밑에 index.html 생성

서버 재시작

http://localhost:7001/webtest/index.html

Error 404--Not Found 메세지가 뜨면 성공


▶▶▶ Console로 접속해서 설정 하기 ◀◀◀

http://localhost:7001/console 접속

Web Application Modules 클릭

Deploy a new Web Application Module... 클릭

applications 클릭

webtest 체크 후 Target Module 클릭

Deploy 클릭

http://localhost:7001/webtest/index.html 접속 후 페이지 뜨면 성공


▶▶▶ context-root 추가하기 ◀◀◀

<< weblogic.xml 내용 >>
<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE weblogic-web-app
    PUBLIC "-//BEA Systems, Inc.//DTD Web Application 7.0//EN"
    "http://www.bea.com/servers/wls700/dtd/weblogic700-web-jar.dtd" >
<weblogic-web-app>
 <context-root>/</context-root>
</weblogic-web-app>

http://localhost:7001/webtest 로 접속하던 것을
   http://localhost:7001/ 로 접속 가능함


▶▶▶ Servlet 테스트 하기 ◀◀◀

시작 > 실행 > cmd

C:\bea\user_projects\domains\mydomain 디렉토리로 이동
.\setEnv.cmd 실행 (WebLogic 환경에 맞춰서 컴파일 하는 명령어)

서블릿 파일 작성 후 WEB-INF 밑 src 폴더에 저장
C:\bea\user_projects\domains\mydomain\applications\webtest\WEB-INF\src 디렉토리로 이동

javac -d ..\classes HelloWorldServlet.java (컴파일)


▶▶▶ web.xml 에 서블릿 맵핑 하기 ◀◀◀

<< weblogic.xml 내용 (추가) >>
<web-app>
 <servlet>
  <servlet-name>helloworld</servlet-name>
  <servlet-class>examples.HelloWorldServlet</servlet-class>
 </servlet>

 <servlet-mapping>
  <servlet-name>helloworld</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>
</web-app>

- 서버 재시작 -
http://localhost:7001/hello (접속)


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

DB연결 부분은... 알아서 해석해주세요 ㅡㅡ;; 너무 빨라서 정리를;;

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

-jdbc-
Connection Pools 

Configure a new JDBC Connection Pool...

디비타입 - 오라클
디비드라이버 - 오라클스 드라이버 씬

네임 - OracleConnectionPool

디비네임 - XE

127.0.0.1
1521
scott
tiger
tiger

continue

create deploy

///////////////////////////////////////

Data Sources 
Configure a new JDBC Data Source
네임 - OracleDataSource
jndi네임 - XE

Posted by 1010
98..Etc/weblogic2009. 2. 26. 19:11
반응형
[시스템운영] WAS/WebServer | LECTURE  
WebLogic Platform 8.1 Installation Guide (초보자를 위한 웹로직 설치법)
  작성자 : 조대협 (javastudy) 작성일 : 2004-03-18 17:01:00 (2004-04-07 17:02:52)

 

프린트하기

 


WebLogic Platform 8.1

Installation Guide





BEA Systems Korea [kr.bea.com]

김현수 [?_N_O_SPAM@bea.com]







MS-WORD 형식의 문서입니다.
아래의 첨부파일 목록에서 *.doc 파일을 다운받아 보실 수 있습니다.



 
     

[첨부파일 다운로드]
1. lecture0201_1_3_WebLogic Platform 8.1 Installation Guide and so on.doc (4539KB)
Posted by 1010
98..Etc/JSTL2009. 2. 26. 18:27
반응형
org.apache.jasper.JasperException: This absolute uri (http://java.sun.com/jsp/jstl/core)
cannot be resolved in either web.xml or the jar files deployed with this application


JSTL 을 제대로 연결하지 못하는거 같아 여러 방면으로 찾아보았다.
소스 상에는 문제가 없는데 문제가 생기는건 jar 문제 같았다.
jstl.jar 를 해석하는 standard-1.0.6 을 뜯어서 보니 META-INF 안에 .tld 파일의 URL이
jsp 가 빠진 주소이다 . 하지만 사이트에서는
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 다음과 같이 쓰기 때문에
맞지 않았던것이다.
사용자 삽입 이미지
그래서 아래 주소로 가서 jstl.jar 와 standard.jar 를 새로 받아 넣었더니 제대로 되는 것이다.
http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi
1.1.2 .zip 파일을 받는다.

다음의 주소는 JSTL  지침서 이다. 시간날때 참조하자.
http://java.sun.com/developer/technicalArticles/javaserverpages/faster/
Posted by 1010
98..Etc/JSTL2009. 2. 26. 18:07
반응형

간혹 Jeus에서도 잘 돌던 JSP가 Tomcat에서 500번 에러가 나는 경우가 있는데

대부분의 경우 JSTL을 사용하는 경우이다.

대략 다음과 같은 형태다.



메시지를 자세히 보면 이런 내용이 나온다.

According to TLD or attribute directive in tag file, attribute value does not accept any expressions

요컨데 expression language를 사용할 수 없다는 것


이 내용으로 구글링을 해보면 이런 내용이 나온다.
참고: http://forum.java.sun.com/thread.jspa?threadID=683007&messageID=9423383


내용인 즉 expression을 사용하려면 JSTL 1.1을 써야한다는 내용이 많다.
Struts 1.3.8에 포함된 JSTL은 1.0.2 였기 때문에
일부러 J2EE SDK가 포함된 Sun AppServer를 다운 받아 appserv-jstl.jar 로 교체를 해봤다.
그래도 마찬가지 현상..
 
대략 글을 더 살펴보니 이런 솔루션이 나온다.
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 를 쓰지말고
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> 를 쓰라는 것
결과는 잘 나온다.


그런데 Jeus에서도 나오는게 Tomcat에서 저렇게 해야만 한다는게 못내 섭섭하다.
그래서 더 내용을 살펴보니
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 요걸로 하면 다 된단다.


결과는 다음과 같다.

잘 나온다. 
결국 다른 패치 없이 Tomcat 5 이상에서 Struts 1.3.8 만가지고 JSTL 사용 이상 없다.
다행다행 >ㅁ<
Posted by 1010
51.Struts22009. 2. 26. 14:13
반응형

Index of /apache/struts/binaries

Icon  Name                           Last modified      Size  Description
[DIR] Parent Directory - [   ] struts-1.3.10-all.zip 08-Dec-2008 08:36 44M [TXT] struts-1.3.10-all.zip.asc 08-Dec-2008 08:35 202 [   ] struts-1.3.8-all.zip 12-Mar-2007 09:01 44M [TXT] struts-1.3.8-all.zip.asc 12-Mar-2007 09:01 186 [   ] struts-1.3.9-all.zip 11-Aug-2007 23:29 43M [TXT] struts-1.3.9-all.zip.asc 11-Aug-2007 23:29 186 [   ] struts-2.0.12-all.zip 16-Oct-2008 11:22 90M [TXT] struts-2.0.12-all.zip.asc 16-Oct-2008 11:22 189 [   ] struts-2.0.12-backport.zip 16-Oct-2008 11:29 3.0M [TXT] struts-2.0.12-backport.zip.asc 16-Oct-2008 11:29 189 [   ] struts-2.0.14-all.zip 23-Nov-2008 05:52 89M [TXT] struts-2.0.14-all.zip.asc 23-Nov-2008 05:52 189 [   ] struts-2.0.14-backport.zip 23-Nov-2008 05:52 3.0M [TXT] struts-2.0.14-backport.zip.asc 23-Nov-2008 05:52 189 [   ] struts-2.1.2-all.zip 25-May-2008 12:42 97M [TXT] struts-2.1.2-all.zip.asc 25-May-2008 12:41 189 [   ] struts-2.1.6-all.zip 13-Jan-2009 11:05 110M [TXT] struts-2.1.6-all.zip.asc 13-Jan-2009 11:06 189
Posted by 1010
51.Struts22009. 2. 26. 14:09
반응형

archive.apache.org

This site contains the historical archive of old software releases.

For current releases, please visit the mirrors.

Icon  Name                          Last modified      Size  Description
[DIR] Parent Directory - [DIR] binaries/ 14-Jan-2009 02:19 - [DIR] documentation/ 13-Jan-2009 02:03 - [DIR] examples/ 14-Jan-2009 02:16 - [DIR] library/ 14-Jan-2009 02:14 - [DIR] old/ 26-May-2005 20:18 - [DIR] scripting/ 18-Mar-2007 07:21 - [DIR] shale/ 28-Mar-2006 05:04 - [DIR] source/ 13-Jan-2009 02:02 - [DIR] struts-1.0.2/ 26-May-2005 04:37 - [DIR] struts-1.1-b1/ 26-May-2005 04:49 - [DIR] struts-1.1-b2/ 26-May-2005 04:50 - [DIR] struts-1.1-b3/ 26-May-2005 04:52 - [DIR] struts-1.1-rc1/ 26-May-2005 04:11 - [DIR] struts-1.1-rc2/ 26-May-2005 04:10 - [DIR] struts-1.1/ 26-May-2005 04:34 - [DIR] struts-1.2.2/ 26-May-2005 20:10 - [DIR] struts-1.2.4/ 26-May-2005 04:04 - [DIR] struts-1.2.6/ 26-May-2005 20:10 - [DIR] struts-1.2.7/ 26-May-2005 04:15 - [DIR] struts-faces/ 26-May-2005 04:54 - [DIR] struts-legacy/ 26-May-2005 04:40 - [   ] KEYS 24-Dec-2008 14:26 23K [   ] KEYS.20060311 05-Dec-2005 22:57 11K [   ] KEYS.bu 26-May-2005 02:45 7.7K [   ] struts-current-all.zip 16-Aug-2006 18:46 39M [TXT] struts-current-all.zip.asc 16-Aug-2006 18:45 188 [TXT] struts-current-all.zip.md5 16-Aug-2006 18:45 55 [   ] struts-current-all.zip.sha1 16-Aug-2006 18:45 63 [   ] struts-current-apps.zip 16-Aug-2006 18:46 19M [TXT] struts-current-apps.zip.asc 16-Aug-2006 18:46 188 [TXT] struts-current-apps.zip.md5 16-Aug-2006 18:46 56 [   ] struts-current-apps.zip.sha1 16-Aug-2006 18:46 64 [   ] struts-current-docs.zip 16-Aug-2006 18:46 12M [TXT] struts-current-docs.zip.asc 16-Aug-2006 18:46 188 [TXT] struts-current-docs.zip.md5 16-Aug-2006 18:46 56 [   ] struts-current-docs.zip.sha1 16-Aug-2006 18:46 64 [   ] struts-current-lib.tar.gz 22-Mar-2006 20:57 1.3M [TXT] struts-current-lib.tar.gz.asc 22-Mar-2006 20:57 226 [TXT] struts-current-lib.tar.gz.md5 22-Mar-2006 20:57 32 [   ] struts-current-lib.zip 16-Aug-2006 18:46 2.6M [TXT] struts-current-lib.zip.asc 16-Aug-2006 18:46 188 [TXT] struts-current-lib.zip.md5 16-Aug-2006 18:46 55 [   ] struts-current-lib.zip.sha1 16-Aug-2006 18:46 63 [   ] struts-current-src.tar.gz 22-Mar-2006 20:57 5.5M [TXT] struts-current-src.tar.gz.asc 22-Mar-2006 20:57 226 [TXT] struts-current-src.tar.gz.md5 22-Mar-2006 20:57 32 [   ] struts-current-src.zip 16-Aug-2006 18:46 5.8M [TXT] struts-current-src.zip.asc 16-Aug-2006 18:46 188 [TXT] struts-current-src.zip.md5 16-Aug-2006 18:46 55 [   ] struts-current-src.zip.sha1 16-Aug-2006 18:46 63 [   ] struts-current.tar.gz 22-Mar-2006 20:56 14M [TXT] struts-current.tar.gz.asc 22-Mar-2006 20:56 226 [TXT] struts-current.tar.gz.md5 22-Mar-2006 20:56 32 [   ] struts-current.zip 22-Mar-2006 20:56 14M [TXT] struts-current.zip.asc 22-Mar-2006 20:56 226 [TXT] struts-current.zip.md5 22-Mar-2006 20:56 32
Posted by 1010
05.JSP2009. 2. 26. 12:21
반응형

JSP Tomcat 개발환경 구축(window기준)

1. JDK 설치 

 1) 다운로드: http://developers.sun.com/downloads/

 2) 설치(6u10 Beta b25 for Windows기준):
     jdk기본경로 -> C:\Program Files\Java\jdk1.6.0_10
     jre기본경로 -> C:\Program Files\Java\jre6

 3) 환경변수(내컴퓨터->오른쪽단추->팝업페뉴->속성(등록정보)->고급->환경변수->(시스템변수 or 사용자변수)):
 
  JAVA_HOME = C:\Program Files\Java\jdk1.6.0_10
  (새로 만들어야 함, 주의할 것은 마지막에 ;(쌔미콜론)이 없어야함)
 
  CLASSPATH = .;%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\tools.jar

  Path = %Path%;%JAVA_HOME%\bin; (기존의 Path 뒷쪽에 추가)
  (%Path%;부분은 이전의 path를 의미)
  (실재로 추가하는 것은 ;%JAVA_HOME%\bin; 뿐임)
  (이때 ;(쌔미콜론)은 변수들을 구분하는 구분자로 사용되는 것임)

  예)Path = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%JAVA_HOME%\bin;

2. Tomcat 설치

 1) 다운로드: http://tomcat.apache.org/download-60.cgi -> Binary Distributions  Core: Windows Service Installer 버전 다운로드

 2) 설치(tomcat6.x기준)
     1. License Agreement -> I Agree 선택
     2. Choose Componets -> Full 선택(Examples 설치를 위해)
     3. Choose Install Location -> C:\Program Files\Apache Software Foundation\Tomcat 6.0 (tomcat기본경로)
     4. Configuration ->
   prot = 8080(수정가능)
   User Name = admin, Password = 1234 (tomcat manager와 tomcat admin 창에 들어가기 위해 필요)
     5. Java Virtual Machine -> C:\Program Files\Java\jre6 (기본 jre 경로)


 3) 환경변수(내컴퓨터->오른쪽단추->팝업페뉴->속성(등록정보)->고급->환경변수->(시스템변수 or 사용자변수)):

  CATALINA_HOME
  = C:\Program Files\Apache Software Foundation\Tomcat 6.0

  (새로 만들어야 함, 주의할 것은 마지막에 ;(쌔미콜론)이 없어야함)

  Path = %Path%;%JAVA_HOME%\bin;%CATALINA_HOME%\bin;
  (기존의 Path 뒷쪽에 추가)(실재로 추가하는 것은 ;%CATALINA_HOME%\bin; 뿐임)

  예)Path = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%JAVA_HOME%\bin;%CATALINA_HOME%\bin;

  ## command(프롬프트)창에서 set 입력해서 환경변수 적용 결과 확인 할 수 있음 ##


 4) 자바 ext폴더에 library 추가
   원본 파일 위치 = %CATALINA_HOME%\lib\servlet-api.jar 
    (javax.servlet패키지와 javax.servlet.http패키지 가 들어있다.)
   복사할 폴더 위치  =  %JAVA_HOME%\jre\lib\ext



3. Web Server 동작확인
 시작메뉴->모든 프로그램(p)->
Apache Tomcat6.0->
Moniter Tomcat->
윈도우작업표시줄->
트레이(Tray:시계표시부분)->
Moniter(빨간깃발 원안에 세모표시)->
오른쪽단추->Start Service->
인터넷익스플로러->
주소표시줄->
http://localhost:8080/->
열린창에서 좌측상단에 tomcat로고 보이면 정상동작->
화면 좌측메뉴->
Administration->
Tomcat Manager 클릭->
아이디=admin,패스워드=1234->
Manager 창 확인

####주의사항: 자바환경변수가 잘못 설치되면 톰캣이 정상작동하지 않음#####


4. Eclipse WPT Server 설치 및 동작 확인


1. eclipse의 주메뉴에서 Window -> Preferences 선택

2. Preferences창의 좌측 트리메뉴에서 Server -> Runtime Environments 선택

3. Server Runtime Environments창에서 Add 선택

4. new Server Runtime Environment 창의 트리메뉴에서 Apache -> Apache Tomcat v6.0 선택하고 Next 버튼 선택

5. Tomcat installation directory의 항목에 Browser 버튼을 선택한 후 설치된 CATALINA_HOME을 찾아서 지정한다.
예 : C:\Program Files\Apache Software Foundation\Tomcat 6.0

6. Finish 버튼을 선택하여 서버설정을 완료한다.

7. Server Runtime Environments창에서 OK버튼을 선택해서 빠져나온다.

8. eclipse의 뷰 중에서 Servers을 선택한다.

9. Servers 뷰의 내용창에서 마우스 오른쪽 버튼을 클릭해서 팝업메뉴의 New -> Server 를 선택한다.

10. New Server 창에서 설정내용을 확인 한 후 Finish를 선택한다.
 -> 이 과정이 끝나면 Servers뷰의 내용창에 tomcat 서버가 설정된 것이 보인다.

11. Project Explorer 뷰 내용창에 Servers 프로젝트가 추가된 것을 확인한다.

12. Project Explorer 뷰 내용창의 여백 부분을 마우스오른쪽버튼으로 클릭하고 팝업메뉴를 띄워 New -> Dynamic Web Project 를 선택한다.

13. New Dynamic Web Project 창에서 Project Name 항목에 새로운 프로젝트의 이름을 기록한다.     
   예:Test
   주의 : 만일 내용창에 Test라는 프로젝트가 보이지 않으면 마우스 오른쪽 버튼을 클릭해서 팝업메뉴에서 ReFresh를 선택하면 보인다.

14. Project Explorer 뷰 내용창의 프로젝트 목록중에서 새로 작성한 Test라는 프로젝트를 선택한다.

15. Test프로젝트의 하위 폴더인 WebContent에서 오른쪽 버튼을 클릭해서 팝업메뉴를 띄우고 New -> JSP른 선택한다.
 주의 : Project Explorer가 아닌 Explorer(Package,Navigator)에서는 New -> Other를 선택한다. 그리고 New 창의 트리메뉴에서 Web -> JSP를 선택한다.

16. New JavaServer Page 창에의 File name 항목에 새로운 JSP파일의 이름을 기록한다.
예 : test.jsp
주의 : 이때 확장자를 기록하지 않아도 된다.

17. edit 뷰 창의 test.jsp 내용창 안에 내용을 기록한다.
예 :
     <body>
        WTP server 테스트입니다.    <-- 이부분을 입력한다.
     <body>

18. eclipse의 주메뉴에서 File -> Save를 선택한다.

19. edit 뷰 창에서 마우스 오른쪽 버튼을 클릭해서 팝업메뉴를 띄우고 Run As -> Run on Server를 선택한다.

20. Run on Server창에서 Finish를 선택한다.
이과정까지 끝나면 브라우저가 에디트뷰에 하나 추가되면서 결과가 보인다.
결과 예 : WTP server 테스트입니다.

Posted by 1010
51.Struts22009. 2. 26. 12:18
반응형

기본적인 struts 어플리케이션 개발의 Quick Start

최종갱신:   번역: April 27, 2007

목차


1. 머리말

이 문서는 Sun JDK 1.4.2. Eclipse 3.2 및 MyEclipse 5.1.1을 이용해 작성되고 있습니다. 모든 스크린 샷은 Eclipse, MyEclipse Enterprise Workbench 및 Windows XP의 Default User Interface 설정에 근거하고 있습니다. 이 문서의 설명으로 불명한 점이 있는 경우 「사용자 피드백」 섹션으로 MyEclipse Document 팀에 피드백하는 방법을 참조해 주세요.




2. 처음

이 튜톨리얼에서는 MyEclipse Enterprise Workbench 를 사용해 단순한 샘플 Struts 어플리게이션의 개발 및 테스트에 대해 설명합니다. Struts 나 MyEclipse 의 사전 지식은 필요없습니다.

체제와 기능 범위가 유사하기 때문에, 이 튜토리얼은「JSF 튜토리얼」과 비슷합니다. 이 두개의 같은 프로젝트 목표 및 개요를 가지기 때문에, MyEclipse에서의 Struts 툴의 사용방법을 이해하면, JSF 와 Struts 를 다음에 비교할 수 있습니다.




3. 요건

아래는 이 가이드로 사용하는 소프트웨어의 리스트입니다.

Sun Java(TM) Development Kit(JDK)5.0

http://java.sun.com/javase/downloads/previous.jsp

Eclipse Platform 3.2.2

http://www.eclipse.org/downloads/index.php

Eclipse Platform 3.2.1 NLpack1

http://download.eclipse.org/eclipse/downloads/drops/L-3.2.1_Language_Packs-200609210945/index.php

Eclipse Java Development Tools 3.2.2

http://www.eclipse.org/downloads/index.php

Eclipse Java Development Tools 3.2.1 NLpack1

http://download.eclipse.org/eclipse/downloads/drops/L-3.2.1_Language_Packs-200609210945/index.php

MyEclipse 5.1.1

https://www.myeclipseide.jp

Tomcat 5.0.x ( 5.0.28 이 바람직하다. 또는 다른 벤더의 서블릿/EJB 컨테이너)

http://tomcat.apache.org/download-55.cgi

이 데모에서는 유저명과 패스워드는「myeclipse」입니다.


주: JDK 를 인스톨해 컴퓨터를 재기동한 후 Eclipse, MyEclipse 및 Tomcat 을 인스톨 해주세요. MyEclipse 의 인스톨에 대한 자세한 것은「MyEclipse 인스톨/언인스톨 퀵 스타트」를 참조해주세요. 모든 소프트웨어를 인스톨하면「어플리케이션 디플로이먼트 및 서버 관리 퀵 스타트」로 설명되고 있듯이, MyEclipse로 Tomcat 5 컨넥터를 셋업하지 않으면, 셈플 어플리케이션을 디플로이 및 실행할 수 없습니다.



4. 신규 프로젝트의 셋업 및 구성

개발물을 작성하려면, MyEclipse로 Struts기능이 추가된 신규 Web프로젝트를 작성해야합니다. Web 프로젝트를 작성하려면, 아래의 그림1에 보이듯이「파일」>「신규」>「프로젝트」>「MyEclipse」>「J2EE 프로젝트」>「Web 프로젝트」의 위저드를 사용합니다.


그림 1 - 「신규 J2EE Web 프로젝트」위저드


그림 2 처럼 신규 프로젝트의 정보를 모두 입력합니다.


그림 2 - Web 프로젝트 설정


Web 프로젝트를 설정하면, Struts 기능을 추가해야 합니다. 이것을 실행하려면, 「패키지 익스플로어」뷰에서 프로젝트의 루트를 오른쪽 클릭하고, 그림 3 처럼「MyEclipse」>「Struts 기능추가」를 선택합니다.



그림 3 - Web 프로젝트에 Struts 기능추가


「MyEclipse Web 프로젝트의 Struts Support」다이얼로그에는, 적절한 Default가 설정되어 있습니다. 다만「신규 클래스용 Base 패키지」를 변경해서, 희망하는 로케이션을 변경시킬 수도 있습니다. 아래의 그림 4 에서는 단순히 Default로 놔둡니다.



그림 4 - Struts 기능 구성


위저드가 완료되면, 프로젝트 구조는 그림 5 처럼 나타나게 됩니다.


그림 5 - 구성 후의 프로젝트 레이아웃


프로젝트를 작성하면, 다음 섹션에서 설명하듯이 Web컨텐츠의 작성을 개시할 수 있습니다.




5. Struts 프로젝트의 개시

이 섹션에서는 단순한 Web사이트 로그인 화면을 닮은 샘플 Struts 어플리케이션을 작성하는 것에 초점을 맞추었습니다. 그래서, 필요한건 유저에게 로그인을 재촉하는 페이지와 로그인이 성공한 것을 나타내는 페이지의 2개 JSP페이지 뿐 입니다. 이러한 페이지는 각각 userLogic.jsp 및 userLoginSuccess.jsp 입니다. 단순화한것이기 때문에, 로그인 시행중 허가 에러가 발생했을 경우, 유저를 userLogin.jsp 페이지에 리다이렉트해 에러 멧세지를 표시합니다.


Struts 프로젝트를 개시할 때는 일반적으로 어플리케이션 전체의 프로우를 레이아웃하는 것이 유용합니다. 개발 팀은 어플리케이션의 개개의 부품을 얼마나 조합하면 좋은가를 충분히 검토할 수 있겠지요. 플로우를 잘라내는 가장 용이한 방법은, Struts 구성 편집자의 그래픽컬 디자인 모드를 사용해 그래픽컬하게 작성하는 방법입니다. Struts구성 편집자에게는 드러그 앤 드롭 툴의 팔레트가 있어서 유저는 디자인 실물모형으로 부터 페이지 플로우를 재빠르게 복사하는 것으로 어플리케이션의 작성을 시작할 수 있습니다. 셈플 로그인 어플리케이션의 플로우는 아래의 그림 6과 같이 됩니다.


주: 어플리케이션 플로우의 스크린샷은 Struts 디자이너를 사용해 작성되었습니다.

    Struts 디자이너의 액세스 방법 및 사용방법에 대해서는 다음 섹션에서 설명합니다.


그림 6 - 셈플 어플리케이션 플로우


이 디자인 레이아웃으로부터 userLogin.jsp 페이지를 표시하는 것으로 어플리케이션은 시작하는 것을 압니다. 로그인 페이지는 userLogin 액션을 호출해 로그인 조작을 실행합니다. 검증에러 또는 문제가 발생했을 경우 userLogin액션은 userLogin.jsp 페이지에 되돌립니다. 다만, 로그인이 성공했을 경우 어플리케이션은 userLoginSuccess.jsp 페이지로 진행됩니다.




5.1 Struts 프로젝트의 컴포넌트

일반적인 Struts 프로젝트는 이하의 개발 결과물의 카테고리로 구성됩니다.

  • JSP
  • Action
  • ActionForward *
  • ActionForm **
  • Struts 디플로이먼트 기술자 : struts-config.xml

* ActionForward 는 struts-config.xml 파일내의 <forward> 엔트리이며, 액션이 완료했을 때에 실행하는 패스를 정의합니다. ActionForward 클래스의 커스텀 임플리멘테이션에 대해서는 말하지 않습니다만, 이것은 가능하고, 확정 유저를 위한 툴로 서포트되고 있습니다.


** ActionForm 는 유저가 구체적인 ActionForm 임플리멘테이션을 작성해 페이지를 랩하는 것을 원하지 않는 경우에 DynaForm의 사용에 옮겨놓을 수 있습니다.


MyEclipse 에서는 이러한 컴포넌트의 언젠가 또는 모든것 (struts-config.xml 파일은 제외하다)을 3가직 방법으로 작성할 수 있습니다.

방법 1

아래의 그림 7 에 보이듯이「파일」>「신규」>「그 외」>「MyEclipse」>「Web-Struts」>「Struts 1.1 (또는 1.0)」메뉴를 사용해 Struts위저드를 선택합니다.


그림 7 - 모든 사용가능한 Struts 위저드


위저드는 단순하고, 지정된 Struts 컴포넌트가 서포트하는 모든값에 대해 prompt를 냅니다. 다만 다른 위저드보다 복잡한 위저드도 있습니다. 예를 들면, 아래의 그림 8 에 보이는「Struts Action」위저드에서는 Struts Action 으로 서포트되는 모든 기능의 포괄적인 범위가 표시됩니다.


그림 8 - 「신규 Struts Action」위저드

방법 2

「아웃라인」뷰를 사용합니다. 이 뷰는 Struts 구성 편집자의 소스 뷰 표시가 액티브한 편집 문맥일 때 사용 가능합니다.「아웃라인」뷰로부터 위저드를 액티브하게 하는 임의의 루트레벨의 노드를 오른쪽 클릭해서 그 타입의 신규 컴포넌트를 작성하는 일도 위저드를 사용해 기존은 컴포넌트를 편집할 수 도 있습니다. 그림 9 는 이러한 문맥의 위저드를 사용하는 예를 나타냅니다.



그림 9 - 「아웃라인」뷰로부터의 Struts 위저드의 기동


이 스크린샷이 주목할 만한 점은 일부의 액션이 실제로 논리적으로 관련한 위저드이며, 플로우 전체의 작성을 가능하게 하는 것입니다. 위저드는 함께 링크되어, 공통의 값을 심리스에 재이용해 수동의 재입력을 최소한으로 합니다.

방법 3

그림 10 에 나타내는 Struts 구성 편집자의 디자인 페이지의 사용도, Struts 성과물을 작성하기 위한 매우 편리한 방법입니다. 디자이너에는, struts-config.xml 파일을 열어 액세스 합니다. 편집자의 하부에서 「디자인」탭을 클릭하면, 디자이너를 실행할 수 있습니다.


그림 10 - Struts 디자이너에의 액세스


디자이너로 전환하면, 아래의 그림 11 과 같은 뷰가 표시됩니다.


그림 11 - Struts 디자이너의 개요


Struts 프로젝트의 다양한 컴퍼넌트의 작성 방법에 대해 설명했습니다. 다음의 섹션에서는, 로그인 데모 어플리케이션의 다양한 부분을 작성합니다.



5.2 어플리케이션의 구축

데모 어플리케이션의 구축은, 우선 JSP 페이지의 작성을 중심으로 실시합니다. 데모 어플리케이션을 Web 사이트의 로그인 화면과 같이 하므로, userLogin.jspuserLoginSuccess.jsp 라고 하는 2 개의 JSP 페이지만 필요하게 됩니다. 대부분의 Struts 어플리케이션과 같게, 로그인중에 문제가 발생했을 경우, 유저를 userLogin.jsp 페이지에 되돌려, 에러를 표시합니다 (loginUserFailure.jsp 페이지를 작성할 필요가 없는 것은 이 때문에입니다).


우선, userLoginSuccess.jsp 페이지를 작성합니다. 최초로 마지막 페이지를 작성하므로 순서가 역과 같이 생각됩니다만, 이렇게 하는 것으로, 「신규 Form, Action 및 JSP」위저드를 사용해 최초의 JSP 페이지를 작성함과 함께, 관련하는 Action 및 ActionForm 를 작성할 수 있습니다.


디자이너 뷰로부터 userLoginSuccess.jsp JSP 페이지를 작성하려면 , "JSP" 팔레트 툴을 사용합니다. 우선 이 툴을 클릭하고 나서, 캔버스를 클릭합니다. 아래의 그림 12 의 설명에 따라 주세요.



그림 12 - 디자이너의 사용에 의한 JSP 의 작성


캔버스를 클릭하면, 그림 13 에 나타내는 것 같은 「신규 JSP 페이지」다이얼로그가 표시됩니다.


:「Struts 1.1 을 사용하는 표준 JSP」템플릿을 선택해 주세요.


그림 13 - JSP 위저드의 구성


종료」버튼을 클릭하면, 그림 14 에 나타나듯이, 디자인 뷰에 신규에 작성된 페이지가 표시됩니다.


: 「위저드 완료 후 파일을 연다」체크 박스를 선택했을 경우, 신규의 JSP 페이지를 추가하면, MyEclipse 는 JSP 편집자내에 신규 JSP 페이지를 엽니다. 아래의 스크린샷에서는, 어플리케이션이 어떻게 표시되는지를 나타내기 위해서 클릭해 디자이너에 돌아오고 있습니다. 이것은 JSP 페이지를 작성할 경우에 표시되는 플로우가 아니기 때문에 잘못되지 않게 해 주세요.


그림 14 - JSP 페이지가 표시된 Struts 디자이너


JSP 페이지를 완성시키기 위한 나머지의 작업은, 유저에게 로그인이 성공한 것을 알리는 메세지의 출력입니다. 완성한 페이지의 소스 코드를, 아래의 그림 14a 에 나타냅니다.


주: 이 가이드를 이해하기 쉽게 하기 위해서 (또, 코드 순이 펫을 짧게하기 위해 ), 이하의 JSP 페이지는, 파일을 처음으로 열었을 때에 표시되는 디폴트의 JSP 템플릿과는 닮지 않았습니다. 여기에 있는 코드를 그대로 카피하거나 신규 JSP 파일의 작성 후에 이 코드를 디폴트의 JSP 템플릿 코드에 거두어 들이거나 해도 상관하지 않습니다.


userLoginSuccess.jsp

<%@ page language= "java"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-template" prefix="template" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html locale="true">
  <head>
    <title>My Struts 'userLoginSuccess.jsp' ending page</title>
  </head>
 
  <body>
    Hello <bean:write name="userName" scope="request" />, you successfully logged in!
  </body>
</html:html>

그림 14a - userLoginSuccess.jsp 의 코드


이 페이지는 매우 단순합니다. 여기서의 작업으로 중요한 것은 <body> 태그의 내용뿐이어, 어플리케이션의 request 스코프에 보관되고 있는 변수 userName 의 값을 출력합니다. 따라서, 다음에 작성하는 Action 로, request 스코프내의 userName 의 이름에 의해 속성을 지정할 필요가 있습니다.


여기에서도,userLogin.jsp 페이지, ActionForm, 및 Action 를 작성할 필요가 있습니다. 작업이 많이 있는 것처럼 생각됩니다만, MyEclipse 에서는 「신규 Form」 및 「신규 Form, Action 및 JSP」위저드를 사용하는 것으로, 이 작업을 큰폭으로 간소화합니다.


userLogin.jsp 페이지를 작성할 때는, 이 페이지에 표시하는 필드를 검토해, 그러한 필드를 각각의 ActionForm 에 맵 할 필요가 있습니다. Form 에는 값이 보관되어 적절한 Action 에게 건네집니다. Form 를 생성할 때, 앞서 얘기한 2 개의 MyEclipse 위저드는, Form 와 함께 JSP 페이지를 작성하는 기능을 제공합니다. 이 기능에서는 Form 의 모든 자산이 사용되어 이러한 모든 Form 필드가 이미 존재해 사용 가능한 JSP 페이지가 생성됩니다. 이러한 상황으로, 로그인을 처리하기 위한 Action 도 작성하기 때문에, 단순한「Form」위저드는 아니고「Form, Action 및 JSP」위저드를 사용합니다.


어플리케이션의 작성을 속행하려면 , 그림 15 에 나타나듯이, Struts 디자이너의 흰 캔버스 에리어를 오른쪽 클릭해,「신규」> 「Form, Action 및 JSP」위저드의 순서에 선택합니다.


그림 15 - 디자이너로부터의 「Form, Action 및 JSP」위저드의 기동


최초로「Struts 1.1 Form 선언」위저드가 표시됩니다. 이것이 3 스텝 위저드의 최초의 위저드입니다. 위저드가 적절한 디폴트치를 설정할 수 있도록(듯이), 유스케이스명을 입력해 주세요. 그림 16 에,유스케이스를 입력하면 어떻게 값이 설정되는지를 나타냅니다.



그림 16 - 「Struts 1.1 Form 선언」위저드


다음에, 2 개의 Form 자산, userNamepassword 를 추가할 필요가 있습니다. 「패스워드」필드를 추가하는 경우, 그림 17 에 나타나듯이「JSP 입력 타입」필드의 「password」를 선택합니다.


그림 17 - Form 에의 자산의 추가


그림 18 - Form 자산


「다음」버튼을 선택하기 전에, 「JSP」탭을 클릭해, MyEclipse 로 이러한 값이 설정된 Form 를 가지는 양식 JSP 페이지를 생성하는 것을 위저드에 나타납니다. 아래의 그림 19 에 이것을 나타냅니다.

: 위저드의 디폴트의 행동에서는, 생성된 JSP 는 "/form" 서브 디렉토리에 배치됩니다만, 이 데모 어플리케이션에서는, 모든 JSP 를 webroot 에 배치합니다.


그림 19 - Form 용의 JSP 페이지의 생성을 유효하게 한다


마지막에 「메소드」탭을 클릭해, 위저드가 신규 Form 에 자동 생성할 수 있는 모든 메소드의 체크를 제외합니다. 아래의 그림 20 에 이 구성을 나타냅니다.


: 이 데모를 단순한 것으로 하기위해, reset 메소드나 validate 메소드를 생성합니다만, 일반적으로는 독자적인 어플리케이션을 코딩 할 경우에 이러한 메소드를 사용하는 것은 유리한 계책입니다.


그림 20 - 메소드 생성을 무효로 한다


「다음」버튼을 클릭하면,「Struts 1.1 Action 선언」위저드에 진행됩니다. 이 위저드에서는, 거의 모든 값이 이미 입력되고 있습니다. 여기에서는, 작성 끝난 Form 와 신규 Action 를 묶는 것에 의해 시간이 절약됩니다. 변경은 자유롭게 가 상관하지 않습니다만, 대부분의 경우 (물론 이 데모 어플리케이션에서도), 여기서 유일 주의할 필요가 있는 것은, Action 를 사용할 수 있는 「Forward」를 입력하는 것입니다. 그림 21 에 위저드의 스크린샷를 나타냅니다.


그림 21 - 「Struts 1.1 Action 선언」위저드


「ActionForward」를 지정하려면 , 그림 22 에 나타내도록(듯이)「Forward」탭을 클릭합니다.



그림 22 - Action Forwards 의 셋업


이 Action 에의 Forward 의 추가 후, 「종료」버튼을 클릭하면(자), MyEclipse 로 모든 신규 정보를 사용해 모든 자원을 작성하거나struts-config.xml 파일 ( 및 디자이너)을 갱신하거나 할 수 있습니다. 그림 23 에 갱신된 레이아웃 및 어플리케이션 구조를 나타냅니다.


: 작은 스크린샷에 다이어그램의 모든 엘리먼트를 명시할 수 있도록, 일부가 수동으로 레이아웃 되고 있습니다. 다이어그램을 수동으로 레이아웃 할 때, 변경 내용은 장래의 편집을 위해서 보존됩니다.


그림 23 - Struts 디자이너 및 어플리케이션의 개요


이것으로 어플리케이션 플로우가 정의되었기 때문에, Action 에 논리를 추가해, 이 데모·어플리케이션의 "login" 순서를 처리할 필요가 있습니다. 그림 24 에 나타내도록(듯이), 디자인을 더블 클릭 하면 자원으로 점프 할 수 있습니다.


그림 24 - 디자이너·자원을 더블 클릭 해 편집자를 연다


UserLoginAction.java 파일을 처음으로 열었을 경우,execute 메소드용으로 생성된 코드는 그림 24a 와 같이 됩니다.


UserLoginAction.java
public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) {
  UserLoginForm userLoginForm = (UserLoginForm) form;
  // TODO Auto-generated method stub
  return null;
 }

그림 24a - 생성된 execute 메소드


디폴트의 임플리멘테이션에서는 단지 null 를 돌려주고 있을 뿐입니다만, 이것을 제거해, 그림 24b 에 나타내는 것 같은 단순한 로그인 Logic에 옮겨놓습니다.

UserLoginAction.java
 public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) {
  UserLoginForm userLoginForm = (UserLoginForm) form;
 
  if(userLoginForm.getUserName().equals("myeclipse") && userLoginForm.getPassword().equals("myeclipse"))
  {
   request.setAttribute("userName", userLoginForm.getUserName());
   return mapping.findForward("success");
  }
 
  return mapping.findForward("failure");
 }

그림 24b - 수정된 execute 메소드


여기에서는 매우 단순하게,userNamepassword 의 값이 함께 "myeclipse" 일지 어떨지를 체크합니다. "myeclipse" 인 경우,userName 를 request 스코프에 보관해,success forward 를 돌려주므로, userLoginSuccess.jsp 페이지에 사용자 정의의 메세지를 표시할 수 있습니다. 그렇지 않은 경우, 문제가 있으면, failure forward 를 돌려줍니다. 일반적으로 실제의 어플리케이션에서는, 발생한 문제를 설명하기 위해, failure forward 를 되돌리기 전에 ActionMessages 또는 ActionErrors 콜렉션을 request 스코프에 추가합니다.



6. 데모의 실행

이것으로 어플리케이션이 완성했습니다. 「데프로이먼트 관리」다이얼로그를 열어, 이 프로젝트의 신규 데프로이먼트를 셋업 하는 것으로, Tomcat 5 에 데프로이 할 수 있습니다. 그림 25 에 나타내는 관리 다이얼로그를 열려면 , 「패키지 익스플로어」뷰로 프로젝트를 오른쪽 클릭해,「MyEclipse」> 「프로젝트 데프로이먼트의 추가와 제거」를 선택하는지, 툴바의「MyEclipse J2EE 프로젝트를 서버에 데프로이」아이콘을 클릭합니다.


주: MyEclipse 로 Tomcat 5 (또는 그 외의) 어플리케이션 서버 컨넥터를 이미 셋업 하고 있는 것이 전제가 되고 있습니다. 아직 셋업 하고 있지 않고, help가 필요한 경우는,「어플리케이션의 데프로이먼트 및 서버 관리의 퀵 스타트」가이드를 참조해 주세요.



그림 25 - 신규 데프로이먼트의 작성


데프로이먼트의 완료 후에 데프로이먼트 상황을 체크해, 에러가 발생하고 있지 않는 것을 확인하는 것을 추천합니다. 이것을 실시하려면 , 그림 26 의 설명에 따릅니다.



그림 26 - 데프로이먼트가 성공한 것의 확인


마지막으로, 그림 27 에 나타내는 어플리케이션 서버의 시작 버튼을 사용해 Tomcat 를 기동합니다.



그림 27 - 어플리케이션·서버의 개시


서버가 시작되면, 출력이 Eclipse 의 「콘솔」뷰에 송신됩니다. 그림 28 에, 이하의 2 개를 확인할 수 있도록 통상의 Tomcat 의 기동을 나타냅니다.
 1) Tomcat 가 Web 어플리케이션을 정상적으로 데프로이 했다
 2) Tomcat 가 정상적으로 기동했다



그림 28 - 어플리케이션과 서버가 올바르게 기동한 것의 확인


Tomcat 5 가 실행되면(자), 「MyEclipse Web 브라우저」뷰를 열어 테스트할 수 있습니다. 이것을 실시하려면 ,「윈도우」> 「뷰의 표시」> 「그 외...」(을)를 선택해, 「뷰의 표시」다이얼로그에 액세스 해, 「MyEclipse Enterprise Workbench」> 「Web 브라우저」뷰를 선택합니다.


Open
그림 29 - 「Web 브라우저」뷰의 오픈


그림 30 에 나타나듯이 브라우저의 주소·바에 http://localhost:8080/StrutsLoginDemo/userLogin.jsp 라고 입력해, 샘플 어플리케이션을 액티브하게 합니다.


그림 30 - 데모 어플리케이션에의 로그인


이와 같이, 어플리케이션은 사용 가능하다라고 하는 것을 알수있습니다. 이것으로, 유저명과 패스워드를 입력할 수 있습니다.


주: 이 데모의 유저명과 패스워드는, 어느쪽이나 'myeclipse'입니다.


로그인 후, Form 가 검증되어 어플리케이션은 유저를 로그인 성공 페이지에 진행합니다. 그림 31 은, Action 에 의해 유저가 올바르게 진행된 userLoginSuccess.jsp 페이지를 나타내고 있습니다.



그림 31 - 성공한 로그인


주:본 샘플 어플리케이션에의 액세스때는, HTTP 포토로서 8080 을 지정하고 있습니다만, 포토 번호는 사용하시는 서버 설정에 맞추어 적당히 변경해 주세요.




7. 통계

이 데모에서는, MyEclipse Enterprise Workbench 로 사용 가능한 Struts 툴을 사용해, 단순한 Struts 어플리케이션을 작성했습니다.


이것으로, Struts 의 설명은 종료됩니다. Web 프로젝트에서의 작업, 어플리케이션의 데프로이먼트 및 서버 관리에 대한 개요는, 그 외의 퀵 스타트 문서로 입수할 수 있습니다. 자세하게는, 메인 메뉴의문서에 액세스 해 주세요.


8. 사용자 피디백

이 문서에 대해 의견, 제안이 있으면, 서포트 포럼으로 보내 주세요. 

Posted by 1010
51.Struts22009. 2. 26. 12:16
반응형
Posted by 1010
51.Struts22009. 2. 26. 12:15
반응형
Posted by 1010
90.개발관련문서2009. 2. 26. 12:14
반응형

=========정의예를들면=========
  총개수 : 21개    표시할 글의수 : 10개    페이지수 : 10개(한 화면에 표시할 페이지 번호수)
  전체글 : List list에 담는다
  =============================

  ====전체글에서 10개의 페이지를 가지고 오는 쿼리====
  SELECT * FROM (SELECT * from BOARD_JSP07_PIPE0502 order by no desc) WHERE ROWNUM<=10;

  바꿔서 하자면
  SELECT * FROM (SELECT * FROM BOARD_JSP07_PIPE0502 ORDER BY NO DESC) WHERE ROWNUM BETWEEN START AND END
  변경이 가능하다

  ====시작글 구하는 공식====
  시작글 =  (현재페이지-1) * 표시할글의수
  start = (currentpage-1) * numPerPage
  예)
  현재페이지 : 5페이지
  (5-1)*10 = 40
  1 페이지 : 1  10
  2 페이지 : 11 20
  3 페이지 : 21 30
  4 페이지 : 31 40
  5 페이지 : 41 50
  ========================

  ==== 끝글 구하는 공식====
  끝글 = 현재페이지 * 표시할글의수
  end = currentpage * numPerPage
  예)
  현재페이지 : 5페이지
  5*10 = 50(마지막 글일수도 있고 아닐수도 있다)
  ========================

  list.size()%5!=5이면 몫과 나머지를 더한것이 페이지수 totalpage
  list.size()%5==5이면 몫이 페이지수 totalpage

  총 134개
  134 / 10 = 13 ..... 4  ===>   총 14페이지가 결과물
  totalPage = listCount / 10 + listCount % 10
  1블럭당 10페이지를 보여준다
  여기서 1블럭은 화면상에 1|2|3|4|5|6|7|8|9|10을 말한다
  결과물 / 10 = 1 ..... 4 ===>  총 2블럭의 결과물이 나온다
  totalBlock = totalPage / numPerBlock + totalPage % numPerBlock

  리스트의 총 개수 / 10(표시할글의수)

Posted by 1010
51.Struts22009. 2. 26. 12:12
반응형

다 아시겠지만 혹시 모르는 분을 위해 정리해 올려봅니다.

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

 

Struts Guide : 스트럿츠 처음 배우기
스트럿츠를 공부하면서 그 내용들을 스트럿츠를 처음 배우는 사람들의 입장에서 정리해봤습니다.
원래는 회사 동료들을 위해 만들려고 시작한 것이었습니다.

내가 본 스트럿츠 책 대부분(모두 한국어 책들)이 지나치게 숲을 보기를 강조한 경향이 있는 것 같습니다.

커다란 예제 프로그램 하나를 가지고, 스트럿츠의 많은 기능들을 설명하죠. 그래서 각 기능별 예제가
부족해 읽는 순간 순간 스트럿츠의 각 기능 단위로 책의 내용을 이해하기가 좀 껄끄러운 면이 있습니다.

그래서 각 기능별로 조각조각 쪼개서 각 단위마다 모두 예제를 포함하도록 만들었습니다.

각 기능을 모두 예제를 직접 실행해서 확인해보며 진행할 수 있도록 했습니다.

원래는 더 많이 마무리 한 다음에 올려리고 했는데, 갑자기 투입된 프로젝트(스트럿츠와 아무관련없는..)
때문에 한동안 공부가 힘들것 같아서 지금까지 완성한 부분만 올립니다.

부족한 점 있으면 연락주세요. 시간 나는대로 추가해보겠습니다.

--
소스코드 추가하였습니다. StrutsGuide1.zip


클라이언트로부터 값을 입력받아 해당 아이디와 패스워드가 맞다면,

원하는 페이지로 이동하는 스트러츠 구조는 아래와 같다.



좀더 구체적인 내용을 살펴보자.

  • 웹애플리케이션이 시작할 때 ActionServlet의 init()가 호출되고 web.xml에
  • 선언되어 있는대로 struts-config.xml를 로드한다. struts-config.xml은
  • Struts프레임워크에서 사용하는 모든 설정 정보를 담고 있는 파일이라고
  • 생각하면 된다. config 이름은 꼭 struts-config.xml이 아닌 다른 이름을 가지는
  • XML파일이어도 상관없다.
    ActionServlet클래스는 struts에서 제공하고 있다.


  • 클라이언트가 id와 pw를 입력한 후 submit를 누르면 action=login.do 로
  • 이동한다.
    web.xml에 *.do 는 전부 org.apache.struts.action.ActionServlet로 이동
  • 하게끔 mapping 시켜놨다.

  • 클라이언트가 입력한 id와 pw는 ActionForm 클래스를 상속받는 클래스의 객체에
  • 자동으로 저장된다.
    이러한 형식은 struts-config.xml <form-beans> 태그에 지정한다.

  • 클라이언트의 입력값을 저장한 객체를 가지고 어떤 동작을 취할것인가를 지정한
  • 부분은 struts-config.xml의 <action-mappings>태그이다. 이 태그에서 지정한
  • 클래스로 객체를 전달한다. 해당 클래스는 Action클래스를 상속한 클래스로 DB에
  • 직접 연결하는 클래스를 호출하는 부분이 들어 있다.

  • 처리한 후 <action> 태그에서 지정한 문서로 mapping한다. 전달하는 클래스의 타입은 ActionForward이다.

작성자 : 진은영

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

 

<<간단한 login 예제를 이용한 Struts 흐름 실습>>

 

-저희도 해봤던 간단한 실습예제입니다-

 

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

1. login.jsp에서 아이디와 패스워드를 입력하면

 login.do(ActionServlet)를 호출

(login.do는 LoginAction의 execute()메소드를 실행하여

아이디와 패스워드가 맞는지 확인하여 일반 사용자이면 main.jsp로 이동, 

관리자이면 admin.jsp, 아이디나 패스워드가 맞지 않을 경우, 에러가 발생한

경우에는 error.jsp로 넘어가게 한다.)

<%@ page contentType="text/html;charset=utf-8" %>

<html>

<body>

<form action="login.do" mehtod="post">

 ID       : <input type="text" name="id" value=""> <br>

       PASSWORD : <input type="password" name="pwd" value=""><br>

<input type="sumit" value="Send">

</form>

<body>

<html>

• main.jsp

<%@ page  contentType="text/html;charset=utf-8"%>

<html>

    <head>

        <title>메인 메시지</title>

    </head>

    <body>

        <div align="center">

            <table width="85%" border="0" cellpadding="0" cellspacing="0">

                <tr>

                    <td align="center"><b>스트럿츠 프레임워크</b></td>

                </tr>

            </table>

            <br>

            <table width="85%" border="0" cellspacing="0" cellpadding="0">

                <tr>

                    <td align="center"><b>Main 페이지 입니다. 환영합니다.^^</b></td>

                </tr>

              

                <tr>

                    <td align="center">

                        <a href="javascript:history.back()"><b>click</b></a></td>

                </tr>

            </table>

        </div>

    </body>

</html>

 

• admin.jsp

<%@ page  contentType="text/html;charset=utf-8"%>

<html>

    <head>

        <title>관리자 메시지</title>

    </head>

    <body>

        <div align="center">

            <table width="85%" border="0" cellpadding="0" cellspacing="0">

                <tr>

                    <td align="center"><b>스트럿츠 프레임워크</b></td>

                </tr>

            </table>

            <br>

            <table width="85%" border="0" cellspacing="0" cellpadding="0">

                <tr>

                    <td align="center"><b>Administrator 페이지 입니다. 환영합니다.^^</b></td>

                </tr>

                <tr>

                    <td align="center">

                        <a href="javascript:history.back()"><b>click</b></a></td>

                </tr>

            </table>

        </div>

    </body>

</html>

 

• error.jsp

<%@ page isErrorPage="true" contentType="text/html;charset=utf-8"%>

<html>

    <head>

        <title>에러 메시지</title>

    </head>

    <body>

        <div align="center">

            <table width="85%" border="0" cellpadding="0" cellspacing="0">

                <tr>

                    <td align="center"><b>스트럿츠 프레임워크</b></td>

                </tr>

            </table>

            <br>

            <table width="85%" border="0" cellspacing="0" cellpadding="0">

                <tr>

                    <td align="center"><b>에러 메시지</b></td>

                </tr>

                <tr>

                    <td height="60" align="center">

                        <%= exception.toString() %>

                    </td>

                </tr>

                <tr>

                    <td align="center">

                        <a href="javascript:history.back()"><b>click</b></a></td>

                </tr>

            </table>

        </div>

    </body>

</html>

 

2. 스트럿츠 설정 파일 struts-config.xml에서 액션의 매핑, 메시지 자원의 파일의 지정,

데이터 소스의 설정, 플러그 인 지정 등을 합니다.

form-bean 요소의 name 속성에는 HTMl입력 폼의 이름, 액션 매핑에서의 name 속성을

지정하며 type 속성에는 전체 클래스명을 지정합니다.

액션에서 사용할 포워드 정보의 name 속성이 같은 액션 매핑이 오버라이드 되지 않는

액션에 전역적으로 사용됩니다.

액션 매핑 설정은 ActionServlet에서 type 속성 클래스의 exeute()메소드를 호출하고 name에는

빈의 이름이 들어가며 scope 빈이 저장되는 영역을 설정합니다. 그리고

input 속성에는 입력 폼이 있는 페이지를 저장하여 입력값이 유효하지 않거나 에러가

발생할 입력 페이지로 이동할 있게 합니다.

뷰페이지에서 사용할 메시지 자원의 설정은 StrutsTest/WEB-INF/classes/test/struts/messaage

참조합니다.

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"

    "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

 

<struts-config>

 

    <!-- Form Bean Definitions -->

    <form-beans>

        <form-bean name="loginForm" type="test.struts.LoginForm" />

    </form-beans>

 

    <!-- Global Forward Definitions -->

    <global-forwards>

        <forward name="login" path="/login.jsp" />

        <forward name="main" path="/main.jsp" />

        <forward name="error" path="/error.jsp" />

    </global-forwards>

 

    <!--  Action Mapping Definitions  -->

    <action-mappings>

 

        <action path="/login" type="test.struts.LoginAction" scope="request" input="login.jsp">

            <forward name="admin" path="/admin.jsp" />

        </action>

        <action path="/main" forward="/main.jsp" />

        <action path="/loginFb" type="test.struts.LoginFbAction" name="loginForm" scope="request"

            input="/loginFb.jsp">

            <forward name="admin" path="/admin.jsp" />

        </action>

 

    </action-mappings>

 

    <message-resources parameter="test.struts.message.ApplicationResources" />

 

</struts-config>

 

스트럿츠와 관련한 폼 빈 클래스나 Action클래스를 수정하거나 추가할 때는

struts-config.xml 설정 파일을 먼저 수정하고 빈즈 클래스를 변경하여야 합니다.

 

3. 클라이언트가 입력하는 id, password 정보를 저장하는 클래스

StrutsTest/WEB-INF/src에 저장합니다.

package test.struts;

 

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionError;

 

public final class LoginForm extends ActionForm {

 

    private String id;

    private String passwd;

   

    public String getId() {

        return id;

    }

 

    public void setId(String id) {

        this.id = id;

    }

 

    public String getPasswd() {

        return passwd;

    }

 

    public void setPasswd(String passwd) {

        this.passwd = passwd;

    }   

 

           /**

            * 세션에 저장되어 있는 LoginForm을 초기화한다.

            */

    public void reset(ActionMapping mapping, HttpServletRequest request) {

        this.id = null;

        this.passwd = null;

    }

 

    /**

     * ID와 패스워드를 4자 이상 입력해야만 에러가 발생하지 않는다.

     */

    public ActionErrors validate(ActionMapping mapping,

                                 HttpServletRequest request) {

        ActionErrors errors = new ActionErrors();

        if (id == null || id.trim().length() < 4) {

            errors.add("id", new ActionError("error.id.tooshort"));

        }

        if (passwd== null || passwd.trim().length() < 4) {

            errors.add("password", new ActionError("error.passwd.tooshort"));

        }

        return errors;

    }

}

 

4. 클라이언트로부터 입력한 밧을 비교하여 해당 JSP문서로 매핑 처리하는 클래스

StrutsTest/WEB-INF/src에 저장합니다.

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

 

public class LoginAction extends Action {

 

    public ActionForward execute(ActionMapping mapping,

                                ActionForm form,

                                HttpServletRequest request,

                                HttpServletResponse response)

    {   

        String next = "main"; // forward 페이지

        String id = request.getParameter("id");

        String passwd = request.getParameter("passwd");

        try {

            String[] idList = {"admin", "thdusin"};

            String[] passwdList = {"admin1234", "12345"};

            int[] gradeList = {1, 2};

           

            int idx = -1;           

            for (int i=0; i<idList.length; i++) {

                if (idList[i].equals(id)) {

                    idx = i;

                    break;

                }

            }               

            if (idx > -1) {

                if (passwdList[idx].equals(passwd)) {

                    if (gradeList[idx] == 1)

                        next = "admin";

                    UserSession user = new UserSession();

                    user.setId(id);

                    user.setGrade(gradeList[idx]);

                    HttpSession session = request.getSession();

                    session.setAttribute("user", user);

                } else {

                    throw new Exception("PASSWD NOT MISMATCH");

                }

            } else {

                throw new Exception("ID NOT EXIST");

            }

 

        } catch (Exception e) {

            e.printStackTrace();

            request.setAttribute("javax.servlet.jsp.jspException", e);

            next = "error";

        }

        return mapping.findForward(next);

    }

}

 

5. 자바 소스를 컴파일 하는 데 사용하는 build.xml 파일

StrutsTest/WEB-INF 디렉토리 아래에 저장합니다.

<?xml version="1.0" ?>

<project  name="test_struts"  basedir="."  default="compile">

 

           <property name="dist.servelt.jar" value="C:\eclipse\plugins\org.eclipse.tomcat.4.1.30\servlet.jar"/>

                    

           <path id="classpath">

                      <fileset dir="${basedir}/lib" includes="*.jar"/>

                     <pathelement location="${dist.servlet.jar}"/>

           </path>

                    

           <target name="compile">

                     <echo message="encoding property files..."/>

                     <native2ascii src="${basedir}/src"

                     dest="${basedir}/classes"

                     includes="**/*.properties"/>

                     <echo message="Compiling the java source files..."/>

                     <javac srcdir="${basedir}/src"

                     destdir="${basedir}/classes" debug="on">

                        <classpath refid="classpath"/>

                              </javac>

                                </target>

</project>

 

6. 컴파일 and 결과 ^^

 

 







 
=========================================================================================================
 
Struts 핵심 클래스
 
처음 스트러츠를 접한 개발자들은 무엇을 먼저 해야할지 망설이는 경우가 많다. 스트러츠 API를 보면 "왜 그리 많은 패키지와 클래스들이 있는지..", "이것을 언제 다 익힌단 말인가?" 하고 어려워하는 개발자들이 많다. 하지만 스트러츠가 Model 2에 기반하고 있기 때문에 Model 2개발 방식에 대하여 이해하고 있는 개발자들이라면 그 원리를 파악하기란 생각보다 어렵지 않다.

먼저 스트러츠의 중심을 이루고 있는 클래스들의 클래스 다이어그램을 통하여 스트러츠의 전체적인 그림을 한번 그려 보도록 하겠다.


  • ActionServlet : MVC 컨트롤러이며 요청 디스패터의 역할을 한다. 스트럿츠
  • 프레임워크 내에 단 하나의 서블릿 인스턴스가 존재한다.
  • ActionMapping : URL 패턴과 비즈니스 로직(Action)간의 매핑을 표현한다. 입력과 출력 및
  • 비즈니스 로직에 기반한 '보내지는'대상을 지정한다.
  • ActionForm : MVC모델이다. MVC뷰로부터의 입력을 표현하는 자바빈처럼 작동한다.
  • ActionServlet은 자동적으로 빈이 인스턴스화된 이후에 프로퍼티를 지정해 주며, 빈에
  • validate()메소드를 가지고 있으면 사용자가 만든 Action클래스를 호출하기 이전에 이
  • 메소드를 호출한다. ActionForm은 JSP 뷰를 표현하기 위해 확장되었다.
  • ActionForward : 이동할 페이지 정보와 포워드(forward), 리다이렉트(redirect)중 어느 방식으로
  • 다음 페이지로 이동할 것인지에 대한 정보를 담고 있다.
  • Action : 비즈니스 로직을 나타내며 MVC모델이다. 특정한 요청에 대한 비즈니스
  • 로직을 처리하기 위해 확장된다. 예를 들어 /login URI를 위해 LoginAction을 만든다.

 

① ActionServlet
처음으로 논의할 스트럿츠 프레임워크의 컴포넌트는 ActionServlet이다.

org.apache.struts.action

패키지에 있는

ActionServlet은 추상클래스인 javax.servlet.HttpServlet 추상클래스를 상속받았다.

클라이언트로 부터 호출 받으면 가장 먼저 호출되는 클래스이다.


  • process() : doGet() 이나 doPost()로부터 요청과 응답을 넘겨받는다. process()메소드는
  • 요청을 처리하기 위해, ActionServlet안에 있는 다른 메소드를 호출한다. process()메소드는
  • 요청을 처리하기 위해, ActionServlet안에 있는 다른 메소드를 호출한다. 여기에서는 중요한
  • 9개의 메소드를 살펴볼 것이다.
    • processPath() : 요청 URI 인자에서 접미사나 접두사를 제거하여 URI를 추출한다.
    • 예를 들어, /login.do라면 /login을 반환한다.
    • processLocale() : Locale이 요청에 설정되어 있으면 검사하고, 없으면 하나 만들어서
    • 세션에 저장한다.
    • processMapping() : ActionMapping객체를 얻기 위해 path를 키로 이용한다. 만약 path가
    • 맞는 ActionMapping객체가 ActionMappings collection안에 있으면 process()메소드로 반환된다.
    • processActionForm() : ActionMapping의 name속성을 이용하여 이런 종류의 ActionForm이
    • 이미 만들어졌는지를 확인한다. 그렇다면, 그 ActionForm이 process()메소드로 반환되며,
    •  그렇지 않으면 ActionMapping에 정의된 새로운 ActionForm을 만들어서 반환한다.
    • processPopulate() : ActionForm내에 ActionServlet의 참조를 설정하며, ActionForm()의
    •  reset()메소드를 호출하여 값들을 디폴트 값으로 만든다.
    • processValidate() : ActionForm에 확인작업이 필요한지를 검사한다.
    • processActionCreate() : ActionMapping과 연결된 Action클래스를 반환한다. 이 메소드는
    • Action컬렉션에서원하는 Action클래스의 인스턴스가 있는지를 검사하고, 만약 있으면 이를
    • 반환하며, 없으면 새로운 Action 클래스의 객체를 만들고 이를 Action컬렉션에 저장하며,
    • 이에 대한 참조를 반환한다. 반환된 Action클래스는 요청 URI에 매핑되며, 요청을 처리하는
    • 비즈니스 로직을 가지고 있다.
    • processActionPerform() : processActionCreate()에서 반환된 Action객체의 perform()메소드가
    • 호출된다. 비즈니스 로직을 수행한 후에, Action객체는 ActionServlet이 요청을 보낼 타겟을
    • 가지고 있는 ActionMapping을 반환한다.
    • processActionForward() : RequestDispatcher나 Request.sendRedirect()를 이용하여 원하는
    • 뷰를 만들고, 요청을 ActionServlet에 의해 완전히 처리한다.

  • initApplication() : 애플리케이션을 위해 MessageResource를 로딩한다.
  • initMapping() : ActionServlet에 pageckage.ClassforName을 등록하도록 한다. formBean의 디폴트 클래스는 org.apache.struts.action.ActionFormBean이다.
  • initDigester() : org.apache.struts.digester.Digester클래스를 써어 struts-config.xml 파일로부터 설정을 읽어들인다.
  • initOter() : 초기화에 필요한 작업을 처리한다. struts-config.xml에 있는 initOther()는 content , locale , cache를 찾는다.


② ActionMapping
비즈니스 로직을 처리할 Action클래스에 요청을 보내기 위해 ActionServlet이 알아야 할 처리 정보를 가지고 있다.

ActionMapping은 <action-mappings> 요소 내의 <action>정보를 이용하여 만들어진다.

<action-mappings> <action name="loginForm" path="/login" type="kr.co.a.LoginAction" 
input="/login.jsp"> </action> </action-mappings> 


/login의 경로를 가진 요청을 받으면, 액션 클래스는 LoginAction이고, 입력은 loginForm이 표현하며 입력 폼의

 경로는 /login.jsp라는 것을 의미한다.

  • name : 이 액션이 사용할 struts-config.xml에 정의된 폼 빈의 이름
  • path : 이 매핑을 선택하는 데 매칭되는 요청 URI. URI는 '/'로 시작해야 한다.
  • type : 이 매핑에서 사용되는 Action 구현의 완전한 자바 클래스 이름
  • input : 입력 페이지를 매핑한다. ActionServlet이 ActionForm의 확인작업을 수행하는데, 만일
  • 에러가 있다면 input변수가 forward나 sendRedirect의 목표가 될 것이다.


③ ActionForm
ActionForm클래스는 struts-config.xml에 의해 정의된다.

<form-beans> <form-bean name="loginForm" type="kr.co.a.LoginForm" /> </form-beans> 


모든 ActionForm 구현은 <form-beans>태그의 몸체에 등록되어야 한다. ActionForm이 추상 클래스이므로,

개발자는 이를 확장하여 사용자의 입력 데이터를 저장하는 클래스를 만들어야 한다.

  • name : ActionMapping에서 정의된 범위 안에서 이를 얻기 위해 사용된느 변수명
  • type : 사용자가 구현한 ActionForm에 대한 패키지의 올바른 참조


④ Action
어떤 URI에 특정 액션을 제공하기 위해 확장된다. 이것의 목적은 요청을 위한 비즈니스 로직을 실행하는 것이다.

Action클래스는 ActionServlet에 의해 인스턴스로 만들어진다. Action클래스는 기본 Locale을 저장하며,

애플리케이션에 대한 MessageResources의 참조를 저장한다.

⑤ ActionForward
ActionForward클래스는 struts-config.xml 파일에서 설정된다. 두 종류의 ActionForward가 있다.


 

참고문헌

작성자 : 진은영

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

struts에서 공통 폼빈(formbean) 및 파일업로드 쓰기

 

아래의 내용은 여기에 올라와 있는 것과 유사한것입니다.


그런데. 이번에는 파일 업로드 부분이 추가 되었습니다.


form type이 mutilpart 일경우에. request에서 getParameter로


파라메터를 못 가져오더군요.


그래서 한참을 찾은 것이. CommonsMultipartRequestHandler 클래스를 이용해서


해결했습니다.


또한 파일을 여기 Action에서 가져가서 따른 Action으로 넘길때. 메모리의 공간을 찾이 할꺼


같아서. 여기서 바로 템프 디렉토리에 저장을 한 다음 파일 명과, 파일의 크기를 넘겨 주는


방식을 취했습니다.


참고 하실 것이 있으면 참고 하세요.




/*
 * 파일명 : BaseAction.java
 * 버  젼 : 1.0
 * 저작권 :

 * 설  명 : 공통 Action 처리
 */
package ad.com.action;

import java.util.Enumeration;
import java.util.Vector;
import java.util.Hashtable;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Cookie;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.RequestProcessor;
import org.apache.struts.upload.FormFile;

import org.apache.struts.upload.CommonsMultipartRequestHandler;
import java.io.FileOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.BufferedOutputStream;

import org.apache.commons.fileupload.FileItem;

import ad.com.form.BaseForm;
import ad.util.common.ReturnResult;
import ad.util.common.Constant;

/**
 * <pre>
 *  공통 Action 처리
 *  세션처리
 *  폼빈처리
 * [관련항목]
 *
 * [사용법]
 *
 * [변경기록]
 *  

 * </pre>
 * @author Copyright(c) 2004-05 by KSC. All right reserved.
 * @version 1.0
 * @see ad.util.common.ReturnResult
 * @see ad.com.form.BaseForm
 * @since 1.1
 */

public abstract class BaseAction extends Action
{

    /**
    * Description  : Action Servlet 에서 호출
    * @param   ActionMapping mapping
    * @param   ActionForm form
    * @param   HttpServletRequest request
    * @param   HttpServletResponse response
    * @return  ActionForward
    * @exception Exception - doExecute 수행
    */
    public ActionForward execute (
                                    ActionMapping mapping,
                                    ActionForm form,
                                    HttpServletRequest request,
                                    HttpServletResponse response
                                 ) throws Exception
    {
        /**
         * 공통 Form Bean
         */
        BaseForm           lo_BaseForm  = null;
        /**
         * content Type
         */
        String             contentType  = null;
        /**
         * HttpServletRequest
         */
        HttpServletRequest req          = null;

        CommonsMultipartRequestHandler mRhdl = null;

        try
        {
            contentType    = request.getContentType();
            /**
             * 사용자 로그인 여부 체크
             */
            if (!CookieCheck(request) )
            {
                return mapping.findForward("login");
            }


            /**
             * contentType 이 multipart/form-data 인지 구분
             */
            if ( (contentType != null) && contentType.startsWith("multipart/"))
            {
                /**
                 * Request parser
                 */
                req   = request;
                mRhdl = new  CommonsMultipartRequestHandler();
                mRhdl.handleRequest(req);
                lo_BaseForm =  getFileitems( mRhdl, getCookieValue(req, getEdtValue ( getFormValue(req) ))) ;

                /**
                 * 업로드 파일 삭제처리(임시 데이터)
                 */
                mRhdl.rollback();
            }
            else
            {
                req = request;
                lo_BaseForm =  getCookieValue(req, getEdtValue ( getFormValue(req) )) ;
            }

            return doExecute(mapping, form, req, response, lo_BaseForm);
        }
        catch (Exception e)
        {
            System.out.println("Exception :: Base Action ["+e.getMessage()+"]");
            return doExecute(mapping, form, request, response, null);
        }
    }

    /**
    * Description  : request에서 폼의 이름과 값을 가져온다.
    * @param   HttpServletRequest req
    * @return  BaseForm
    * @exception Exception return null
    */
    private BaseForm getFormValue(HttpServletRequest req )
    {
        Enumeration  lo_getParam = null;
        String       ls_Param    = "";
        String       ls_Value    = "";
        BaseForm     lo_BForm    = null;

        try
        {
            lo_BForm    = new BaseForm();

            lo_getParam = req.getParameterNames();

            if (lo_getParam != null )
            {
                for ( ; lo_getParam.hasMoreElements() ;)
                {
                    ls_Param = (String)lo_getParam.nextElement() ;
                    ls_Value = req.getParameter(ls_Param);
                    lo_BForm.setParam(ls_Param, ls_Value);
                }
                return lo_BForm;
            }
            else
            {
                return null;
            }
        }
        catch (Exception e)
        {
            System.out.println("Exception :: BaseAction :: getFormValue ["+e.getMessage()+"]");
            return null;
        }
    }

    /**
    * Description  : 에디터 테이블의 데이터를 ReturnResult 형태로 변환 하여
    *                edtList 의 키 값으로 넣는다.
    * @param   BaseForm lo_BaseForm
    * @return  BaseForm
    * @exception Exception return BaseForm
    */
    private BaseForm getEdtValue ( BaseForm lo_BaseForm ){
        ReturnResult  lo_retRst   = null;
        BaseForm      lo_BF       = null;
        String        ls_edtList  = "";
        String        ls_edtValue = "";

        String []     la_edtRowval = null;
        String []     la_edtColval = null;
        String []     la_edtList   = null;

        int           li_idx       = 0;
        Vector        lo_lstVt   = new Vector();

        try
        {
            ls_edtList  = lo_BaseForm.getParam("edtlist" ) != null ? lo_BaseForm.getParam("edtlist" ) : "";
            ls_edtValue = lo_BaseForm.getParam("edtvalue") != null ? lo_BaseForm.getParam("edtvalue") : "";

            if (    (!ls_edtList.trim().equals(""))
                 && (!ls_edtValue.trim().equals(""))
               )
            {
                la_edtList   = ls_edtList.trim().toUpperCase().split(";");
                la_edtRowval = ls_edtValue.split("@");
                for ( li_idx = 0 ; li_idx < la_edtRowval.length ; li_idx ++)
                {
                    la_edtColval = la_edtRowval[li_idx].split(";");
                    lo_lstVt.addElement(la_edtColval);
                }
                lo_retRst = new ReturnResult (lo_lstVt, la_edtList) ;
                lo_BaseForm.setParam ( "edtList" , lo_retRst);
                lo_BF  = lo_BaseForm;
            }
            else
            {
                lo_BF  = lo_BaseForm;
            }

        }
        catch ( Exception  e )
        {
            System.out.println(" Exception :: BaseAction :: getEdtValue ["+e.getMessage()+"]");
        }
        return lo_BF;
    }

    /**
    * Description  : 로그인 여부 체크
    * @param   HttpServletRequest request
    * @return  boolean
    * @exception Exception return false
    */
    private boolean CookieCheck ( HttpServletRequest request ){
        int      li_Loop      = 0;
        String   ls_userid    = "";
        Cookie[] lo_Cookie    = request.getCookies();
        boolean  lb_chk       = false;
        try
        {
            for(li_Loop = 0 ; li_Loop < lo_Cookie.length ; li_Loop ++)
            {
                if (lo_Cookie[li_Loop].getName().equals("PK_USERID"))
                {   // 시스템 계정
                    ls_userid     = lo_Cookie[li_Loop].getValue();
                    break;
                }
            }

            if (ls_userid.trim().equals("") )
            {
                lb_chk  =  false;
            }
            else
            {
                lb_chk  =  true;
            }
            return lb_chk;
        }
        catch ( Exception  e )
        {
            System.out.println(" Exception :: BaseAction :: CookieCheck ["+e.getMessage()+"]");
        }
        return lb_chk;
    }

    /**
    * Description  : 쿠키 값을 Form Bean 에 저장
    * @param   HttpServletRequest request
    * @param   BaseForm lo_BaseForm
    * @return  BaseForm lo_BaseForm
    * @exception none
    */
    private BaseForm getCookieValue ( HttpServletRequest request, BaseForm lo_BaseForm )
    {
        int      li_Loop      = 0;
        Cookie[] lo_Cookie    = request.getCookies();
        try
        {
            for(li_Loop = 0 ; li_Loop < lo_Cookie.length ; li_Loop ++)
            {
                if (lo_Cookie[li_Loop].getName().equals("PK_USERID"))
                {
                    lo_BaseForm.setParam ( "gs_userid" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
                else if (lo_Cookie[li_Loop].getName().equals("PK_USERNM"))
                {
                    lo_BaseForm.setParam ( "gs_usernm" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
                else if (lo_Cookie[li_Loop].getName().equals("PK_DEPTCD"))
                {
                    lo_BaseForm.setParam ( "gs_deptcd" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
                else if (lo_Cookie[li_Loop].getName().equals("PK_DEPTNM"))
                {
                    lo_BaseForm.setParam ( "gs_deptnm" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
                else if (lo_Cookie[li_Loop].getName().equals("PK_WORKDT"))
                {
                    lo_BaseForm.setParam ( "gs_workdt" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
                else if (lo_Cookie[li_Loop].getName().equals("PK_WORKS"))
                {
                    lo_BaseForm.setParam ( "gs_works" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
                else if (lo_Cookie[li_Loop].getName().equals("PK_WORKSNM"))
                {
                    lo_BaseForm.setParam ( "gs_worksnm" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
                else if (lo_Cookie[li_Loop].getName().equals("PK_CLIENTIP"))
                {
                    lo_BaseForm.setParam ( "gs_clientip" , lo_Cookie[li_Loop].getValue());
                    continue;
                }
            }
        } catch ( Exception  e ){
            System.out.println(" Exception :: BaseAction :: getCookieValue ["+e.getMessage()+"]");
        }
        return lo_BaseForm;
    }

    /**
    * Description  : 파일 명과 파일 크기를 Form Bean 에 저장
    * @param   HttpServletRequest request
    * @param   BaseForm lo_BaseForm
    * @return  BaseForm lo_BaseForm
    * @exception Exception return BaseForm
    */
    private BaseForm getFileitems ( CommonsMultipartRequestHandler cMRH, BaseForm lo_BaseForm )
    {
        Enumeration  oFileNames    = null;
        Hashtable    oFileItems    = null;
        String       sFileObjName  = null;
        String       sFileName     = null;
        FormFile     oFileItem     = null;
        File         oCFile        = null;
        int          nFileSize     = -1;
        try
        {
            /**
             * 파일 Object HashTable
             */
            oFileItems  = cMRH.getFileElements();
            if ( oFileItems != null)
            {
                /**
                 * 파일 Object Form Name
                 */
                oFileNames  = oFileItems.keys();
                if (oFileNames != null)
                {
                    for ( ; oFileNames.hasMoreElements() ; )
                    {

                        sFileObjName  = (String) oFileNames.nextElement();

                        /**
                         * 파일
                         */
                        oFileItem  = (FormFile) oFileItems.get(sFileObjName) ;

                        if ( oFileItem == null) continue;

                        sFileName = oFileItem.getFileName();
                        nFileSize = oFileItem.getFileSize() ;

System.out.println("BaseAction :: getFileName ::sFileName ["+ sFileName+"]");
System.out.println("BaseAction :: getFileName ::nFileSize ["+ nFileSize+"]");

                        lo_BaseForm.setParam(sFileObjName ,  sFileName );
                        /**
                         * 파일 크기 10 M
                         */
                        if ( (nFileSize > (10 * 1024000))  )
                        {
                            /**
                             * 파일 용량 초과 및 파일이 존재하지 않을 경우
                             */
                            lo_BaseForm.setParam(sFileObjName+"_size" , "-1" );
                            continue;
                        }

                        /**
                         * 파일 크기 0M 제외
                         */
                        if ( (nFileSize <= 0 ) )
                        {
                            /**
                             * 파일 용량 초과 및 파일이 존재하지 않을 경우
                             */
                            lo_BaseForm.setParam(sFileObjName+"_size" , "0" );
                            continue;
                        }

                        InputStream stream = oFileItem.getInputStream();
                        oCFile             = new File (Constant.TEMP_DIR + sFileName.trim());
                        OutputStream bos   = new BufferedOutputStream(new FileOutputStream(oCFile));
                        int bytesRead      = 0;
                        byte[] buffer      = new byte[8192];
                        while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
                            bos.write(buffer, 0, bytesRead);
                        }
                        bos.close();
                        lo_BaseForm.setParam(sFileObjName+"_size" , new Integer(nFileSize).toString() );
                        stream.close();

                    }
                }
            }
        }
        catch (Exception e)
        {
            System.out.println(" Exception :: BaseAction :: getFileitems ["+e.getMessage()+"]");
        }
        return lo_BaseForm;
    }


    /**
    * Description  : BaseAction클래스를 상속하는 클래스들이 구현해야할 메써드.
    * @param ActionMapping mapping,
    * @param ActionForm form,
    * @param HttpServletRequest request,
    * @param HttpServletResponse response,
    * @param BaseForm oTmpMap
    * @return  ActionForward
    * @exception none
    */
 protected abstract ActionForward doExecute(
                                          ActionMapping mapping,
                                          ActionForm form,
                                          HttpServletRequest request,
                                          HttpServletResponse response,
                                          BaseForm oTmpMap
                                           ) throws Exception;
==============================================================================================


파일업로드 예제

 

 

net.sung2li.file.action.FileAction.java-----------------

/*
 * 작성된 날짜: 2006. 1. 23
 *
 * 프로젝트명 : test
 * 페키지명 : net.sung2li.file.action
 * 파일명 : FileAction.java
 * ------------------------------------------
 * 수정일자 :
 * 수정내용 :
 * 수정자 :
 */
package net.sung2li.file.action;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sung2li.file.form.FileForm;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 * @author 장성일
 *
 * 파일 업로드 테스트
 *
 */
public class FileAction extends Action {
 /* (비Javadoc)
  * @see org.apache.struts.action.Action#execute(org.apache.struts.action.

ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
  */
 public ActionForward execute(
  ActionMapping arg0,
  ActionForm arg1,
  HttpServletRequest arg2,
  HttpServletResponse arg3)
  throws Exception {
 
  FileForm fileform = (FileForm) arg1;
 
  String result;
  try{
   //Create an input stream to read the file.
   InputStream in = fileform.getFile().getInputStream();
   
   //파일의 중복처리 문제로 파일앞에 날짜를 붙여서 저장
   Date date = new Date();
   SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
   result = sdf.format(date)+System.currentTimeMillis();
   File file = new File("d:\\"+result); //저장경로
   OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
   int i;
   byte[] buffer = new byte[1024*4]; //4kbytes
   
   while((i=in.read(buffer, 0, 1024*4)) != -1){
    os.write(buffer, 0, i);
   }
   
   //Close the output stream.
   os.close();      
   //Close the input stream.
   in.close();
   
  }catch(IOException e){
   e.printStackTrace();
   result = null;
  }
 
  return null;
 }

}


net.sung2li.file.form.FileForm.java-----------------

/*
 * 작성된 날짜: 2006. 1. 23
 *
 * 프로젝트명 : test
 * 페키지명 : net.sung2li.file.form

 * 파일명 : FileForm.java
 * ------------------------------------------
 * 수정일자 :
 * 수정내용 :
 * 수정자 :
 */
package net.sung2li.file.form;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;


/**
 * @author 장성일
 *
 * 파일 업로드 테스트
 *
 */
public class FileForm extends ActionForm {
 private FormFile file;


 /**
  * @return
  */
 public FormFile getFile() {
  return file;
 }

 /**
  * @param file
  */
 public void setFile(FormFile file) {
  this.file = file;
 }

}

index.jsp----------------------

<%@ page language="java" pageEncoding="EUC-KR" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
 <head>
  <title>파일</title>
 </head>
 
 <body bgcolor="#FFFFFF">
  <form name="f" action="./file.do" method="post" enctype="multipart/form-data">
   <input type="file" name="file" value="1" /><br />
   <input type="submit" />
  </form>
 </body>
</html>


/WEB-INF/struts-config.xml----------------

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
 <form-beans>
  <form-bean type="net.sung2li.file.form.FileForm" name="fileForm" />
 </form-beans>
 <action-mappings>
  <action path="/file" type="net.sung2li.file.action.FileAction" name="fileForm" scope="request" />
 </action-mappings>
</struts-config>


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


[간단소스]


//struts-config.xml


<form-beans type="org.apache.struts.action.ActionFormBean">
  <form-bean name="uploadForm" type="local.struts.upload.UploadForm"/>
</form-beans>



 <global-forwards type="org.apache.struts.action.ActionForward">
  <forward name="upload_ok" path="/upload_ok.jsp" />
 </global-forwards>



 <action-mappings type="org.apache.struts.action.ActionMapping">
  <action
   input="/upload.jsp"
   name="uploadForm"
   path="/uploadPersist"
   type="local.struts.upload.UploadAction"  
   validate="false" />
 </action-mappings>



//UploadForm.java


package local.struts.upload;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;


public class UploadForm extends ActionForm {
 
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private FormFile upFile = null;
   
    public void reset(ActionMapping mapping, HttpServletRequest request) {
     upFile = null;
    }
   
    public FormFile getUpFile() {
     return upFile;
    }
   
    public void setUpFile(FormFile upFile) {
     this.upFile = upFile;
    }
}



//UploadAction.java


package local.struts.upload;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.upload.FormFile;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class UploadAction extends Action {
 
 public ActionForward execute(
   ActionMapping mapping,
   ActionForm form,
   HttpServletRequest request,
   HttpServletResponse response) throws Exception {
 
        FormFile upFile = ((UploadForm)form).getUpFile();
        InputStream stream = upFile.getInputStream();
        String path = "C:/javawork/Tomcat4.1/webapps/struts/upload/";
        OutputStream bos = new FileOutputStream( path + upFile.getFileName()  );
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        while ((bytesRead = stream.read(buffer, 0, 8192)) != -1)
        {
                bos.write(buffer, 0, bytesRead);
        }
        bos.close();       
        stream.close();     
       
        return (mapping.findForward( "upload_ok" ));
 }
}


//upload.jsp


<html>
<body>
 <form name=upload action=uploadPersist.do method=post enctype="multipart/form-data">
  file:<input type=file name=upFile>
  <BR>
  <input type=submit>
 </form>
</body>
</html>


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


스트러츠 왕초보가 써보기

samplestruts.zip


흠.. 요즘 바빠설..쩝... 내 프로젝트에 참여한다고 맘먹은 친구가 있는데..


내글과 소스를 보기만 했단다.. 이해를 해야쥐..


넘 어렵다고.. 처음부터 방법을 가르쳐 달라고..


그래서 이렇게 글을 쓴다.


여기서 struts 를 받는다.

http://jakarta.apache.org/site/binindex.cgi


받은 다음 압축을 풀면 그안에 lib 밑에 *.jar 파일과 *.tld 등등이 있다.


이 파일들이 있어야 struts 를 사용할 수 있다.


이제 톰켓에 컨텍스트를 만들고 WEB-INF 밑에 web.xml에 아래와 같이 만들어 준다.


web.xml ===============================================================================


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>3</param-value>
        </init-param>
        <init-param>
            <param-name>detail</param-name>
            <param-value>3</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>


web.xml ===============================================================================


위와 같이 struts를 사용한다고 web.xml 에 만들었다면 이제 그에 관련된 Action 클래스와


ActionForm 를 만들어준다.


sampleForm============================================================================

package sung2li.struts.form;

import org.apache.struts.action.ActionForm;

public class SampleForm extends ActionForm {

 private String hi = "hi";

//setXXX, getXXX는 input form의 name과 반드시 동일하게 맞춰준다.

 public String getHi() {
  return hi;
 }

 public void setHi(String hi) {
  this.hi = hi;
 }


}
sampleForm============================================================================



sampleAction===========================================================================

package sung2li.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import sung2li.struts.form.SampleForm;

public class SampleAction extends Action {

 public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
  throws Exception {
//ActoinForm에 input form 에서 입력한 데이터가 자동으로 들어간다.

// 그 ActionForm 을 위에서 만든 sampleForm 에 넣어준다.

  SampleForm sampleForm = (SampleForm) form;


 
  request.setAttribute("hi", sampleForm.getHi());


//포워드 시키는 부분이다. 이 포워드는 아래서 만들 struts-config.xml에 정의된

//path로 이동한다.
  return mapping.findForward("result");
 }

}

sampleAction===========================================================================


이제 필요한 클래스를 만들었으니 입력 페이지와 결과 페이지를 만든다.


index.jsp===============================================================================

<html>
 <head>
  <title>sung2li - sample struts</title>
 </head>
 <body>

<!--

폼 액션 부분에 아래와 같이 해준다.

sample.do 역시 아래서 만든 struts-config.xml 에 정의된다.

-->
  <form action="/samplestruts/sample.do">
   <input type="text" name="hi"></br>
   <input type="submit">
  </form>
 <body>
</html>

index.jsp===============================================================================



result.jsp===============================================================================

<%@ page language="java" pageEncoding="EUC-KR" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>sung2li - sample struts</title>
</head>
<body bgcolor="#FFFFFF">
<%=request.getAttribute("hi")%>


</body>
</html>

result.jsp===============================================================================




struts-config.xml =======================================================================

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
   
    <!-- ========== Data Source Configuration =============================== -->
    <data-sources />
   
    <!-- ========== Form Bean Definitions ================================== -->

    <!-- 이전에 만든 sampleForm.java 를 폼빈으로 사용하겠다고 선언한 부분이다.  -->

    <form-beans>
        <form-bean name="sampleForm" type="sung2li.struts.form.SampleForm">
            <form-property name="hi" type="java.lang.String" initial="hi" />
        </form-bean>
       
    </form-beans>

   
    <!-- ========== Global Exception Definitions ============================== -->
    <global-exceptions />
   
    <!-- ========== Global Forward Definitions =============================== -->
    <global-forwards />
   
    <!-- ========== Action Mapping Definitions =============================== -->

    <!-- 이전에 만든 sampleAction.java 를 사용하겠다고 선언한 부분이다. -->
    <action-mappings>
        <action
            attribute="sampleForm"
            input="/input.jsp"
            name="sampleForm"
            path="/sample"
            type="sung2li.struts.action.SampleAction">

    <!-- return mapping.findForward("result"); 이부분의 포워드 선언 이다. -->

            <forward name="result" path="/result.jsp" />
        </action>
    </action-mappings>
   
    <!-- ========== Controller Configuration ================================ -->
    <controller />
   
    <!-- ========== Message Resources Definitions ============================ -->
    <message-resources parameter="sung2li.struts.ApplicationResources" />
   
    <!-- ========== Plug Ins Configuration ================================= -->
</struts-config>


struts-config.xml =======================================================================



이렇게 셋팅한다음에 실행해 보면 된다..ㅡ.ㅡ;; 너무 간단하다고 무책임 한거 아니냐고 생각하지


말아라. 나 잠못자고 만들어서 지금 제정신 아니다.


단순히 샘플이니 어떻게 움직이는 지를 설명한 것이다.


더많은 정보를 얻으려면  http://jakarta.apache.org/struts/index.html 에서 찾아보도록..


위 설명을 위해 만든 소스를 첨부 했으니 읽어보지만 말고 이해해라~~

Posted by 1010
반응형

출처 : http://blog.naver.com/jin9317?Redirect=Log&logNo=10015640587


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

홈페이지(HTML) 관련 싸이트

-----------------------------

태그매니아 : http://www.tagmania.net/

김덕현 : http://my.dreamwiz.com/kim0057/

송파나루터 : http://www.studyho.com/

트리오 : http://trio.co.kr/

송현건 : http://home.introcom.net/~gosoo99/

스타트 홈페이지 : http://www.starthomepage.com/index.jsp

태그야 놀자 : http://www.tagyanolja.com/

컴으로 허자허자(다음카페) : http://cafe.daum.net/herjaherja

태그 연습장(컴으로 허자허자) : http://www.herjaherja.com/bonus/tag.htm

태그 연습장(샐리디카) : http://myhome.naver.com/sallynice/blog/sallyedit.htm

HTML 무료 동영상 강좌 ib96 : http://htm.ib96.com/study/index.php



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

자바스크립트 관련 싸이트

---------------------------

자바스크립트 정리 Good : http://koxo.com/lang/js/

자바스크립트 인터넷 강의 : http://javascript.ubedu.com/

CGI & JavaScript : http://www.cginjs.com/

JS Guide : http://jsguide.net/ver2/

이용석의 자바스크립트 : http://user.chollian.net/~spacekan/

블루 비 : http://www.blueb.co.kr/

자바방 : http://javabang.net/

학꺼니 홈 : http://user.chollian.net/~chk012/frame.html

까오기(왼쪽 developer 메뉴의 javascript 클릭) : http://www.kkaok.pe.kr/

해피스크립트 : http://www.happyscript.com/

자스코 (유료싸이트) : http://www.jasko.co.kr/

영문 싸이트 : http://www.devguru.com/Technologies/ecmascript/quickref/javascript_index.html

자바스크립트 정리(영어 사이트) : http://www.javascripttoolbox.com/bestpractices/



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

자바 도움말(API) 등 관련 싸이트

---------------------------------

JDK 1.4 한글 도움말(javastudy) : http://www.javastudy.co.kr/api/api1.4/

JDK 1.4 한글 API(forcert) : http://www.forcert.com/programming/api/j2se/1.4.0k/index.html


servlet api : http://jakarta.apache.org/tomcat/tomcat-4.1-doc/servletapi/index.html - 2.3

                          http://jakarta.apache.org/tomcat/tomcat-5.0-doc/servletapi/index.html - 2.4

jsp2.0 api : http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jspapi/index.html - 2.0


J2EE 한글 도움말 : http://forcert.com/programming/api/j2ee/1.3.0k/


SCJP 자격증 참고 싸이트(썬 교육센터) : http://www.suntraining.co.kr/

썬 자격증 참고 싸이트(forcert) : http://www.forcert.com/sun/sun.html


자바 SE 5.0 한글 도움말 다운로드(html 압축 버젼 + chm 버젼) : http://www.okjsp.pe.kr/seq/88948

Java API Document chm 버젼 다운로드(영문판) : http://www.allimant.org/javadoc/index.php


J2EE 1.4 튜토리얼 : http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html

JSTL 1.1 : http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

Spring API : http://www.springframework.org/docs/api/index.html

Hibernate API : http://www.hibernate.org/hib_docs/api/

자바 패키지별 예제(영문) : http://sangchin.byus.net/FlashHelp/Almanac.htm

Java API : http://pistos.pe.kr/javadocs/main.do

한국 썬 자바 기술문서 : http://kr.sun.com/service/techdocs/0011/index1.html

스트럿츠 API : http://struts.apache.org/1.2.9/api/index.html

공짜 자바 책 : http://www.java201.com/books.html


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

자바 싸이트

-------------

자바스터디 : http://www.javastudy.co.kr/  (강좌 정리)
자바누리 : http://www.javanuri.com/
자바랜드 : http://www.javaland.co.kr/
소설같은 자바 : http://www.jabook.org/    (책 한권)
자바서비스넷 : http://www.javaservice.net/ (중고급 정보)
김상욱의 개발자side : http://50001.com/  (소스 등)
종스클럽닷컴: http://www.jongsclub.com/
JLAB : http://www.jlab.net/
OKJSP : http://www.okjsp.pe.kr/
제이스톰 : www.jstorm.pe.kr/

생각하는 자바 (강좌 Good) : http://java.pukyung.co.kr/

자바 튜토리알(영어) : http://java.sun.com/docs/books/tutorial/index.html

스윙 컴포넌트 예제(영어) : http://java.sun.com/docs/books/tutorial/uiswing/components/components.html

MS SQL2000 JDBC 드라이버 다운로드 : http://www.microsoft.com/korea/download/server.asp

자카르타 프로젝트 한글화 : http://jakarta.apache-korea.org/

자바지기 : http://wiki.javajigi.net/

자바지기 eclipse 강좌 : http://wiki.javajigi.net/display/IDE/Eclipse

자바지기 struts 강좌 : http://wiki.javajigi.net/display/FRAMEWORK/Home

이클립시안 : http://eclipsians.net/

자바 카페 : http://www.javacafe.or.kr/

자바 API 예제(영어) : http://javaalmanac.com/egs/

Sun Korea Developer Network : http://kr.sun.com/developers/

IBM Java 입문서 : http://www-128.ibm.com/developerworks/kr/java/newto/

썬 자바 에반젤리스트 신상철 박사(Sang shin) : http://www.javapassion.com/


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

JSP 싸이트

-------------

JSP 스쿨 : http://www.jspschool.com/ (정리 잘됨, 자료실 Good)

OKJSP : http://www.okjsp.pe.kr/ (종류별로 정리잘된 싸이트)

AboutJSP : http://aboutjsp.com/ (강좌, 팁, QnA 등)

자북 (소설같은 JSP) : http://www.jabook.org/ (책 소설같은 JSP의 1부, 2부 있음)

까오기 : http://www.kkaok.pe.kr/ (여러 유영한 팁들)

OKJSP 블로그 : http://okjsp.tistory.com/


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

J2EE 싸이트

-------------

J2EE 스터디 : http://www.j2eestudy.co.kr/

웹로직 관련 문서 등 있는 싸이트 : http://www.itadvisor.co.kr/

BEA 웹로직 한글판 다운로드 : http://kr.bea.com/ko/index.shtml

EJB 무료 pdf 파일 다운로드 : http://www.theserverside.com/tt/books/wiley/masteringEJB3/index.tss


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

이클립스 다운로드 & 플러그인 정리

---------------------------------------

이클립스 다운 : http://www.eclipse.org/

WTP 다운 : http://www.eclipse.org/webtools/


eclipse articles(이클립스 개발 문서) : http://www.eclipse.org/articles/


java.net과 이클립스를 이용한 오픈소스 자바 어플리케이션 개발 : https://eclipse-tutorial.dev.java.net/eclipse-tutorial/korean/index.html


워크샾 에디터 플러그인 다운로드 (이클립스 JSP 에디터)

 : http://workshopstudio.bea.com/downloadNitroX.do


이클립스 언어팩 3.2.1 다운로드 : http://download.eclipse.org/eclipse/downloads/drops/L-3.2.1_Language_Packs-200609210945/download.php?dropFile=NLpack1-eclipse-SDK-3.2.1-win32.zip


mavenide update : http://mevenide.codehaus.org/release/eclipse/update/site.xml


이클립스 플러그인 순위 : http://eclipse-plugins.info/eclipse/ratings_overview.jsp

이클립스 DB 관련 플러그인(quantum) : http://sourceforge.net/projects/quantum/

톰캣 플러그인 : http://www.sysdeo.com/sysdeo/eclipse/tomcatplugin

 직접 다운 : http://www.sysdeo.com/sysdeo/content/download/393/4930/file/tomcatPluginV31.zip

tomcatPluginV31.zip 다운 받아서 압축 해제해서 eclipse설치폴더\plugins 에 복사


간단한 http 헤더 정보 보는 플러그인 : http://httpheaders.softabar.com/eclipse/

JSEclipse : http://www.interaktonline.com/downloads/eclipse/100/JSEclipse_1.2.1.zip

MSDN 도움말처럼 만드는 플러그인 : http://sourceforge.net/projects/ndoc/

Java2Html : http://www.java2html.de/

서브버젼 메뉴얼(?) : http://svnbook.red-bean.com/nightly/en/index.html

AjaxTags : http://struts.sourceforge.net/ajaxtags/index.html


All In One Eclipse 이클립스 다운로드

일본어 : http://aioec.sourceforge.jp/cgi-bin/wiki.cgi

영어 : http://aioec.sourceforge.jp/cgi-bin/wiki.cgi?page=english%5Ftop


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

아파치 (자카르타) 프로젝트 링크

---------------------------------

apache (메인 페이지) : http://www.apache.org/

jakarta 페이지 : http://jakarta.apache.org/


ant(빌드 도구) : http://ant.apache.org/bindownload.cgi

james (메일) : http://james.apache.org/download.html

james(메일) 직접 다운 : http://ftp.kaist.ac.kr/pub/Apache/james/james-2.2.0.zip

tomcat(톰캣 웹컨테이너) : http://tomcat.apache.org/


자카르타 Ant 한글 싸이트 : http://ant.apache-korea.org/

자카르타 Ant 다운로드 : http://ant.apache.org/bindownload.cgi

다운로드 리스트 : http://archive.apache.org/dist/ant/binaries/


ANT 다운 로드 : http://www.apache.org/dist/ant/

ant 1.5.4 다운 로드 : http://archive.apache.org/dist/ant/binaries/apache-ant-1.5.4-bin.zip

ant 1.6.5 다운 로드 : http://ftp.apache-kr.org/ant/binaries/apache-ant-1.6.5-bin.zip


(스트럿츠)

1. 스트럿츠 다운

http://archive.apache.org/dist/struts/

2. 스트럿츠 직접 다운로드

    http://ftp.apache-kr.org/struts/binaries/struts-1.2.7.zip

    http://mirror.apache.or.kr/jakarta/struts/binaries/jakarta-struts-1.1.zip


(스트럿츠 참고 싸이트)

자바 프레임워크(네이버 스트럿츠 카페) : http://cafe.naver.com/deve.cafe

자바지기 스트럿츠 소스(한빛미디어 자료실) : http://hanbitbook.co.kr/exam/


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

SUN SDN 다운로드 싸이트

--------------------------

javamail (자바 메일) : http://java.sun.com/products/javamail/

jaf (Java Activate Framework) : http://java.sun.com/products/javabeans/jaf/index.jsp


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

개발자 참고 싸이트

---------------------

웹 개발자 가이드 : http://www.mozilla.or.kr/docs/web-developer/standard/

MSDN 링크 : http://msdn.microsoft.com/library/default.asp

자바 디자인 패턴 : http://compstat.chonbuk.ac.kr/rightway/designpatterns/


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

온라인 해킹/바이러스 진단 및 치료 프로그램(국민은행 제공, 하우리 백신) : http://update.inca.co.kr/kookmin/livecall/kook_livecall.html


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

기타 관련 다운로드 싸이트(JDK, MySQL, 톰캣 등)

-------------------------------------------------

JDK 1.4.x     자바 Development Kit               http://java.sun.com


톰캣 : http://tomcat.apache.org/


MySQL        MySQL 데이터베이스      http://mysql.com

한국 MySQL : http://mysqlkorea.co.kr/

MySQL Connector/J (JDBC Driver for MySQL)   http://dev.mysql.com/downloads/connector/


MySQL GUI Tool 다운로드 : http://dev.mysql.com/downloads/gui-tools/5.0.html

MySQL-Front : http://www.mysqlfront.de/download.html

SQLyog(MySQL툴) 다운 : http://www.webyog.com/sqlyog/thanks.php


toad freeware 버젼(toad for MySQL 등) 다운로드 : http://www.toadsoft.com/


오라클 9i 링크 : http://www.oracle.com/technology/software/products/oracle9i/index.html

오라클 다운 :

http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk1.zip

http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk2.zip

http://download.oracle.com/otn/nt/oracle9i/9201/92010NT_Disk3.zip


오라클 10g JDBC 드라이버 다운로드 :  http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html



MyClipse 동영상 자료 : http://www.myeclipseide.com/images/tutorials/webprojectdemo.htm

MyEclipse 설명 자료 : http://myeclipseide.com/enterpriseworkbench/help/index.jsp


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

우키의 블로그 : http://www.jaewook.net/

한글패치 : http://lang.playxp.com/

웹마 : http://www.mdiwebma.com/

jwBrowser : http://samba.ssyy.net/

구글 : http://www.google.co.kr

심파일 : http://simfile.chol.com/

이클립스 : http://www.eclipse.org/

ie toy, ad-free : http://loser.miniwini.com/tt/

자료 : http://baechul.com/cgi/technote/main.cgi?board=pds

브피피닷넷 : http://vbpp.net/

자료 소스 : http://semtle.cuk.ac.kr/bbs/list.php?id=pds

웹빌드 : http://www.webbuild.co.kr

넷탑 : http://www.nettop.pe.kr

파워빌더 유저 가이드 : http://www.pbuser.com/main.html

미친감자 : http://mazinga.egloos.com/

EditPlus 자바 컴파일 설정 : http://www.javacafe.or.kr/lecture/cafeLecture/tool/EditPlusSetting/EditPlusSetting.htm

구글 툴바 : http://toolbar.google.com/T3/intl/ko/index_ie.php


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

PDA 싸이트

-------------

투데이스피피시 : http://www.todaysppc.com
PDA 프로그램 모음 싸이트 : http://www.fingertool.com/

포인트피디에이 : http://www.pointpda.com

코리아닷컴 피디에이 : http://pda.korea.com/

정리 잘된 싸이트 : http://www.114pda.com/

무료 PDA 소프트웨어(영어) : http://www.freewareppc.com

클리앙 : http://www.clien.net/

PDA용 GPS : http://www.freenavi.co.kr/

PDA용 GPS : http://shop.free-gps.com/

RW6100 드라이버 다운로드 : http://h50177.www5.hp.com/support/FA294PA/drivers/os_2045.html

RW6100 메뉴얼 : http://h50201.www5.hp.com/manual/index.asp

MissPDA : http://www.misspda.com/

아이핸디고(외국의 아방고와 비슷한 한국판 사이트) : http://www.ihandygo.com/

마이폴더 PDA 자료실 : http://pda.myfolder.net/


PDA용 뉴스 싸이트 정리 : http://clip.bakion.com/

PPC용 프로그램 개발(영어) : http://www.codeppc.com/


네이버 PDA 카페들 주소

PDA 매니아 : http://cafe.naver.com/pdam

PDA 카페 : http://cafe.naver.com/pdacafe

하이엔드 PDA : http://cafe.naver.com/hx4700


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

XML 싸이트

-------------

안항준의 XML : http://my.netian.com/~aphise/

XML 스터디 : http://www.xmlstudy.co.kr/

김종민의 XML : http://xml.80port.net/

자바지기 : http://www.javajigi.net/

XML Developer Group : http://xml.geonji.co.kr/

Rapsodie's XML Resource : http://user.chollian.net/~rapsodie/main.html

용어사전과 XML : http://trio.co.kr/

HowXML : http://www.howxml.com/

군산대학교 XML 연구실 : http://xmlab.kunsan.ac.kr/

XML 강좌 링크 : http://www.howon.ac.kr/~ktlim/lecture/xml/xml-index.htm

코리아 인터넷 XML 강좌 : http://korea.internet.com/channel/index.asp?cid=193

XML 홈페이지 만들기 강의 자료 : http://muse.inchon.ac.kr/jschae/internet_xml.html

XML 강의 자료 : http://kuic.kyonggi.ac.kr/~ejlee/xml/#course-note

XML 강의 : http://hyejeon.ac.kr/%7Ekrkuki/xmlq_1.html

자바지기 XML 강좌 : http://wiki.javajigi.net/display/XML/Home


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

기타 싸이트

-------------

소스들 : http://bluebild.byus.net/

구글툴바 : http://toolbar.google.com/intl/ko/index_ie.php

개인 이글루 싸이트(프로그래밍) : http://kwon37xi.egloos.com/

자카르타프로젝트(?) : http://www.jakartaproject.com/

TDD : http://wiki.tdd.or.kr/wiki.py

CSS : http://ilmol.com/wp/css

DB Desiner 4 :  http://www.fabforce.net/

manwal 블로그 : http://blog.etnews.co.kr/html/blog_home.php?bid=manwal

데이타베이스 사랑 넷 : http://database.sarang.net/

Xrath 블로그 : http://xrath.com/blog/index.php?category=Development

루비 : http://forum.rubykr.org/

루비 홈 : http://www.ruby-lang.org/en/

Rails로 블로그를 15분만에 만든다는 동영상 : http://www.rubyonrails.org/screencasts

RDE : http://homepage2.nifty.com/sakazuki/rde_e.html

MMF 플레이어 : http://www.playersparadise.net/download/

누룽지 : http://www.nulunggi.pe.kr/

JavaRSS : http://javarss.pe.kr/

김중태 문화원 : http://www.dal.co.kr/index.html


OKJSP 동영상 강좌 : http://www.okjsp.pe.kr/lecture/viewlet/

이클립스 톰캣 디버그 : http://www.okjsp.pe.kr/lecture/viewlet/okjsp2005/10_lomboz_tomcat_debug.html

Xper 위키 : http://xper.org/wiki/xp/

자카르타 한글 번역 : http://jakarta.apache-korea.org/

이클립시안 : http://eclipsians.net/

국현님 싸이트 : http://goodhyun.com/

Jazz Virtual Machine : http://www.jazzvm.net/


오라클자바 : http://www.oraclejava.co.kr/


JavaJiGi 강좌 1. Eclipse 강좌  2. Struts 강좌 3. XML 강좌


빌크 블루엣 인터내셔널에서 운영하는 작은 커뮤니티 : http://www.bilc.co.kr/

구글 바로 가입하기 : http://www.bytetest.com/

larky : http://larky.biz/blog/

mabaji " http://tong.nate.com/mabaji

J2EE Study :  http://www.j2eestudy.co.kr

한국 JBoss 사용자 그룹 : http://www.krjbug.com/

행복한고니 블로그 : http://mygony.com/tt/index.php

주홍넷 : http://www.joohong.net/ (게임기획)

NT FAQ : http://www.ntfaq.co.kr/

해킹 : http://www.ganseo.com/zboard/new_center.php


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

데이타베이스 관련 싸이트

------------------------

오라클 강좌 : http://oracleclub.com/

오라클용 무료 DB 툴 (DBA Master 2000) : http://www.dbany.com/

데이타베이스 정보 : http://www.databaser.net/

Korea Oracle Use Group : http://www.koug.net/

데이터베이스 벤더간 함수, 문법 비교 :  http://www.crossdb.com/dbknowledgebase/differencestable.html

데이타베이스 : http://home.ditco.com/~angel/Advanced/advanced.html

무료 오라클 툴(SmartSQL) : http://smartsql.hubweb.net/

오라클 툴 골든 다운로드 : http://www.benthicsoftware.com/downloads.htm


===========

인터넷 서점

-----------

강컴 : http://www.kangcom.com

네이버 책 : http://book.naver.com/

리브로 : http://www.libro.co.kr/books/index.asp?mall_id=1

알라딘 : http://www.aladdin.co.kr/home/wbookmain.aspx

모닝365 : http://www.morning365.com/

반디앤루니스 : http://www.bandibook.com/

yes24 : http://www.yes24.com

교보 : http://www.kyobobook.co.kr/


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

파이썬 관련 싸이트

------------------

파이썬 문서고 : http://home.paran.com/johnsonj/

Python : http://www.python.org/

왕초보를 위한 파이썬 : http://turing.cafe24.com/


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

C 컴파일러 다운로드

--------------------

C++ 다운로드 : http://turboc.borlandforum.com/impboard/attach/0000043200/tc++win31.zip

MS Visual C++ Toolkit 2003 : http://msdn.microsoft.com/visualc/vctoolkit2003/

볼랜드 BC++ 컴파일러 : http://www.borland.com/products/downloads/download_cbuilder.html

아래의 Compiler 라고 써있는 링크를 클릭하면 다운로드 받을 수 있음. Compiler Windows 5.5 08/24/2000 8.7 Mb


무료 C++ 컴파일러 DevC++ : http://turboc.borlandforum.com/impboard/attach/0000071056/devcpp4990setup.exe


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

프로그램 소스 모음 링크

-----------------------

생각하며 배우는 C++ 소스 링크 : http://www.hanbitbook.co.kr/example/1277/

알기쉽게 풀어쓴 웹로직과 EJB 소스 : http://www.hanbitbook.co.kr/exam/1278

자바5.0 프로그래밍 소스(한빛미디어) : http://hanbitbook.co.kr/example/1377/


인포북 소스 : http://www.infopub.co.kr/info/pds/group_pds/bbs.asp

정보문화사 소스 : http://www.infopub.co.kr/jungbo/pds/group_pds/bbs.asp

영진 프로그래밍 소스 링크 : tp://board3.youngjin.com/bbs/List_new.asp?bbsidx=135

대림 자료실 : tp://www.drbook.co.kr/pds/?pds=1-1

한빛 자료실 : tp://www.hanbitbook.co.kr/old_board/arumari2.html?id=data&n=&s=&query=&t=&kind=&page=0

한빛 미디어 소스 : http://www.hanbitbook.co.kr/exam/


===========

크랙 링크

-----------

http://www.astalavista.box.sk/

http://www.crackdb.com/


===========

지도 링크

-----------

네이버 지도 : http://local.naver.com/navermap_browser/?mode=1&init=1

엠파스 지도 : http://map.empas.com/

지도 찾기 : http://www.speednavi.co.kr/searchmap/

지하철 노선도 : http://www.smrt.co.kr/cyberstation/cyberstation.jsp?sv=1&skind=1&goline=undefined


=====

기타

-----

포토샾 : http://www.photoshopq.com/

폭 맞춰 출력하기 : http://www.visiontech.ltd.uk/

(설명 : 인터넷 익스플로러에서 프린트할 때 내용이 폭에 안 맞아 짤릴때 사용하면 좋음)

(방법 : 클릭해서 들어가서 콘트롤 설치한 후 상단 표준단추에 "빨간 W"로 프린트)


 

테이블은 이제 그만 쉬어야할 때 1 : http://ilmol.com/wp/2005/06/09/25/

테이블은 이제 그만 쉬어야할 때 2 : http://ilmol.com/wp/2005/08/15/110/


웹에서 테이블을 DIV로 변경 : http://www.qindex.info/Q_drctry/webtools/StylingTable.asp


레이아웃을 위해 테이블 사용이 잘못된 이유:문제의 원인, 해결방안 : http://softwant.com/standards/index.php


하드웨어 정보 보여주는 유틸 (everest ) 램 종류와 속도가 궁금해서 찾아봤음 :

http://file.naver.com/cgi-bin/simSearchPds.cgi?start=&number=&cat=99&q=everest&w=t&opt=0&x=38&y=13


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

기타 유용한 정보(?) 잡학지식

----------------------------

휴면 계좌 통합 조회 : http://www.sleepmoney.or.kr/default_cust.jsp


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

추천 블로그

------------

네이버 블로그

http://blog.naver.com/swinter8

http://blog.naver.com/drods

http://blog.naver.com/mmfcom

http://blog.naver.com/imcho57

http://blog.naver.com/khd7138

http://blog.naver.com/julymorning4

http://blog.naver.com/geerark


엠파스 블로그

http://blog.empas.com/ahnyounghoe/


이글루스 블로그

http://kwon37xi.egloos.com/


파란 블로그

http://blog.paran.com/funprogrammer/3389388



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

네이버 카페

------------

프로그래밍 노트 : http://cafe.naver.com/nautes74.cafe

mp3 파일 가사 지원 카페 : http://cafe.naver.com/tjsdud5313.cafe

코드인 : http://cafe.naver.com/javacircle.cafe


자바를 닷넷으로 바꿔주는 프로젝트 (MS)  :

              http://msdn.microsoft.com/vstudio/downloads/tools/jlca/default.aspx


닷넷을 자바로 바꿔주는 프로젝트(라이브러리, 넷빈즈 플러그인) : https://net2java.dev.java.net/


HTML, JavaScript, ASP 등 :  http://www.dragoneye.co.kr/


웹 기획 문서 링크 : http://www.ihelpers.co.kr/webdevdoc/index.php

기획 찜 : http://plan.jjim.com/


emwac 설치 : http://empire.achor.net/v7/lesson/win2000/

Oracle Database 10g: The Top 20 Features for DBAs :

   http://www.oracle.com/technology/pub/articles/10gdba/week5_10gdba.html


손병목의 지식공유 : http://www.itmembers.net/


apmsetup (아파치 PHP MySQL 한방에 설치) : http://www.apmsetup.com/



========

번역

--------

구글 번역 : http://www.google.co.kr/language_tools?hl=ko

알타비스타 번역 : http://babel.altavista.com/translate.dyn

icanread 영어 번역 : http://www.icanread.co.kr/ektran/ektran.html


짧은 문장 번역 : http://standard.beta.amikai.com/amitext/indexUTF8.jsp

영어 문장 번역 : http://ns.cnenews.net/ek-web/cgi-bin/sentTrans-ek

영어/일본어 단문 번역 : http://gtlac.keric.or.kr/cm_menu/home/translate/english.jsp


한중일 번역 : http://www.infoseek.co.jp/Honyaku?pg=honyaku_top.html

야후 바벨피쉬 무료 번역 : http://kr.babelfish.yahoo.com/


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

JBoss IDE tutorial : http://docs.jboss.com/jbosside/tutorial/build/en/html/index.html

지하철(버스) 노선 검색 : http://websubway.co.kr/subway/


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

유용한 유틸

------------

nullsoft 인스톨 프로그램(무료) : http://nsis.sourceforge.net/Main_Page

빠른 파일 검색 유틸 : http://sourceforge.net/projects/fileseeker

freemind(마인드 맵, 무료) : http://freemind.sourceforge.net/wiki/index.php/Main_Page


SDN JCreater Tutorial : http://developers.sun.com/prodtech/javatools/jscreator/learning/tutorials/index_ko.jsp


eclipse plugin : http://eclipse-plugins.2y.net/eclipse/plugins.jsp


struts-console : http://www.jamesholmes.com/struts/console/


JSTL : http://jakarta.apache.org/taglibs/index.html


JSTL 강좌 1(한글) : http://www-128.ibm.com/developerworks/kr/library/j-jstl0211.html#N1007F

JSTL 강좌 2(한글) : http://www-128.ibm.com/developerworks/kr/library/j-jstl0318/

JSTL 강좌 3(영어) : http://www-128.ibm.com/developerworks/java/library/j-jstl0415/

JSTL 강좌 4(영어) : http://www-128.ibm.com/developerworks/java/library/j-jstl0520/


struts guide(영어) : http://struts.apache.org/1.x/struts-taglib/index.html

스트럿츠 번역(한글판) : http://jakarta.apache-korea.org/struts/index.html


struts로 웹 개발 1 : http://korea.internet.com/channel/content.asp?kid=17&cid=188&nid=27686

struts로 웹 개발 2 : http://korea.internet.com/channel/content.asp?kid=17&cid=188&nid=27687

struts로 웹 개발 3 : http://korea.internet.com/channel/content.asp?kid=17&cid=188&nid=27688

struts로 웹 개발 4 : http://korea.internet.com/channel/content.asp?kid=17&cid=188&nid=27703


opencapture 제작자 싸이트 : http://openproject.nazzim.net/


exadel 개발툴 강좌(이클립스용) : http://www.exadel.com/web/portal/products/Tutorials


하이버네이트 관련 블로그 : http://blog.naver.com/jdkim528


유용한 무료 유틸 : http://www.tnk-bootblock.co.uk/software/


유용한유틸들(한글) : http://outofbell.hihome.com/myprog/program.html


영어사전(ajax) : http://www.nalbam.com/dic.htm


MyEclipse 크랙 : http://www.astalavista.us/search.php?s=my+eclipse&Submit=Search


볼랜드 투게더 무료(커뮤니티 버젼) : http://togethercommunity.co.kr/together/


구글과 네이버로 본 지도 : http://9eye.net/map/NGMap.php?lat=37.619173,127.059857&lon=0.002044,0.005364&zoom=16&view=G
http://9eye.net/tt/
http://kaorw.8con.net/blog/412
 
 
모델링 링크 : http://www.zdnet.co.kr/builder/dev/modeling/
 
통계청 정보화프로젝트 문서화 관리지침 : http://www.nso.go.kr/nso2005/info/public/law/law2/view.jsp?category_id=370&content_id=3696
 
연세대학교 정보전산 : http://solgae.yonsei.ac.kr/
 
iBatis 자료 링크 : http://kldp.net/frs/?group_id=827
 

MyEclipse 링크들(영어)

MyEclipse Document : http://www.myeclipseide.com/ContentExpress-display-ceid-67.html

MyEclipse Tutorial/Demo : http://www.myeclipseide.com/ContentExpress-display-ceid-16.html

MyEclipse Struts Quickstart : http://myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipse.doc/html/quickstarts/struts/index.html

MyEclipse JSF Login Demo : http://myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipse.doc/html/quickstarts/jsf/index.html

MyEclipse Hibernate Quickstart : http://myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipse.doc/html/quickstarts/hibernate/index.html


==========

WIKI 링크

----------

okJSP 위키 : http://okjsp.pe.kr/jspwiki/

오픈프레임워크 위키 : http://openframework.or.kr/JSPWiki/Wiki.jsp?page=Main

자바지기 위키 : http://wiki.javajigi.net/homepage.action


헤드 퍼스트 씨리즈 블로그 : http://headrush.typepad.com/creating_passionate_users/


무료 웹 에디터 : http://www.aptana.com/


MyEcipse + Struts : http://www.okjsp.pe.kr/jspwiki/Wiki.jsp?page=Struts_start_by_MyEclipse


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

ajax 사용한 싸이트(예 : 쇼핑몰 등) 링크

-------------------------------------

http://panic.com/goods/

http://www.flickr.com/

http://www.netflix.com

http://a9.com/



디자인 패턴 마소 연재 자료

http://www.javastudy.co.kr/docs/lec_oop/designPattern/DesignPattern1.htm

http://www.javastudy.co.kr/docs/lec_oop/designPattern/DesignPattern2.htm

http://www.javastudy.co.kr/docs/lec_oop/designPattern/DesignPattern3.htm

http://www.javastudy.co.kr/docs/lec_oop/designPattern/DesignPattern4.htm


조엘 온 소프트웨어

http://korean.joelonsoftware.com/uibook/chapters/1.html


핸드폰 고리 & USB 데이타 케이블 판매 쇼핑몰 링크

http://www.earlyadopter.co.kr/mall/?type=item&prod_id=1156&shop_gbn=shop


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

개인이 운영하는 싸이트들

-------------------------------------

마루치 : http://www.maluchi.com/

오규성 : http://midway.mireene.com/


Google Hack: mp3 자료 찾기

http://www.google.co.kr/search?hl=ko&newwindow=1&q=%3Fintitle%3Aindex.of%3F+mp3+&lr=


API 찾기

http://www.gotapi.com/index.html


List of free Java books for download (October 12, 2006 - revision 5 :-))
Books:
Better Builds with Maven. The How-to Guide for Maven 2.0 (John Casey, Vincent Massol, Brett Porter, Carlos Sanchez, Jason Van Zyl)
Essential Skills for Agile Development (Kent Tong)
EJB Design Patterns (Floyd Marinescu)
J2EE and XML Development (David Weiss, Kurt A. Gabrick, David B. Weiss)
Jakarta-Struts Live (Rick Hightower)
Java Data Objects (Robin Roos)
Java Testing and Design (Frank Cohen)
Mastering Enterprise Java Beans. Third Edition (Ed Roman, Rima Patel Sriganesh, Gerald Brose)
Servlets and JavaServer Pages: The J2EE Technology Web Tier (Jayson Falkner, Kevin Jones)
Struts Survival Guide. Basics to Best Practices (Srikanth Shenoy, Nithin Mallya)
The J2EE Architect's Handbook (Derek Ashmore)
Thinking in Enterprise Java (Bruce Eckel)
Thinking in Java, 3rd Edition (Bruce Eckel)
Thinking in Patterns (Bruce Eckel)
Javalobby Current Book and White Paper Downloads (Members Only - free registration)
Eclipse Live (Bill Dudney)
JDK 1.4 Tutorial (Gregory M. Travis)
CodeNotes for J2EE (Robert McGovern, Stuart Charlton, and Gregory Brill)
Core Servlets and JavaServer Pages (Marty Hall)
 

국내 1000대 기업 연봉 공개 : http://saramin.co.kr/pds/1000com_salary/1000com_salary.php

당신은 세계에서 몇번째 부자인가 ? : http://www.globalrichlist.com/index.php


코덱, 동영상 변환 자료 : http://www.codecbox.com/video/


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

Ruby on Rails

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

입문 1 : http://www.onlamp.com/lpt/a/5546

입문 2 : http://www.onlamp.com/lpt/a/5641




여리의 작업실(C프로그램) : http://www.zap.pe.kr/index.php


--------------------------------------------------------------

이클립스 WTP 다운로드 (2006년 12월 28일 현재 기준)

WebTools Platform; All-in-one 
The Eclipse Web Tools Platform Project will initially focus on infrastructure for tools used to build applications for standards-based Web and Java runtime environments. WTP all-in-one module includes the complete set of software to start using wtp immediately. This package already has wtp combined with the complete set of prerequisites, eclipse 3.2.1 sdk, emf, gef and jem. You will not need anything else. 
Status Platform Download
 Windows wtp-all-in-one-sdk-R-1.5.2-200610261841-win32.zip(md5) 
 
Status Platform Download
 Linux (x86/GTK 2) wtp-all-in-one-sdk-R-1.5.2-200610261841-linux-gtk.tar.gz(md5) 
 
Status Platform Download
 Mac OSX (Mac/Carbon) wtp-all-in-one-sdk-R-1.5.2-200610261841-macosx-carbon.tar.gz(md5) 
 


 

이클립스 언어팩 다운로드 (2006년 12월 28일 현재 기준)

SDK Language Packs  Windows Linux (x86/GTK 2) and Solaris (Sparc/GTK 2)  Description
NLpack1 - German, Spanish, French, Italian, Japanese, Korean, Portuguese (Brazil), Traditional Chinese and Simplified Chinese. 
NLpack1-eclipse-SDK-3.2.1-win32.zip  
 
NLpack1-eclipse-SDK-3.2.1-gtk.zip  
 These are required if SDK was downloaded
NLpack2 - Czech, Hungarian, Polish and Russian
NLpack2-eclipse-SDK-3.2.1-win32.zip  
 
NLpack2-eclipse-SDK-3.2.1-gtk.zip  
 
NLpack2a - Danish, Dutch, Finnish, Greek, Norwegian, Portuguese, Swedish and Turkish. NLpack2a-eclipse-SDK-3.2.1-win32.zip    NLpack2a-eclipse-SDK-3.2.1-gtk.zip   
NLpackBidi - Arabic and Hebrew
NLpackBidi-eclipse-SDK-3.2.1-win32.zip  


NLpackBidi-eclipse-SDK-3.2.1-gtk.zip  
 


 

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

여행

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

블로그 "조이와 가볍게 여행떠나요 : http://blog.daum.net/2006jk


IBM Rational Rose 다운로드 : http://www-128.ibm.com/developerworks/rational/downloads/


MS Visual Studio Exprees 다운로드 : http://msdn.microsoft.com/vstudio/express/


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

유틸 블로그 등

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

http://www.choboweb.com/

http://loser.miniwini.com/wp/

Posted by 1010
반응형
Spring 프레임워크 참고문서
Spring 프레임워크 강의
Spring 프레임워크 기반의 테스트
Spring 프레임워크 Batch
SpringOne2008America
Spring 프레임워크 워크북 부연설명
  • 4장-예제 4-12 applicationContext.xml 부연설명 : 4장 Spring JDBC p.244에 있는 (예제 4-12)applicationContext.xml에 대한 부연설명
  • Spring MVC를 활용한 정적인 페이지 개발 : 6장의 Spring MVC를 단계적으로 추가적인 설명과 처음 Spring MVC를 이용하여 구현하고자 하는 개발자에게 도움이 될 만한 내용이 추가된다. 또한 책에서는 메인페이지를 처음으로 구현하고 있는데, 실제 예제소스에서는 이미 완성된 소스를 보이고 있음으로 단계적으로 개발하기에 부족함이 있는 듯 하여 직접 하나씩 구현해 보면서 예제소스를 만들어 가는 것으로 한다.
Spring 프레임워크 참고자료
  • Spring 프레임워크 참고 문서 : Spring 프레임워크를 공부하기 위한 참고문서를 정리해 놓은 페이지
  • unitils : Spring, Hiberate 프레임워크, Easymock 프레임워크를 Annotation 기반으로 테스트가 가능하도록 지원하는 프레임워크이다.
Posted by 1010
01.JAVA/Java2009. 2. 25. 15:35
반응형
Web Java Class Decompiler 이용 방법
  • 이 유틸리티는 Java Class파일을 디컴파일하여 java소스로 변환하여 줍니다.
  • 디컴파일한 소스를 표시하는 방법에는 화면 출력과 소스 다운로드 두가지가 있습니다. (현재 화면 출력만 지원)
출력 방법 : 화면 출력 소스 출력
소스 파일 : (2MB 이내 파일) 파일의 캐릭터셋
지금까지 총 679번의 Java Class Decompiling 작업을 수행했습니다. (Since 2008-11-26)
Posted by 1010
56. Eclipse Etc.../Eclipse2009. 2. 25. 00:54
반응형
Eclipse 시작

Eclipse 시작하기 : JDK 설치에서부터 Eclipse 다운로드등 Eclipse를 처음 시작하는 개발자들이 알아야하는 내용에 대하여 다루고 있다.

Eclipse에 새로운 플러그인 설치하기 : Eclipse에 새로운 플러그인을 추가하는 방법에 대하여 두가지로 나누어 살펴본다. 또한 새로운 플러그인을 찾을 수 있는 방법에 대해서도 다룬다.

Eclipse 사용시 알아두면 좋은 유용한 단축키 모음

Eclipse 강좌

Eclipse 사용을 위한 동영상 강좌 : Eclipse 3.1이 배포되면서 좋은 동영상 강좌들이 많이 올라와 있다. Eclipse의 많은 기능들을 느끼고 사용해 볼 수 있다.

Eclipse 에서 Middlegen 사용하기 : 프로잭트를 하다보면 Database의 변경이 있을 수 있다. 만일 이러한 상황에서 Hiberanate같은 framework를 사용할 시에 변경될 때마다 해당 xml mapping파일과 java dto 객체를 생성하는 일은 참으로 번거로운 일이 아닐 수 없으며 이러한 비용을 줄이기 위해 eclipse용 plugin으로 middlegen이 나왔습니다.

Eclipse 사용시 유용한 팁

Eclipse 사용시 알아두면 유용한 팁
Eclipse 성능 높히기
Eclipse 기반하에서 Remote Debugging 설정 : Eclipse 기반하에서 Remote Debugging을 실행하는 방법에 대하여 다룬다.

Eclipse With PlugIn

Eclipse에 Web Tools Project 설치 및 사용방법 : 지금까지 Eclipse에서 불편하게 느꼈던 웹 개발의 편의성을 향상 시켜줄 막강한 플러그인에 관한 설치에서부터 다양한 툴들을 사용방법에 대하여 다룬다.

Eclipse에 Tomcat Server플러그인 설치하기
Eclipse에 JRUN Server플러그인 설치하기
Eclipse에 JBoss Server플러그인 설치하기
Eclipse에 Lomboz플러그인 설치하기 1
Eclipse에 Lomboz플러그인 설치하기 2
Eclipse에 JsUnit 플러그인을 설치하여 자바 스크립트 테스트하기
Eclipse에 Eclipse Profiler 설치 및 세팅하기

Eclipse With 버전 관리 시스템

CVS 설치와 Eclipse와의 연동
Eclipse와 CVS과 연결하여 사용하기
Subversion 설치 및 Eclipse와의 연동
Visual Source Safe 설치와 Eclipse와의 연동

 
Posted by 1010
98..Etc/SVN2009. 2. 25. 00:41
반응형
Posted by 1010
98..Etc/SVN2009. 2. 25. 00:40
반응형

소프트웨어 구성 관리에 관한 도움말

이 사이트의 프로젝트에서는 소프트웨어 구성 관리(SCM) 도구를 사용하여 버전을 관리할 수 있습니다. SCM에서는 CVS를 대체할 향상된 도구로 설계된 공개 소스 버전 관리 도구인 Subversion을 사용합니다. 대부분의 CVS 사용자는 처음이라도 Subversion을 쉽게 사용할 수 있습니다. Subversion을 처음 사용하는 경우라면 실전 경험을 통해 사용법을 익히는 것이 좋습니다. 이 가이드는 빠른 속도로 익힐 수 있도록 도와줍니다.

Subversion 설치

Subversion은 클라이언트 서버 시스템입니다. Subversion 저장소는 프로젝트 웹 서버에서 관리합니다. 사용자의 시스템에서 실행되는 Subversion 클라이언트는 인터넷을 통해 Subversion 서버와 연결됩니다. 이 사이트에서 호스팅되는 프로젝트를 위해 Subversion 서버에 접근하려면 로컬 컴퓨터에 Subversion 클라이언트가 있어야 합니다. 거의 모든 플랫폼에서 클라이언트를 사용할 수 있습니다. Subversion 프로젝트 다운로드 페이지에서 해당 운영 체제에 적합한 클라이언트를 다운로드할 수 있습니다.

어떤 이들은 개발 과정에서 Subversion 명령줄 클라이언트인 svn을 사용하지만, 그래픽 인터페이스를 선호하는 사용자에게는 TortoiseSVN이 적합합니다. 이 가이드에서는 명령줄 Subversion에 대한 지침만 제공합니다.

그 밖의 Subversion 설명서 및 리소스

단계별로 학습하는 경우라면 Version Control with Subversion을 사용하는 것이 좋습니다. 이 사이트에 수록된 도움말 정보 중 상당수는 이 완성된 설명서에서 발췌된 것입니다. Subversion에 대한 추가 정보 및 최신 정보는 Subversion Project 웹 사이트에서 확인하십시오.

Subversion과 CVS의 명령을 비교해 보려면 "Crossover" Guide for CVS Users를 참조하십시오. 프로젝트에서 Subversion을 가장 효과적으로 활용하는 데 도움이 될 팁은 Subversion 최고의 실행 사례를 참조하십시오.

TortoiseSVN에 관한 도움말

  • TortoiseSVN은 널리 사용되는 Windows Subversion 클라이언트로서 Subversion과 동일한 기능을 제공합니다.
  • 이 기능에는 버전 관리 작업을 위한 편리한 대화 상자인 Windows 쉘(탐색기) 통합이 포함됩니다.
  • 사용자 인터페이스는 다양한 언어로 이용할 수 있습니다.

TortoiseSVN 설치

  1. TortoiseSVN 설치 페이지 http://tortoisesvn.net/downloads에서 설치하려는 버전을 다운로드합니다. 최신 버전을 사용하는 것이 좋습니다.
  2. 설치 프로그램 아이콘을 두 번 누르고 다음을 누릅니다. TortoiseSVN을 설치할 디렉토리로 변경하거나 기본값을 사용합니다.
  3. "모든 사용자 대상 설치"를 선택하고 다음을 누릅니다.
  4. TortoiseSVN은 지정된 경로에서 필요한 파일을 설치하기 시작합니다.
  5. 설치를 마치면 컴퓨터를 재시작하라는 메시지가 나타납니다.

    재시작해야 하는 이유는 TortoiseSVN이 통합되는 Windows 탐색기가 시스템을 재시작하지 않으면 갱신될 수 없기 때문입니다.

    참고 - TortoiseSVN은 운영 체제 단계의 응용프로그램입니다.

  6. TortoiseSVN의 작동 과정에 대한 자세한 내용은 http://tortoisesvn.net/docs/release/TortoiseSVN_en/index.html의 도움말 파일을 참조하십시오.
  7. 그 밖에 FAQ, 번역 등에 대한 정보는 http://tortoisesvn.tigris.org/를 참조하십시오.

WebDAV에 관한 도움말

Subversion은 부분적인 DeltaV 서버로서, 일반적으로 Subversion 클라이언트와 같은 DeltaV 클라이언트로부터의 쓰기 요청만 승인합니다. 현재 CEE의 최신 Subversion에서는 "자동 버전 관리(autoversioning)"라는 기능을 지원합니다. 자동 버전 관리가 활성화되면 일반적인 WebDAV 클라이언트는 곧바로 Subversion 저장소에 쓸 수 있으며, 서버는 해당 커밋을 자동으로 수행합니다.

따라서 사용되는 WebDAV 클라이언트 유형에 따라 기술자가 아닌 사용자도 Subversion 클라이언트의 사용법을 학습하지 않고서도 버전 관리의 이점을 누릴 수 있습니다. Subversion 저장소를 대상으로 작업 중임을 인식하지 않은 채로 파일 생성, 편집, 이름 변경, 복사 및 삭제와 같은 작업을 일상적으로 수행할 수 있습니다.

Microsoft Word나 Dreamweaver와 같은 독립형 응용프로그램을 비롯하여 저장소가 네트워크 폴더처럼 마운트될 수 있는 완전한 파일 시스템 구현까지 매우 다양한 WebDAV 클라이언트를 사용할 수 있습니다. 대부분의 최신 운영 체제에서는 제한적인 수준 이상의 WebDAV 기능이 기본적으로 제공됩니다. 다양한 WebDAV 클라이언트에 대한 자세한 내용은 설명서의 이 절을 참조하십시오.

CollabNet 프로젝트에서 이 기능을 활성화하려면

  1. 프로젝트 소유자로 로그인합니다.
  2. "프로젝트 편집" 및 "도구 설정"을 차례로 선택합니다.
  3. 도구 설정 화면에서 "Subversion > 자동 버전 관리" 옆 체크박스를 선택합니다.
  4. 설정을 저장합니다.

이 기능을 활성화하기에 앞서 Subversion 설명서에서 이 기능의 부작용에 대해 확인해야 합니다. 특히 WebDAV 클라이언트에서 수행하는 커밋은 비기술적인 일반 로그 메시지가 있습니다. 또한 WebDAV 클라이언트는 많은 쓰기 작업을 수행하는 편이므로 다량의 커밋 이메일이 생성될 수 있습니다.

자동 버전 관리 기능에 대한 자세한 내용은 Subversion 설명서의 부록 C를 참조하십시오.

Subversion을 사용하는 Eclipse 3.0.2

IDE(Integrated Development Environment)

IDE(Integrated Development environment)는 사용자가 단일 개발 환경에서 컴파일, 테스트 및 디버깅과 같은 작업을 수행할 수 있는 어플리케이션이라고 할 수 있습니다. 모든 작업에 대해 별도 어플리케이션을 다운로드할 필요 없이 동시에 모든 작업을 수행할 수 있습니다. IDE(Integrated Development Environment)의 한가지 예로 Eclipse를 들 수 있습니다.

Eclipse에 관한 도움말

Eclipse는 다양한 기능을 갖춘 플랫폼을 제공하여 매우 잘 통합된 도구를 개발할 때 사용하는 전문 소프트웨어 개발 프로젝트입니다. 또한 Eclipse는 오픈 소스 개발 프로젝트입니다. Eclipse에 대한 자세한 내용은 다음 사이트에서 찾을 수 있습니다.

http://www.eclipse.org/eclipse/faq/eclipse-faq.html#about_8.

Eclipse를 설치하려면

  1. 브라우저에서 http://www.eclipse.org/downloads/index.php로 이동합니다.
  2. 다운로드 페이지에 많은 미러 사이트가 나타납니다. Eclipse는 무료 소프트웨어이므로 전세계 국가에 있는 미러 다운로드 서버에 호스트되어 있습니다. 다운로드할 미러 사이트를 선택합니다. 그러면 파일을 저장할지 또는 파일을 열지를 묻는 상자가 나타납니다. Eclipse 패키지는 zip으로 압축된 파일입니다. 저장을 누릅니다. Eclipse를 다운로드할 경로를 선택합니다.
  3. Eclipse 다운로드를 완료한 후, Eclipse가 다운로드된 디렉토리로 이동하여 Eclipse 아이콘을 두 번 누릅니다. 작업 환경 경로를 묻는 대화 상자가 나타납니다. 작업 환경은 모든 파일 및 폴더를 저장합니다.
  4. 작업 환경 경로를 입력합니다. 체크아웃을 수행할 때 파일이 이 경로에 저장됩니다. 체크아웃은 소스 아카이브의 파일을 수정해야 할 때 수행하는 작업입니다. 체크아웃은 버전 관리 소프트웨어를 사용하여 수행합니다. 체크아웃을 수행하면 다른 사용자가 파일을 수정하지 못합니다.

Subclipse에 관한 도움말

Subclipse

Subclipse는 Eclipse용 플러그인입니다. Subclipse는 Subversion을 Eclipse와 통합합니다. Subclipse 플러그인을 사용하면 이 플러그인이 Subversion의 모든 기능을 Eclipse에 추가하기 때문에 Subversion을 별도로 다운로드할 필요가 없습니다. Eclipse는 다양한 기능을 갖춘 플랫폼을 제공하여 매우 잘 통합된 도구를 개발할 때 사용하는 전문 소프트웨어 개발 프로젝트로 오픈 소스입니다.

Eclispse에 대한 자세한 내용은 http://www.eclipse.org/eclipse/faq/eclipse-faq.html#about_8를 참조하십시오.

Subclipse 다운로드 및 설치:

플러그인은 http://subclipse.tigris.org에서 다운로드할 수 있으며, 사용자는 Eclipse를 사용하여 Subclipse도 다운로드할 수 있습니다.

  1. Eclipse를 다운로드한 위치(예: D:\eclipse-SDK-3.0.2-win32)로 이동하여 Subclipse를 설치합니다.
  2. Eclipse 아이콘을 두 번 눌러 Eclipse를 엽니다.
  3. Subclipse를 다운로드하려면 도움말 > 소프트웨어 갱신 > 찾기 및 설치를 누릅니다.
  4. 설치할 새 기능 검색 옵션을 선택합니다.
  5. 다음을 누릅니다. 표시되는 창에서 새 원격 사이트를 누릅니다. 이름 및 URL 열이 있는 작은 창이 나타납니다.
  6. 이름 열에 Subclipse를 입력하고 URL 영역에 http://subclipse.tigris.org/update를 입력합니다.
  7. 확인을 누릅니다. 설치할 사이트 섹션에 Subclipse가 나열된 것을 볼 수 있습니다. Subclipse를 선택합니다.
  8. 다음을 누릅니다. Subclipse의 버전(예를 들어, 0.9.30)을 선택합니다.
  9. 다음을 누릅니다. [라이센스 계약 조건에 동의합니다]를 선택해야 하는 창이 나타납니다.
  10. 다음을 누릅니다. 설치할 위치를 묻는 창이 나타납니다.
  11. 다음을 누릅니다. 확인 창이 나타납니다.
  12. 설치를 누릅니다. 설치 프로세스가 끝난 후 작업 환경을 재부팅할지 또는 변경사항을 적용할지를 묻는 창이 나타납니다. Subclipse의 설치를 완료하기 위해서는 작업 환경을 재시작하거나 변경사항 적용을 눌러야 합니다.

Subclipse에서 코드 저장소 구성

Subclipse를 사용하여 Subversion 코드 저장소에 대한 작업을 수행할 수 있습니다. 다음 절차는 Subclipse에서 버전 관리 저장소를 구성하는 방법을 설명합니다.

Subclipse에서 코드 저장소를 구성하려면

컴포넌트가 설치되었으면 Eclipse 기본 창으로 이동합니다.

  1. 기본 메뉴에서 Window > Show View로 이동하고 SVN Repository를 선택합니다.
  2. CollabNet에 로그인하고 Subversion을 버전 지정 컴포넌트로 포함한 프로젝트를 작성합니다.
  3. 프로젝트를 작성한 후 Eclipse로 이동하고 Window > Open Perspective > Other > Select SVN Repository Exploring을 차례로 누릅니다.
  4. 확인을 누릅니다. 기본 창의 오른쪽에 SVN Repository 탐색기가 나타납니다. Repository Location을 마우스 오른쪽 버튼으로 누릅니다.
  5. URL(예: http://firstsvn.<domainname>.net/svn/firstsvn)을 입력합니다. 여기서 "firstsvn"은 CollabNet에서 작성한 프로젝트이고, "domainname"은 도메인 이름이고, 마지막의 "firstsvn"은 프로젝트 이름입니다.
  6. finish를 누릅니다.
  7. SVN Repository 탐색기로 이동하여 탐색 메뉴에서 프로젝트를 확장합니다.
  8. 폴더에 나열된 프로젝트의 내용을 볼 수 있습니다.
  9. 이제 폴더를 선택하고 마우스 오른쪽 버튼을 눌러 "Checkout as Project"을 선택합니다.
  10. 기본 창의 오른쪽에서 Resources view를 마우스 오른쪽 버튼으로 눌러 작업 환경으로 이동합니다. 작업 환경은 모든 프로젝트 파일을 저장하고, 수정 작업을 하고, 파일을 커밋하고, 기타 다른 작업을 수행하는 곳입니다. 예를 들어, 작업 환경을 C:\Test로 둘 수 있습니다.

Subclipse를 사용하여 파일을 편집하려면

  1. 기본 메뉴에서 Window > Show View로 이동하고 SVN 저장소를 선택합니다.
  2. SVN 저장소 창에 작성한 프로젝트가 표시됩니다.
  3. 파일을 편집하려면 폴더를 선택하고 폴더의 왼쪽에 있는 더하기 기호를 누릅니다. 폴더가 확장되고 폴더의 내용이 표시됩니다.
  4. 파일의 내용을 변경사항하려면 폴더에서 파일을 선택하여 오른쪽의 편집 창에 엽니다. 변경사항을 적용하고 File > Save를 눌러 파일을 저장합니다.
  5. 파일에 작성한 변경사항을 저장하려면 왼쪽의 네비게이터 메뉴에서 수정한 파일을 선택한 다음 마우스 오른쪽 버튼을 누르고 Team > Commit을 선택합니다.

또한 Subclipse를 사용하여 갱신 및 원상 복귀와 같은 다른 작업을 수행할 수 있습니다.

Subclipse에 대한 질문이 있을 경우 다음 주소의 Subclipse 사이트를 방문하십시오.

이 사이트에는 FAQ 섹션, 플러그인의 갱신에 대한 정보 및 기타 Subclipse와 관련된 상세 내용이 있습니다.

Posted by 1010