728x90

출처:http://manfromearth.tistory.com/79


cafe24에 64bit JSP를 신청한 상태여야 한다.


개발용 PC에서 톰캣을 설치할 때 6.0 버전으로 설치하도록 하자. cafe24는 톰캣6.0을 사용하기 때문에 안그러면 cafe24내에서 Java소스 파일을 다시 컴파일해주어야 한다. 본 글에서는 cafe24내에서 컴파일하는 것까지 해보겠다.


이클립스 EE버전에서 완성된 프로젝트를 패키지 익스플로러에서 우클릭하여 익스포트한다. 이때 Web -> WAR file 을 선택하여 접근하도록 한다. 그 다음 다이얼로그에서는 파일이 생성될 경로와 이름 톰캣의 버전을 지정해주는데, 적절한 버전을 지정해주고 적절한 경로르 지정해준다. 단, 파일명은 www.war 로 한다. 파일명은 www 확장자는 war이다.


 putty한글.exe


 FileZilla_3.5.3_win32-setup.exe


그 후 서버에 명령을 내리고 파일을 수월하게 관리하기 위해 putty와 FileZilla를 다운받아 설치하자.


먼저 putty를 이용해 내 서버에 들어가보도록 하자.

yourId부분에는 각자의 cafe24 아이디를 써주자.

그리고 아래쪽에 열기를 클릭하면 cafe24와 연결된다.

연결된 후에 다시 cafe24아이디를 쳐주고 ex:id가 yourId이면 yourId만

그리고 이어서 나오는 패스워드를 쳐준다. 패스워드를 타이핑해도 커서가 이동하지 않기 때문에 커서가 이동하지 않아도 이상하게 생각하지 말고 패스워드를 입력 후 엔터를 쳐주자.

로그인하면 아래화면과 같이 뜬다. 본인의 아이디는 killroad이다.

ls 명령을 타이핑하면 ROOT, tomcat, www라는 3개의 폴더가 보일 것이다.

일단 현재 동작하는 서버를 정지시키자.

정지시키는 명령은 현재 폴더에서

./tomcat/bin/shutdown.sh

이다.

그리고 파일질라를 실행시켜 보자.

위의 처럼 실행 시킨 후 호스트, 사용자명, 비밀번호를 putty에 입력했던 것처럼 입력 후 빠른 연결을 누르면 정상적으로 연결 된다. 파일질라의 우측은 연결된 원격지, 좌측은 로컬을 의미한다.

우측의 원격지에서 ..폴더를 눌러 상위 폴더로 나가면 아까 putty에서 봤던 그 폴더구조가 보일 것이다. 아까 putty에서 봤던 것과는 다르게 3개의 폴더만이 아니라 다른 파일 여러개가 보일 수도 있으나 그냥 놔두어도 무방하다.

아까 추출한 www.war 파일을 좌측 로컬창에서 찾아서 드래그&드랍으로 현재 폴더로 전송시킨다.

위의 사진 우측에 제일 아래 파일을 보면 www.war파일이 전송된 것을 볼 수 있다. 그리고 파일질라에서 www폴더를 지우자. 우리가 만든 www.war파일은 톰캣이 다시 실행되면 자동으로 압축이 풀리며, www폴더를 생성하게 된다. 기존의 www폴더는 필요없기 때문이다.

www.war파일도 전송하고 www폴더도 삭제했으면 이제 putty로 가보자.

putty로 가서 이제 톰캣을 켜보자.

명령창에 입력해라.

./tomcat/bin/startup.sh

이렇게 입력하면 톰캣은 다시 실행되고 www.war파일의 압축이 자동으로 풀리며 www폴더를 만든다.

이러면 완료....이겠지만 만약 war파일을 추출할 때 톰캣 6.0버전이 아니었다면 정상동작하지 않을 것이다. 톰캣 6.0에 맞게 다시 Java파일을 컴파일해주어야 한다. 일단 shutdown.sh로 다시 한번 톰캣을 정시지키자.

파일질라에서 www폴더 -> WEB-INF폴더 -> classes폴더 순으로 들어가보자.

여기에 로컬에서 Java파일을 찾아서 복사해 넣도록 하자. 그 후 putty로 컴파일하면 되는데 컴파일하기 전에 classes폴더보다 더 하위폴더로 들어가서 기존의 class파일을 지워주도록 하자.

그리고 putty도 www폴더 -> WEB-INF폴더 -> classes폴더 로 들어가자.

들어갈때는 cd www 입력 그리고 cd WEB-INF 입력 그리고 cd classes 입력

탭키를 이용하면 자동완성이 되기 때문에 유용하니 자주 써먹자.

classes폴더 내에서 putty로 아래 명령을 입력해주자.

javac -d . -classpath /home/hosting_users/USER_ID/tomcat/lib/servlet-api.jar 자바파일이름.java 

그러면 class파일이 각각의 패키지에 해당하는 폴더에 맞게 자동으로 생성될 것이다. 만약 컴파일할 java파일이 여러개라면 

javac -d . -classpath /home/hosting_users/USER_ID/tomcat/lib/servlet-api.jar 여러개중1.java 여러개중2.java 여러개중3.java 여러개중4.java

처럼 공백으로 구분하고 뒤에 쭉 나열해주면 된다.

그리고 다시 cd.. 명령을 이용해 ROOT,tomcat,www 폴더가 보이는 디렉토리까지 올라간다.

그리고 다시 startup.sh명령을 이용해 톰캣을 실행시켜주면 서버는 정상 동작하게 된다.

글을 작성하다보니 후반부에는 귀차니즘으로 스샷을 거의 안찍고 글로 썼다 -_-;

사진많이올리는 블로거들이 대단해보인다.


아래쪽에 서블릿 맵핑을 하는 스샷을 두개 올리고 끝내야겠다. 이 부분도 처음하면 헷갈리는 부분이니까..





Posted by 앗뜨거
,
728x90

[호스팅] cafe24 Tomcat 재시작 명령어

- putty 프로그램을 다운받아 실행한다.(카페24에가면 있다)

putty.exe




ptty나 telnet으로 접속한 후

-tomcat 정지
./tomcat/bin/shutdown.sh

-tomcat 시작
./tomcat/bin/startup.sh


Posted by 앗뜨거
,
728x90

데이터베이스 리스트 조회

ContextWrapper.databaseList();

ContextWrapper == ConText

 

데이터베이스 삭제

ContextWrapper.deleteDatabase("삭제할 데이터베이스명");

 

예)

if (Arrays.binarySearch(databaseList(), DATABASE_NAME) >= 0) {

   deleteDatabase(DATABASE_NAME);

}

 

어플리케이션내에 데이터베이스 열거나 생성

ContextWrapper.openOrCreateDatabase("데이터베이스명.db", 데이터베이스모드<읽기,쓰기전용 또는 기존에 파일있으면 열어라등.. 모드지정>, 쿼리가호출되는 커서를 선택<커서객체를 만들어 사용할지에입력 그렇지 않으면 null>);

 

예) SQLiteDatabase mydb=openOrCreateDatabase(DATABASE_NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);  조회해보고 없으면 생성해주는 상수값

 

 

데이터베이스 위치 설정

SQLiteDatabase.setLocale(Locale.getDefault()); 

 

데이터베이스 접근권한 설정

SQLiteDatabase.setLockingEnabled(true); 

 

데이터베이스 버전 설정

SQLiteDatabase.setVersion(1);

 

 

데이터베이스 위치 추출

SQLiteDatabase.getPath());

 

데이터베이스 버전

SQLiteDatabase.getVersion();

 

현재 데이터베이스  페이지사이즈

SQLiteDatabase.getPageSize();

 

데이터베이스의 최대크기

SQLiteDatabase.getMaximumSize();

 

데이터베이스가 열려 있는지

SQLiteDatabase.isOpen();

 

 

데이터베이스가 읽기 전용 인지

SQLiteDatabase.isReadOnly();

 

현재 쓰레드에 의해 데이터베이스가 잠겨 있는지

SQLiteDatabase.isDbLockedByCurrentThread();

 

 

쿼리문 실행메서드

SQLiteDatabase.execSQL("쿼리문");

예)

SQLiteDatabase.execSQL("CREATE TABLE tbl_authors (id INTEGER PRIMARY KEY AUTOINCREMENT , firstname TEXT, lastname TEXT);");

 

 

테이블에 데이터를 삽입할 경우

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);       (어디에 필드명)과 ( 데이터) 한묶음으로

//long id = SQLiteDatabase.insert(테이블명, null, ContentValues);

long id  = SQLiteDatabase.insertOrThrow(테이블명, null, ContentValues);

* 두번째 인자에 null을 사용하는 이유 : 완전히 비어있는 행을 허용하지 않기 때문에 세번재 인자값이 null인 경우를 방지

 

예)

ContentValues values = new ContentValues();

values.put("title", newBook.mTitle); => values.put("title", "해리");

values.put("dateadded", newBook.mDateAdded.toLocaleString()); =>values.put("dateadded", "2011-06-23")

values.put("authorid", newBook.mAuthor.mAuthorId);

//long id = SQLiteDatabase.insert(TABLE_BOOK, null, values);

long id  = SQLiteDatabase.insertOrThrow(TABLE_BOOK, null, values); 필요에따라 

SQLiteDatabase.insertOrThrow(TABLE_BOOK, null, values);

 

 

테이블에 데이터를 수정할 경우

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);

SQLiteDatabase.update(테이블명, ContentValues, "조건필드=?", ?를 치환할 문자배열);

 

예)

ContentValues values = new ContentValues();

ContentValues.put("필드명", 데이터);

SQLiteDatabase.update(TABLE_BOOK, values, "id=?", new String[] { bookId.toString() });

 

 

테이블에 데이터를 삭제할 경우

SQLiteDatabase.delete(테이블명, "조건필드=?", ?를 치환할 문자배열);

 

예)

SQLiteDatabase.delete(TABLE_BOOK, "id=?", new String[] { bookId.toString() });

 

 

테이블에 데이터를 조회할 경우

Cursor c = mDatabase.query(테이블명, null, null, null, null, null, null);    select

 

Cursor.getCount(); 조회된 recode의 총갯수

Cursor.getColumnCount(); 조회된 필드 갯수

Cursor.getColumnName(); 이름

Cursor.getPosition(); 현재 커서 포인터위치

Cursor.getString(int columnIndex); 필드값

 

 

커서포인트 위치를 바꿔주는 메서드 처음 (Cursor 위치는 항상 0번 이기에 First를 해줘야함)

Cursor.moveToFirst(); 커서포인터위치를 첫번째 레코드 위치로

Cursor.moveToNext(); 커서포인터위치를 다음 레코드 위치로

Cursor.moveToPrevious();  커서포인터위치를 이전 레코드 위치로

Cursor.moveToLast(); 커서포인터위치를 마지막 레코드위치로

Cursor.moveToPosition(int position); 커서포인터위치를 지정한 레코드 위치로

Cursor.isAfterLast(); 현재 커서포인터위치에서 다음레코드가 있는지 확인  //, 마지막레코드인지 확인 //마지막 레코드이면 true

recode, id값은 무관...

  

public void LogCursorInfo(Cursor c) {

  Log.i(DEBUG_TAG, "*** Cursor Begin *** " + " Results:" + c.getCount() + " Columns: " + c.getColumnCount());

 

  // Print column names

  String rowHeaders = "|| ";

  for (int i = 0; i < c.getColumnCount(); i++) {

     rowHeaders = rowHeaders.concat(c.getColumnName(i) + " || ");

  }

  Log.i(DEBUG_TAG, "COLUMNS " + rowHeaders);

 

  // Print records

  c.moveToFirst();

  while (c.isAfterLast() == false) {

     String rowResults = "|| ";

     for (int i = 0; i < c.getColumnCount(); i++) {

        rowResults = rowResults.concat(c.getString(i) + " || ");

     }

     Log.i(DEBUG_TAG, "Row " + c.getPosition() + ": " + rowResults);

     c.moveToNext();

  }

  Log.i(DEBUG_TAG, "*** Cursor End ***");

}

 

 

예)

Cursor c = mDatabase.query(TABLE_BOOK, null, null, null, null, null, null);

public void LogCursorInfo(Cursor c) {

  Log.i(DEBUG_TAG, "*** Cursor Begin *** " + " Results:" + c.getCount() + " Columns: " + c.getColumnCount());

 

  // Print column names

  String rowHeaders = "|| ";

  for (int i = 0; i < c.getColumnCount(); i++) {

     rowHeaders = rowHeaders.concat(c.getColumnName(i) + " || ");

  }

  Log.i(DEBUG_TAG, "COLUMNS " + rowHeaders);

 

  // Print records

  c.moveToFirst();

  while (c.isAfterLast() == false) {

     String rowResults = "|| ";

     for (int i = 0; i < c.getColumnCount(); i++) {

        rowResults = rowResults.concat(c.getString(i) + " || ");

     }

     Log.i(DEBUG_TAG, "Row " + c.getPosition() + ": " + rowResults);

     c.moveToNext();

  }

  Log.i(DEBUG_TAG, "*** Cursor End ***");

}

 

Date today = new Date(java.lang.System.currentTimeMillis());

Posted by 앗뜨거
,