안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2011년 4월 30일 토요일

Tomcat Setting property did not find a matching property 해결방법


 eclipse 창에서 server 항목에서 tomcat을 더블 클릭하면
tomcat에 대한 옵션이 나옵니다. 그 중에서 
'server options' 에서 Publish module contents 
to separate XML files' 란에 체크하면 해결됩니다.

tomcat 설치 방법

http://tomcat.apache.org/

에 들어가면

오른쪽에 Download 항목에

tomcat 버젼이 다양하게 존재한다

그 중 하나를 선택하고

다운 받으면 된다.

다운로드 항목이 많은데

windows 사용자의 경우

windows service installer를 사용하면 간단하게

설치할 수 있다.

eclipse 와 tomcat 연결하기 (펌)

1. Eclipse Galileo를 실행합니다.

2. 상단 [Window > Preperence]를 차례대로 클릭합니다.

3. 아래 이미지와 같이, 새 창이 띄워지면 여러 항목중에 [Server > Runtime Environment]를 선택합니다.
   현재는 아무런 항목이 없으므로, 우측의 [Add...]버튼을 눌러줍니다.



4. [New Server Runtime Environment] 대화상자가 나타나면,
    현재 설치되어진 Tomcat의 버젼, 우리는 6.0 버젼이 설치되어 있으므로 이것을 선택해 줍니다.
    설정이 되었으면, 하단의 [Next] 버튼을 눌러줍니다.

 


5. 변경된 대화상자에서 [Tomcat installation directory : ] 항목의 공란에
   [Browse...]버튼을 이용하여, Tomcat이 설치되어진 경로의 Bin경로 직전까지 입력하여 줍니다.
   경로입력이 완료되었으면, 하단의 [JRE] 부분을 설정해야 합니다.
   우측의 [Installed JREs...]버튼을 눌러, 새 대화상자를 열어줍니다.



6. 새로 열려진 [Preferences] 대화상자에서 JRE리스트를 확인합니다.
   현재 1.5버젼의 JDK항목이 존재합니다. 여기에 1.6버젼의 JDK 항목을 추가하겠습니다.
   우측의 [Add...]버튼을 눌러 새 대화상자를 띄워줍니다.



7. [Add JRE] 대화상자의 항목중에서, [Standard VM]항목을 선택후 하단의 [Next]버튼을 눌러줍니다.



8. 아래의 이미지에서처럼, [Directory...]버튼을 통해서 1.6버젼의 JDK가 설치된 경로를 지정해주어
   하단의 [JRE system libraries : ] 항목에 리스트가 출력되도록 합니다.
   설정후, 하단의 [Finish]버튼을 누릅니다.



9. 다시 종전에 보았던 1.5버전의 JDK항목과 함께, 방금 설정한 1.6버전의 JDK항목도 나타나게됩니다.
   이때에 마우스를 이용해, 1.6버전에 체크박스를 해준뒤 [OK]와 [Finish]를 눌러 모든 대화상자를 닫습니다.



10. Tomcat 웹서버가 eclipse와 잘 연동되었는지 확인해보아야 겠습니다.
     eclipse 상단의 [File > New > Project] 메뉴를 차례대로 클릭합니다.

11. 하단의 이미지처럼, [Web > Dynamic Web Project]항목을 선택한뒤 [Next]버튼을 클릭합니다.



12. 이어 프로젝트명을 적절하게 입력해 준뒤, [Next > Next > Finish]를 누릅니다.



13. 이어 다음과같은 대화상자가 출력되면, [Yes]를 클릭하여 줍니다.



14. eclipse에 새로운 웹프로젝트가 생성된 것을 확인합니다.



15. 위 이미지에서 [WebContent]항목에서 마우스의 오른쪽버튼을 이용해 [New > JSP]를 선택합니다.

16. 새로 띄워진 대화상자에서 생성될 JSP파일의 파일명을 설정하여 줍니다.
    설정이 완료되면, [Finish]버튼을 클릭합니다.



17. 아래 이미지와같이 새로운 JSP 파일이 생성된 것을 확인할 수 있으며,
    생성된 HTML 소스중간의 <BODY> ... </BODY>사이에 문자열을 입력합니다.
    입력이 완료되면, 생성된 hello.jsp 파일을 저장합니다.



18. 프로젝트명(WebTest)에서 마우스 오른쪽버튼을 이용하여, [Run As... > 1. Run on Server...]를 눌러 확인합니다.

helios에서 서버 세팅 항목이 안 보일 경우

Helios 설치후 Server 탭이 보이지 않는다면, JST Server Adapters를 추가해야한다.


Help - Install New Software -> http://download.eclipse.org/releases/helios 선택 
또는 JST Server Adapters 검색

Pending List의  Web, XML, and Java EE Development 중 
JST Server Adapters (org.eclipse.jst.server_adapters.feature.feature.group)를 설치한다.
그러면 window - preferences에 Server가 보이게 된다.

그 외에 , Dynamic WEB Project 등이 안보이면, 
Help - Install New Software -> http://download.eclipse.org/releases/helios 선택 
Web,XML, and ~ 중 대략 선택하여 추가 한다.

2011년 4월 26일 화요일

d3d 기본 창 띄우기

#include <d3d9.h>

#include <string>
#pragma comment(lib, "d3d9.lib")
using namespace std;
//전역변수
LPDIRECT3D9 g_pD3D = NULL; // D3D 디바이스를 생성할 D3D 객체 변수
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // 랜더링에 사용 될 D3D 디바이스

///Direct3D 초기화
HRESULT InitD3D(HWND hWnd)
{
///디바이스를 생성하기 위한 D3D 객체 생성

if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp; // 디바이스 생성을 위한 구조체
ZeroMemory(&d3dpp, sizeof(d3dpp)); // 반드시 구조체를 깨끗이 지워야한다.

d3dpp.Windowed = TRUE; // 창모드
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 가장 효율적인 SWAP 효과
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //현재 바탕화면 모드에 맞춰서 후면 버퍼 생성

if(FAILED(g_pD3D -> CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp,
&g_pd3dDevice)))
{
return E_FAIL;
}

///디바이스 상태 정보를 처리할 경우 여기에서 함

return S_OK;
}

///초기화 된 객체들 소거

VOID Cleanup()
{
if(g_pd3dDevice != NULL)
g_pd3dDevice->Release();
if(g_pD3D != NULL)
g_pD3D->Release();
}

//화면 그리기
VOID Render()
{
if(NULL == g_pd3dDevice)
return;

//후면 버퍼를 파란색으로 지운다.
g_pd3dDevice->Clear(0,NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,255),1.0f,0);

//랜더링 시작
if(SUCCEEDED(g_pd3dDevice->BeginScene()))
{
//실제 랜더링 명령들이 나열될 곳
//랜더링 종료
g_pd3dDevice->EndScene();
}

//후면 버퍼가 보이는 화면으로
g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
}

//윈도우즈 프로시저

LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
Cleanup();
PostQuitMessage(0);
return 0;
case WM_PAINT:
Render();
ValidateRect(hWnd, NULL);
return 0;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}

//프로그램의 시작점
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
string className = "D3D Tutorial";
wstring str2(className.length(), L' '); // Make room for characters

// Copy string to wstring.
copy(className.begin(), className.end(), str2.begin());
//...
//윈도우 클래스 등록
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
(LPCTSTR)"D3D Tutorial", NULL};
RegisterClassEx(&wc);
//윈도우 생성
HWND hWnd = CreateWindow((LPCTSTR)"D3D Tutorial", (LPCTSTR)"CreateDevice",
WS_OVERLAPPEDWINDOW, 100, 100, 600, 480,
GetDesktopWindow(), NULL, wc.hInstance, NULL);
//Direct3D 초기화

if(SUCCEEDED(InitD3D(hWnd)))
{
//윈도우 출력
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
//메시지 루프
MSG msg;
while(GetMessage(&msg, NULL, 0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//등록된 클래스 소거
UnregisterClass((LPCTSTR)"D3D Tutorial", wc.hInstance);
return 0;
}


P.S 창 이름이 한문으로 깨져서 나온다.

이유를 아시는 분은 꼭 댓글로 가려쳐 줬으면 합니다.

이 코드 인터넷 상에 많이 떠도는 데

붙여 넣기가 안되도록 많이 들 막아 놨더군요.

인터넷 세상 공유하면서 삽시다.

2011년 4월 22일 금요일

객체 지향 프로그램(abstract, override)

 이 때까진 막 코딩 ( 인터넷 검색을 통해 필요한 정보를 얻는) 을 통해 생존해 왔다. 이번 학기에 객체 지향 프로그램을 배우면서 이 때 동안 그냥 막 썼던 implement 와 override의 개념에 대해 배우게 되었다. 간단하게 설명할 테니 잘 듣기 바란다. (거만한데..)

 override의 개념은 상속에 근거한다.

 그럼 상속이란 무엇인가? 자바 프로그램 자체가 OOP(Object Oriented Programming) 기법을 따르다 보니 객체 지향적으로 만들어졌다. 여기서 상속이라는 개념은 우리가 흔히 생각 할 수 있는

   사람

남     여

와 같이 상위 개념 아래 하위 개념이 존재하는 관계에서 남, 여는 사람을 상속 받는 다고 정의하게 된다.

 이를 쉽게 알아 보기 위해 IS-A 룰이라는 것이 있다.

" 남자 IS A 사람" (영어 "is"를 생각해라)

 한글로 쓰면 "는 - 이다" 룰 이 되겠다.

 "남자 는 사람이다" 가 성립 하면 남자는 사람을 상속하게 된다.

 마찬가지로 "여자는 사람이다" 가 성립 하므로 여자는 사람을 상속하게 된다.

 자- 이제 상속이 무엇인지 알았을 것이다. 그러면 abstract는 무엇인가?

 이것은 개인적으로 프로그래밍 기법 상 나온 말이라 생각한다.

 컴퓨터 프로그램을 만드는 데 (예를 들어 게임) 남자와 여자 케릭터를 생성하고자 한다.

 근데 이 남, 여 케릭터는 사람을 상속 받는 데 프로그래머가 잘못해서 사람 class 를 생성 할려고 하면 이는 안될 말이다.

 남자, 여자 두 가지 캐릭터가 있어야 하는 데 사람 케릭터라니 중성이란 말인가 머란 말인가!? 이처럼 상속의 개념에서 필요한 class 이지만 절대로 instance 화 되어서는 안되는 class들이 존재하기 마련이다.

 이러한 클래스를 abstact 를 이용해 선언하면 해당 클래스는 "절대" instance화 시킬 수 없다.

 이것이 abstract의 개념이다. 여기서 abstract의 또 한가지 좋은 점은

 abstract로 만들어진 method(즉 함수) 들은 상속 시 반드시 쓰여져야 한다.

 즉, 사람 클래스에 "이름, HP, MP" 세 가지 instance 와 "공격" method 가 있다고 가정하고

이들을 abstract 화 시킨 다면

남자, 여자 클래스는 반드시 위 세 가지 instance 와 한 가지 method를 반드시 포함해서 class 를 만들어야 한다. 그렇기에 반드시 필요한 인스턴스와 메소드를 상위 클래스에 지정해 놓는 다면 프로그래밍 시의 실수를 줄이는 데 많은 도움을 줄 것이다.

 override 란 상위 클래스의 메소드 (예 - 공격) 을 하위 클래스에서 사용하는 것을 말한다.

override를 통해 공격 method를 남자 , 여자는 그 메소드를 부르는 것 만으로 사용할 수 있다.

즉, 코드의 중복을 막을 수 있다.

예)
   사람 - 공격 : 몬스터를 때려잡는다. (라고 프로그램을 만들었다고 치자)

남자 - 공격 ; 여자 - 공격

이처럼 공격 메소드를 넣어 놓기만 하면 "몬스터를 때려잡는다" 라는 명령어는 다시 호출 하지 않아도 알아서 상위 클래스에서 불러 와서 사용할 수 있게 된다.

 남자 와 여자 클래스에서 몬스터를 때려잡는다 외에 다른 어떤 것을 넣고자 할 때

super를 이용하면 가능해진다.

즉-  공격 super(몬스터를 때려잡는다) 를 적은 후 사람을 때려잡는다 라고 적으면

super 가 알아서 상위 메소드를 한 번 부르고 사용자가 지정한 사람을 때려잡는다를 호출하게 된다.

 ----- 이해가 되셨나 모르겠다 ---- 하도 주저리 주저리 떠들어 대서... ㅎㅎ;;

2011년 4월 5일 화요일

directx 9 튜터리얼

#include <d3d9.h>
//-----------------------------------------------------------------------------
// 전역 변수
//-----------------------------------------------------------------------------
LPDIRECT3D9         g_pD3D = NULL;
LPDIRECT3DDEVICE9   g_pd3dDevice = NULL; 
//-----------------------------------------------------------------------------
// Device 생성 및 초기화
//-----------------------------------------------------------------------------
HRESULT InitD3D( HWND hWnd )
{
    if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof( d3dpp ) ); /// 반드시 ZeroMemory로 깨끗이 초기화 해주어야 함
    d3dpp.Windowed = TRUE;  /// 창 모드로 생성
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; /// 가장 효율적인 SWAP 효과
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;  /// 현재 바탕화면 모드에 맞춤

    if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &g_pd3dDevice ) ) )
    {
        return E_FAIL;
    }
    return S_OK;
}
//-----------------------------------------------------------------------------
// Device 해제
//-----------------------------------------------------------------------------
VOID Cleanup()
{
    if( g_pd3dDevice != NULL )
        g_pd3dDevice->Release();
    if( g_pD3D != NULL )
        g_pD3D->Release();
}
//-----------------------------------------------------------------------------
// 랜더링
//-----------------------------------------------------------------------------
VOID Render()
{
    if( NULL == g_pd3dDevice )
        return;
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );

    if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
    {
        g_pd3dDevice->EndScene();
    }

    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

create Directx Object

LPDIRECT3D9 g_pD3D = NULL;
    
if( NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
    return E_FAIL;

#pragma comment()

2. #pragma comment()

#pragma comment()로 사용할 수 있는 명령은 여러 개가 있는데, 그 중 가장 대표적인 것이
#pragma comment(lib, "*.ilb")로 해당 라이브러리를 링크 시켜준다.

예를 들어 VC++6.0에서 DirectDraw를 사용하기 위해서는 Project>>Settings의 Link 탭으로 이동하여
Object/library modules 항목란에 ddraw.lib 와 dxguid.lib를 적어 넣어 lib 파일을 링크해 줘야 한다.

하지만,

#pragma comment(lib, "dxguid.lib")
#pragma comment(lib, "ddraw.lib")
와 같이 소스코드 내에서 명시적으로 지정을 하면, Project>>Settings... 의 과정을 거치지 않고도 라이브러리를
링크할 수 있다.