<<< 파워빌더 7.0 배포파일 목록 >>>

PowerBuilder7.0 Runtime Files : 파워빌더7.0으로 구현된 애플리케이션을 배포할때 필요한
런타임 파일 목록입니다.
PBVM70.DLL : 모든 애플리케이션에 필요
LIBJCC.DLL : 모든 애플리케이션에 필요
PBDWE70.DLL : 데이터윈도우나 데이터스토어를 사용할 경우 필요
PBRTC70.DLL : 데이터윈도우 프리젠테이션 스타일이 리치텍스트(RichText)일 경우 필요
PBAEN70.TLB : 파워빌더 애플리케이션을 사용하는 OLE 오토메이션서버에 필요
PBFNT70.INI : 파워빌더에서 제공되지 않는 폰트를 매핑(Mapping)할 경우 필요
PBLAB70.INI : 데이터윈도우 프리젠테이션 스타일이 레벨일 경우 필요
PBTRA70.DLL : 데이터베이스 연결 트레이싱(tracing)에 사용
설치경로 C:\Program Files\Sybase\Shared\PowerBuilder
Note : 배포할때 개발자는 단지 애플리케이션 구동에 필요한 파일들만을 설치해주면 됩니다.
예를 들어 PBVM70.DLL이나 LIBJCC.DLL은 배포되는 모든 애플리케이션에 필요하지만,
PBRTC70.DLL은 리치텍스트 컨트롤이나 리치텍스트 데이터윈도우를 사용하는 애플리케이션에만
인스톨해 주면 됩니다.

PowerBuilder7.0 Native database drivers : 파워빌더7.0이 제공하는 Native database driver들의
목록들 입니다.
PBIN770.DLL : 인포믹스 I-Net 7
PBIN970.DLL : 인포믹스 I-Net 9
PBMSS70.DLL : 마이크로소프트 SQL 서버 6 and 7
PBO7370.DLL : 오라클 7.3
PBOR870.DLL : 오라클 8.0
PBO8470.DLL : 오라클 8.0.4 와 그 이후 버전들
PBDIR70.DLL : 사이베이스 DirectConnect
PBSYC70.DLL : Sybase Adaptive Server Enterprise CT-LIB
PBSYJ70.DLL : Sybase Adaptive Server Enterprise CT-LIB
(파워빌더 컴포넌트가 재규어 서버에 올라와 있을 때 사용)
설치경로 C:\Program Files\Sybase\Shared\PowerBuilder
Note : 사용자가 파워빌더 커스텀 클래스 유저 오브젝트를 재규어 서버에 올려놓고 사용하고자 할 때는,
PBSYC70.DLL보다는 PBSYJ70.DLL을 사용하여 Adaptive Server Enterprise 데이터베이스에
접속 하십시오. 각각은 데이터베이스 인터페이스 모듈입니다.

PowerBuilder ODBC interface : 다음은 파워빌더7.0과 인포메이커 애플리케이션이,
ODBC를 사용하여 데이터베이스에 접속하고자 할 때 필요한 파일 목록입니다.
PBODB70.DLL : 파워빌더 ODBC 인터페이스
PBODB70.INI : 파워빌더의 ODBC INI(initialization)파일
설치경로 C:\Program Files\Sybase\Shared\PowerBuilder
Note : INI파일과 DLL파일들은 반드시 같은 디렉토리에 위치해야 합니다.

Microsoft ODBC files : 만일 개발된 애플리케이션이 ODBC를 이용하여, 데이터베이스에 접속할 경우,
다음의 마이크로소프트 ODBC 3.5파일들이 필요합니다.
* 마이크로소프트 ODBC 드라이버 관리자와 DLL파일 및 Help파일들입니다.
DS16GT.DLL DS32GT.DLL ODBC32.DLL ODBC32GT.DLL
ODBCAD32.EXE ODBCCP32.CPL ODBCCP32.DLL ODBCCR32.DLL
ODBCINST.CNT ODBCINST.HLP ODBCINT.DLL ODBCTRAC.DLL

설치경로 C:\Windows system directory
Note : 마이크로소프트 ODBC 드라이버 관리자(ODBC32.DLL)와 기타지원 파일들은 보통 윈도우 시스템 디렉토리에
설치되어 있습니다. 만약 이들 파일들의 업데이트가 필요한 경우에는 파워빌더7.0 인스톨CD중
2번CD의 “Support”디렉토리에 있는 MDAC_MIN.EXE Setup파일을 실행시켜 업데이트 하십시요.

Adaptive Server Anywhere files : 만일 여러분이 개발한 PowerBuilder 애플리케이션이 ASA 데이터베이스를 사용한다면,
배포시 ASA의 ODBC 데이터베이스 드라이버와 ASA DBMS를 함께 배포하셔야 합니다.
개발된 애플리케이션이 독립데이터베이스(standalong)를 사용할 경우에는
ASA의 데스크탑 런타임 모듈을 최종 사용자의 PC에 무상으로 배포하실 수 있습니다.
이 런타임 모듈은 사용자가 데이터베이스내에 있는 데이터를 조회하거나 변경하는 것은 허용하나,
데이터베이스의 스키마(schema)를 변경하는 것은 허용되지 않습니다.
또한 트랜젝션 로그(Transaction logs)나 저장 프로시져(Stored procedures),
트리거(Trigger)를 지원하지 않습니다.
ASA(Adaptive Server Anywhere)드라이버와 런타임 엔진 그리고 기타지원 파일들을
모두 인스톨 하실 때는 파워빌더 7.0 인스톨 CD 2번에 있는 “Support”디렉토리에 있는 파일들을 설치 하십시요.

다음 표는 인스톨 CD 2번에 있는 Support > asa6runtime > setup 에서“Common Files”와 “Runtime Server”를
선택하여 인스톨 했을 경우 새로 생성되는 파일목록 입니다.
이밖에도 Help Files과 SQL Anywhere 5.0 compatibility DLLs, 그리고 16bit 애플리케이션이 ASA 데이터베이스에
접속하는 것을 가능하게 해주는 “Client for 16bit Application” 파일들을 인스톨하실 수 있습니다.

* Common Files
DBODBC6.DLL : ASA ODBC 드라이버
DBBACKUP.EXE : ASA 백업(backup) 유틸리티
DBCON6.DLL : 데이터베이스 연결 다이얼로그,최종사용자가 자신의 데이터소스를 새로 만들었거나,
또는 데이터베이스에 접속할 때 User ID나 Password를 필요로 하는 경우 사용.
DBISQL.EXE : Interactive SQL 유틸리티
DBLGEN6.DLL : 특정 언어 라이브러리 (EN은 English버전을 지칭))
DBLIB6.DLL : 인터페이스 라이브러리
DBODTR6.DLL : ODBC 번역기(translator), OEM기반의 애플리케이션이 ANSI Character기반으로변환될 때 필요한 파일
DBTOOL6.DLL : ASA 데이터베이스 도구들
DBUNLOAD.EXE : ASA 언로드(unload) 유틸리티
DBVALID.EXE : ASA 유효성 검증(validation) 유틸리티
--MORE--
* Runtime Server(배포파일)
RTENG6.EXE : 제한적인 용도로 사용되는 런타임 엔진
DBCTRS6.DLL : Performance 유틸리티
DBEXTF6.DLL : 외부(External) 인터페이스
DBSERV6.DLL : 서버 유틸리티
DBWTSP6.DLL : 도구 지원파일(Tools support)
설치경로 C:\Program Files\Sybase\Adaptive Server Anywhere 6.0\win32
Notes : 기타지원 파일들은 반드시 DBODBC6.DLL이 있는 디렉토리에 설치되어야 합니다.

JDBC database interfaces : 다음은 개발된 애플리케이션이 자바 가상머신(virtual machine)을
사용하여 데이터베이스에 접속할 경우 필요한 파일목록 입니다.
물론 이때 자바 가상 머신과, 사이베이스 jConnect 와 같은 vendor에서
제공하는 JDBC-인증 드라이버도 PC에 인스톨되어 있어야 합니다.

PBJDM70.DLL : 마이크로소프트 자바 가상 머신을 위한 파워빌더 JDBC DB드라이버
PBJDS70.DLL : 썬 자바(Sun Java) 가상 머신을 위한 파워빌더 JDBC DB 드라이버
CLASSES.ZIP : 파워빌더 JDBC 드라이버를 위한 자바 팩키지(JDM 와 JDS가 필요)
설치경로 C:\Program Files\Sybase\Shared\PowerBuilder

PowerBuilder component on Jaguar server : 다음은 재규어 서버가 파워빌더로 생성된 컴포넌트들을
사용할 때 필요한 파일 목록입니다.

Note : 만일 파워빌더 컴포넌트가 다음 테이블에 나열된 파일들 중 사용하지 않는 파일이 있다면,
그 파일은 자바 서버에 설치되지 않아도 됩니다.
이 파일들은 Enterprise Application Studio나 파워빌더를 인스톨할 때 Setup타입을 typical이나
custom으로 선택하시면 기본적으로 인스톨됩니다.
만약 이 파일들이 재규어 서버에 설치되어 있지 않다면, Setup타입에서 custom을 선택하시고,
다시 “PowerBuilder Runtime”을 선택하셔서 재규어를 재 인스톨 하십시요.

PBVM70.DLL 파워빌더 가상머신 (모든 파워빌더 컴포넌트에 필요)
LIBJCC.DLL PBVM70.DLL에 필요한 파일
PBDWE70.DLL 데이터스토어(DataStore) 지원파일
PBDWR70.PBD HTML 데이터윈도우 지원파일( PBDWE70.DLL에 필요한 파일)
PBJAG70.DLL 재규어에서 파워빌더를 지원하는 파일
PBRTC70.DLL 리치텍스트(RichText) 지원 파일
PBO7370.DLL 오라클 7.3 데이터베이스 드라이버
PBO8470.DLL 오라클 8.0.4와 그 이후버전 드라이버
PBODB70.INI 파워빌더 ODBC INI(initialization) 파일
PBODB70.DLL 파워빌더 ODBC 인터페이스
PBSYJ70.DLL Adaptive Server Enterprise의 native database인터페이스
PBJDS70.DLL 썬 자바 가상머신을 위한 JDBC 데이터베이스 드라이버
CLASSES.ZIP 파워빌더 JDBC 드라이버를 위한 자바 팩키지(JDS에 필요)

설치경로 C:\Program Files\Sybase\Shared\PowerBuilder

HTML DataWindow on Jaguar server : 여러분은 파워다이나모(PowerDynamo)를 애플리케이션
서버로 사용하여 재규어서버 위에HTML 데이터 윈도우을 실행시킬 수 있습니다.
이때 두 가지 타입의 파일들이 재규어 서버에 필요합니다.
데이터윈도우 오브젝트들의 정의를 포함하고 있는 PBLs와 PBDs. 파워빌더 런타임 파일들
(PBVM70.DLL, PBJAG70.DLL, PBDWE70.DLL) 과 데이터윈도우의 HTMLGenerator 컴포넌트를
실행시켜주는 PBDWR70.PBD파일. 또한 파워다이나모를 애플리케이션 서버로 사용하고,
자바를 이용하여 재규어 컴포넌트에 접속하기 위해서는 파워다이나모 서버에 다음 파일들이
필요합니다.

HTML pages, templates, scrips : 만일 개발자가 이들 파일들을 생성하기 위해서 파워사이트
(PowerSite)를 사용했다면, 파워다이나모에 이들 파일들을
인스톨하기 위해 파워사이트 deployment controller를 사용하실 수
있습니다.

Jaguar client software for Java : 다음 파일이 파워다이나모 서버에 필요합니다.
JAGCLIENT.ZIP : 클라이언트에 필요한 자바 클래스(Java classes) 만일 재규어가 파워다이나모와
같은 PC내에 설치되어 있다면JAGCLIENT.ZIP 은 Sybase\Shared\Jaguar CTS 3.0
디렉토리에 존재할 것입니다. 그러나 JAGCLIENT.ZIP이 인스톨되어 있지 않다면
Jaguar CTS 3.0 \Client 디렉토리에서 JAGCLIENT.EXE를 Copy하여 파워다이나모
서버에 같다 놓으신후 JAGCLIENT.EXE를 실행시키십시오.
그리고 Java Runtime을 선택 하시면 됩니다.

<<< 파워빌더 8.0 배포파일 목록 >>>
7.0과 동일합니다만 8.0.3 버전 이상은 " libsybheap.dll" 도 함께 배포하셔야 합니다.

<<< 파워빌더 9.0 배포파일 목록 >>>
1. PowerBuilder runtime files : 기본 PowerBuilder runtime files
PBVM90.DLL : 모든 곳에 필요
LIBJCC.DLL : PBVM90.DLL 이 참조한다
PBHeapXX.dll : PBVM90.DLL 이 참조한다 .heap memory 관리
PBDWE90.DLL : DataWindows 나 DataStore를 사용 했을 때 작성한 application 에 따라 필요한 추가
적인 runtime files 예를 들어서, PBVM90.DLL모든 deployed applications에
들어가지만, PBRTC90.DLL은Rich Text controls 이나 RichText DataWindow objects
들을 사용했을 경우에만 필요로 한다. deploying applications 에서 Java support 를
사용 한다면, 그것에 대한 더 많은 정보를 얻기 위해서 PBJVM90.DLL 사용한다

추가적인 PowerBuilder runtime filesName 필요 할 때
PBDWR90.DLL PBDWRE90.PBD : Web DataWindow 사용했을 때
PBXerces90.DLL xerces-c_1_5_1.dll : DataWindows and DataStores 에서XML 사용했을 경우
PBJVM90.DLL : Java 사용했을 경우
PBRTC90.DLL : Rich Text 사용했을 경우
PBLAB90.INI : Label DataWindow presentation-style 사용했을 경우
PBTRA90.DLL : Database connection tracing 사용했을 경우
Installed 경로 \Program Files\Sybase\Shared\PowerBuilder
Deployment 경로 application과 같은 디렉토리 , system path 에 있는 directory

2. 사용 DB에 따른 필요한 파일
Informix 7 : pbin790.dll
Informix 9 : pbin990.dll
Ms-Sql : pbmss90.dll
Oracle 7i : pbo7490.dll
Oracle 8i : pbo8490.dll
Oracle 9i : pbo9090.dll
Sybase : pbsyc90.dll

3. PowerBuilder extensions : PowerBuilder 9.0 은 3가지 확장기능을 제공한다.
만약 당신이 이 세 가지중 한가지라도 사용하면 deploy 를 할 때
아래의 표에 나타나 있는 것을 포함시켜야 한다.

* PowerBuilder 확장기능 - 필요한 파일
PowerBuilder Document Object Model : PBDOM90.DLL PBXerces90.DLL xerces-c_1_5_1.dll
EJB client : pbejbclient90.dll pbejbclient90.jar

SOAP client for Web services : EasySoap.DLL ExPat.dll libeay32.dll ssleay32.dll bsoapclient90.dll
EJB Client를 사용 하기 위한 파일 들은 , EJB server 에 있는 JDK 와 호환 가능한Java Runtime
Environment(JRE)는 반드시 Client 에 available 하고 CLASSPATH 의 목록에 나열되어져 있어야
한다. Sun JRE version 1.4 는 PowerBuilder CD에 Support directory 나타나 있다.

Note : JRE는 당신이 EJB 클라이언트를 선택할 때 Runtime Packager 에 의해 생성된 MSI 파일에
더해지지 않습니다.

4. PDF and XSL-FO export
PowerBuilder는 데이터윈도우의 데이터와 프리젠테이션을 두 가지 방법으로 PDF file로 저장할 수
있다. 기본으로 PowerBuilder는 PDF로 distiller를 이용하여 저장할 수 있다. PowerBuilder는 또한 Apache XML Formatting Objects processor를 사용하여 PDF 또는 XSL Formatting Objects
(XSL-FO) format 으로 저장할 수 있다.

distiller사용 : GNU Ghostscript를 이용하여 PDF로 저장하기 위해서, Ghostscript 파일들은
PowerBuilder와 함께Sybase\Shared\PowerBuilder\gs7.05에 설치되어야 한다 .
기본 PostScript printer driver와 관련 파일 등은 Sybase\Shared\PowerBuilder\drivers에
설치되어야 한다.

distill 방법을 이용하여 PDF로 저장하는 기능을 사용하는 어플리케이션을 배포할 때, gs7.05디렉토리와
드라이버 디렉토리들을 pbdwe90.dll runtime file 과 같은 디렉토리에 배포해야 한다.
예를 들어 어플리케이션과 pbdwe90.dl과 다른 PowerBuilder runtime file들을 MyApplication이라는
디렉토리에 배포했다면, Ghostscript file들은 MyApplication\gs7.05에 배포되어야 한다.
그리고 기본 PostScript printer driver와 관련 파일들은 MyApplication\drivers에 배포되어야 한다.
배포를 위해서 제공되는 모든 폰트들을 다 배포할 필요는 없다.

Apache FO processor 사용하기 : 어플리케이션이 PDF or XSL-FO로 저장하기 위해 Apache processor를 사용한다면, 어플리케이션과 함께 fop-0.20.4 directory 와 Java Runtime Environment
(JRE) 를 배포해야 한다. 이 디렉토리들은 CD의 Support directory에 zip files로 되어 있다.

PowerBuilder runtime files들과 같은 디렉토리에 배포되어야 한다.
예를 들어, 만약 application과 pbvm90.dll 그리고 다른 PowerBuilder runtime file들이 MyApplication이라는 디렉토리에 배포되었다면,
Apache processor 와 JRE는 MyApplication/fop-0.20.4 과 MyApplication/jre에 배포되어야 한다.
하지만, 만약 대상 컴퓨터에 JDK가 full로 깔려있고 classpath.에 잡혀있다면 JRE를 복사할 필요는
없다. Windows DBCS 플랫폼에서 는, DBCS characters 를 지원하는 파일을 해당 컴퓨터의
Windows font directory에 배포할 필요가 있다. C:\WINNT\fonts.
[[ JavaScript 풍선도움말 사용하기  from Naver Blog 여우와구름 ]]

<SCRIPT LANGUAGE="JavaScript">
<!--

function msgmove(){
msg.style.posLeft = event.x + 20 + document.body.scrollLeft
msg.style.posTop = event.y - 20 + document.body.scrollTop
}

function msgset(strmsg){
text ='<table  width=240  bgcolor=#FFFFCC style="border:1 black solid;"><tr><td>' + strmsg + '</td></tr></table>'
msg.innerHTML=text
}

function msghide(){
msg.innerHTML=''
}
//-->
</SCRIPT>


<A HREF="#" onmousemove="msgmove()" onmouseover="msgset('풍선도움말');return true;"  onmouseout="msghide();return true;">[보기]</A>


<div id="msg" style="position:absolute;left:0;top:0;width:0;height:0;"></div>
인터넷을 통해 다른 네트웍에 있는 컴터를 제어할 때 사용하는 유용한 프로그램 중에 VNC 라는게 있다.
PC AnyWhere 같은 기능인데 Free인데가 사용하기도 편하고 기능도 아주 좋다.

보통은 그걸 그냥 Windows 에서만 사용하는데 그 VNC의 또다른 아주 유용한 기능은 바로 리눅스, 유닉스 서버에 대해서도 인터넷을 통해 관리가 가능하다는 점이다.
리눅스나 유닉스 서버에 이걸 설치해 놓으면 일부러 텔넷을 통해 들어가지 않아도 웹상에서 서버에 직접 접속한 것 같이 제어가 가능하다.

다만 주의할 것은 아무래도 웹에서 볼 수 있도록 포트를 열어주는 것이니 패스워드가 새나가지 않도록 해야 한다는데 있다.
그것만 신경쓴다면 아주 유용하게, 편하게 서버관리가 가능하다.



설치 및 사용방법
--------------------------------------------------
1. VNC Solaris 또는 Linux용을 다운받는다
      첨부화일은 솔라리스용 화일.

2. tar xvfP vnc_solaris.tar  
      tar화일 안의 디렉토리를 지켜주어야 한다.
      잘 안될 경우 일단 압축을 풀고 수동으로 설정해준다.

3. vncserver
  - 암호 등록
      서버의 암호와는 다른 vnc에서 사용되는 암호등록

4. vncserver
   서버실행하면 Display번호가 나타난다. 기본 설정상
   보통 "1" 로 나타난다.

5. 브라우저에서  http://서버이름:5801
   -포트번호 방식은  5800 + Display번호

* 유닉스 상에서 PC를 불러작업하고자할 때는 PC에 vncserver를 실행해놓고
유닉스에서  " viewer  PC의 IP" 명령 실행

* 암호 변경을 원할시에는 vncpasswd

* VNC Kill    :   vncserver  -kill  :디스플레이번호
                ex) vncserver  -kill :1
from Naver 지식검색_____________________________________


잘 아시겠지만, layer는 화면 어디에나 위치시킬 수 있죠..

그런데, layer 위치가 select 위에 올 때는

select가 가려지질 않고..

항상 layer 위쪽에 나타납니다.

이런 문제 해결책을 알고 계신분 계신가요?

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

레이어와 Select Box는 자주 충돌하는 관계로 디자이너에게는 항상 골칫거리죠.
이 경우에는 해당 Select Box를 Div 태그로 묶어

자바스크립트로 레이어가 나타나면 Select Box가 들어있는 DIV를 숨겨주고
레이어가 사라지면 다시 나타나게 해주면 해결됩니다.

function layershow() {
document.all.menu.style.visibility = "visible";
document.all.selbox.style.visibility = "hidden";
}

function layerhide() {
document.all.menu.style.visibility = "hidden";
document.all.selbox.style.visibility = "visible";
}
이런 식이죠...

구체적인 소스는...
----------------------------------------------------

<html>
<head>
<title>Select Box와 Layer의 충돌막기</title>
  <style type=text/css>
  body {font-family:굴림; font-size:9pt;}
  </style>
<script language="javascript">
<!--
function layershow() {
document.all.menu.style.visibility = "visible";
document.all.selbox.style.visibility = "hidden";
}

function layerhide() {
document.all.menu.style.visibility = "hidden";
document.all.selbox.style.visibility = "visible";
}
//-->
</script>
</head>
<body>

<!-- 레이어 정의 시작 -->
<div id=menu style="position:absolute;top:28;left:0;width:480;height:80px;background-color:#F0F0F0;visibility:hidden;">
<br><a href="javascript:layerhide()"> ▶서브메뉴해제. 선택상자가 나타납니다.</a><br>
</div>
<!-- 본문 시작 -->
----------- 상단메뉴 ------------------<br><br>
<a href="javascript:layershow()">▶서브메뉴선택. 선택상자가 사라집니다.</a>
<form name=form01>
<div id=selbox style="visibility:visible">
<select name=list01>
<option value='http://www.naver.com'>네이버</option>
<option value='http://www.daum.net'>다음</option>
</select>
</div>
</form>
</body>
</html>
<script language=javascript>
<!--
document.write("<iframe src='http://lcs.naver.com/u{"+document.URL+"}' width=0 height=0 frameborder=0></iframe>");
//-->
</script>

제가 지금 하고 있는 프로젝트의 한 부분으로 구현한 것입니다.
레이어(DIV)를 이용하여 글상자, 라디오박스, Select 박스 등의 여러 구성요소들을 특정하게 지정된 영역에서만 움직이도록 하는 구현 예입니다.

아래 예제를 보면 자바스크립트가 핵심입니다. 설명을 간단하게나마 붙여놨으니 쉽게 이해하실수 있을 것입니다.

by itislord ( http://www.janghwan2.pe.kr )
----------------------------------------------------------------------------------------------------

<head>
<title>:::::: </title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
</head>


<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">


<SCRIPT LANGUAGE=JAVASCRIPT>


var dragapproved=false;
var z,x,y;
var l1,l2,t1,t2;


function move(){
   if (event.button==1&&dragapproved){                  //event.button==1 마우스 버튼 왼쪽 눌렀을 때
        z.style.pixelLeft=temp1+event.clientX-x;
        z.style.pixelTop=temp2+event.clientY-y;
    
  if(z.style.pixelLeft<l1||z.style.pixelLeft>(l2-100)||z.style.pixelTop<t1||z.style.pixelTop>t2) {
   z.style.pixelLeft = temp1;
   z.style.pixelTop = temp2;
  }
  return false;
   }
}
function drags(left1,top1,left2,top2){
   l1=left1,l2=left2,t1=top1,t2=top2;  //현재 DIV 상위의 DIV로부터의 left, top 거리
   if (!document.all)
   return
   if (event.srcElement.className=="drag"){
   dragapproved=true;
   z=event.srcElement;
   temp1=z.style.pixelLeft;  //활성창 기준점에서 레이어 시작점 x좌표, 기준점은 현 DIV 상위의 DIV를 기준으로 함, 상위 DIV가 없을 때는 해당 활성창을 기준으로 함
   temp2=z.style.pixelTop;   //활성창 기준점에서 레이어 시작점 y좌표
   x=event.clientX;     //활성창 기준점에서 마우스로 찍은 레이어 x좌표
   y=event.clientY;     //활성창 기준점에서 마우스로 찍은 레이어 y좌표
   document.onmousemove=move;
   }
}
//document.onmousedown=drags;
document.onmouseup= new Function("dragapproved=false");
</SCRIPT>


<table width="960" border="0" cellspacing="0" cellpadding="0">
<tr>
 <td align=center>


<div id=A1 style="position:absolute; border:1px dotted #D0D0D0; padding:2; left:10px; top:10px; height:200; width:500px; visibility:show; z-index:1; cursor:hand;" class="drag">
<div id=L1 style="position: absolute; border:1px dotted #D0D0D0; padding:2; height:30; left:40px; top:50px;  visibility:show; z-index:100; cursor:hand;" class="drag" onMousedown="drags(0,0,500,170)">
<table border=0 cellspacing=0 bordercolordark="white" bordercolorlight="silver" bordercolor="silver">
<tr height=25>
 <td width=100 align=left>&nbsp;아이디</td>
 <td align=left>
  <input type="text"  name=COL1 value="1" size=10 READONLY  style='background:#F0F0F0'>
 </td>
</tr>
</table>
</div>
<div id=L2 style="position: absolute; border:1px dotted #D0D0D0; padding:2; height:30; left:40px; top:100px;  visibility:show; z-index:100; cursor:hand;" class="drag" onMousedown="drags(0,0,500,170)">
<table border=0 cellspacing=0 bordercolordark="white" bordercolorlight="silver" bordercolor="silver">
<tr height=25>
 <td width=100 align=left>&nbsp;테이블이름</td>
 <td align=left>
  <input type="text"  name=COL2 value="학번" size=10 READONLY>
 </td>
</tr>
</table>
</div>
</div>


<div id=A2 style="position:absolute; border:1px dotted #D0D0D0; padding:2; left:10px; top:300px; height:150; width:500px; visibility:show; z-index:1; cursor:hand;" class="drag">
<div id=L3 style="position: absolute; border:1px dotted #D0D0D0; padding:2; height:30; left:40px; top:50px;  visibility:show; z-index:100; cursor:hand;" class="drag" onMousedown="drags(0,0,500,120)">
<table border=0 cellspacing=0 bordercolordark="white" bordercolorlight="silver" bordercolor="silver">
<tr height=25>
 <td width=100 align=left>&nbsp;테이블이름</td>
 <td align=left>
  <input type="text"  name=COL2 value="학번" size=10 READONLY>
 </td>
</tr>
</table>
</div>
</div>


<div id=A3 style="position:absolute; border:1px dotted #D0D0D0; padding:2; left:10px; top:500px; height:150; width:500px; visibility:show; z-index:1; cursor:hand;" class="drag">
<div id=L4 style="position: absolute; border:1px dotted #D0D0D0; padding:2; height:30; left:40px; top:50px;  visibility:show; z-index:100; cursor:hand;" class="drag" onMousedown="drags(0,0,500,120)">
<table border=0 cellspacing=0 bordercolordark="white" bordercolorlight="silver" bordercolor="silver">
<tr height=25>
 <td width=100 align=left>&nbsp;테이블설명</td>
 <td align=left>
  <input type="radio" name=COL value=temp >
 </td>
</tr>
</table>
</div>
</div>


</td>
</tr>
</table>


</body>
</html>

스크롤바를 내가 원하는 형식으로 바꿔서 사용하면 얼마나 재미있을까?


스크롤바의 위, 아래 화살표를 임의로 바꿔 사용하는 것은 생각보다 그리 어렵지가 않다. 글상자 하단에 스크롤바 위, 아래 화살표를 만든 다음 예제를 살펴보자. 마우스로 '위' '아래' 화살표에 커서를 갖다 대면 자동으로 스크롤-업, 스크롤-다운하는 것을 볼 수 있을 것이다. (인터넷 익스플로러와 넷스케이프 6 이상에서 사용할 수 있음)


이 예제에서는 글 상자를 만들기 위해 <div> 태그를 사용하였다. 글 내용을 담을 컨테이너 역할을 할 div와 콘텐츠 자체를 담을 div를 각각 따로 설정하였다. 우선 글 상자가 들어가는 부분에 대한 소스코드를 보자.









<div id="myContainer" style="position:relative;width:420px;height:160px;border:1px dotted black;overflow:hidden">

<div id="myContent" style="position:absolute;width:380px;left:20;top:20">

 

<!--원하는 콘텐츠를 삽입하는 공간-->

<p>진정한 유머는 독서와 사색을 통해 쌓은 교양과 자신의 삶을 관조할 수 있는 여유에서 나오는 것 같습니다.</p>

 

<p>'유머가 있는 사람'과 '웃기는 이야기를 많이 아는 사람'은 다르다고 합니다.

인터넷 사이트나 유머 책자에 있는 짧은 우스운 글들을 여러개 외우고 있다고해서 그를 유머가 풍부하다고 하지는 않는다는 얘기

요.</p>

 

<p>유교 문화속에서 엄숙주의가 지배했던 한국사회도, 어느새 유머가 리더의 중요한 자질중의 하나로 간주되는, 그런 분위기로 바뀌고

있습니다.

크던 작던 한 조직의 리더가 되려면 유머감각을 갖추려는 노력을 해야하는 상황입니다.</p>

 

<p>저는 레이건을 그의 정책이나 이념을 떠나서 개인적으로 대단한 사람이라고 생각합니다.

저격범 힝클리의 총에 맞아 쓰러진 급박한 상황.

생명을 잃을 수도 있는 그 상황에서, 수술실로 들어가면서 의사들에게 유머를 구사할 수 있는 '여유'가 그에게는 있었습니다.</p>

 

<p>공화당 출신의 대통령이었던 그는 그 위급한 상황에서도 의사들에게 "당신들 설마 민주당원은 아니겠지?"라고 조크를 던졌습

다.</p>

 

<!--콘텐츠 삽입 끝-->

</div>

</div>



위 소스코드를 보면 myContainer 객체의 overflow 속성을 hidden으로 줬다. 그 이유는 글 내용이 글 상자의 영역을 벗어날 경우 글 내용이 보이지 않게 하기 위해서다.


스크롤바의 위, 아래 화살표 부분에 대한 소스코드는 다음과 같다.









<div style="width:420px;text-align:right">

<a href="#" onMouseover="moveup()" onMouseout="clearTimeout(moveupvar)">

<img src="scrollUp.gif" border=0></a>  

<a href="#" onMouseover="movedown()" onMouseout="clearTimeout(movedownvar)">

<img src="scrollDown.gif" border=0></a>

</div>



스크롤바 위, 아래 화살표 이미지는 임의로 자신이 만든 것을 사용해도 상관없다. 이 이미지에 대한 링크 이벤트에서 onMouseover와 onMouseout 이벤트에 각각 사용자 함수를 할당하였다.


이제 이 함수를 비록한 자바스크립트 코드를 살펴 보자.









<script language="JavaScript1.2">


//스크롤 속도 (이 값이 크면 클 수록 속도가 빠름)

var speed=5


var objContent=document.getElementById? document.getElementById("myContent") : document.all.myContent

var objContentHeight=objContent.offsetHeight

 

function movedown(){

        if (parseInt(objContent.style.top)>=(objContentHeight*(-1)+100))

            objContent.style.top=parseInt(objContent.style.top)-speed+"px"

            

        movedownvar=setTimeout("movedown()",20)

}

 

function moveup(){

        if (parseInt(objContent.style.top)<=0)

            objContent.style.top=parseInt(objContent.style.top)+speed+"px"

            

        moveupvar=setTimeout("moveup()",20)

}

 

function getContentHeight(){

        objContentHeight=objContent.offsetHeight

}

 

window.onload=getContentHeight

</script>



위 화살표에 마우스를 갖다 대면 moveup() 함수가, 아래 화살표에 마우스를 갖다 대면 movedown()함수가 실행된다. 마우스를 갖다 대는 동안 자동으로 스크롤이 될 수 있도록 setTimeout() 함수를 이용하여 자동 함수 호출이 되게 했다. movedown()과 moveup() 함수의 기능은 콘텐츠 영역(myContent 객체)의 위치를 위 아래로 이동 시켜주는 역할이다. 이 때 이동 폭을 사용자가 조정할 수 있도록 speed란 변수를 두어 그 변수 값 만큼 이동하게 되어있다.


자신의 환경에 맞게 배경색, 글상자의 폭, 스크롤 폭, 위/아래 화살표 이미지 등을 조절하여 사용하면 멋진 결과를 얻을 수 있을 것이다. 아래 스크립트 실행 창에서 해당 소스 코드를 수정하여 다양한 테스트를 해보기 바란다.


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

<html>

<HEAD>

</HEAD>


<BODY>

<script type="text/javascript">

//스크롤 속도 (이 값이 크면 클 수록 속도가 빠름)

var speed=5

</script>


<div id="myContainer" style="position:relative;width:420px;height:160px;border:1px dotted black;overflow:hidden">

<div id="myContent" style="position:absolute;width:380px;left:20;top:20">


<!--원하는 콘텐츠를 삽입하는 공간-->

<p>진정한 유머는 독서와 사색을 통해 쌓은 교양과 자신의 삶을 관조할 수 있는 여유에서 나오는 것 같습니다.</p>


<p>'유머가 있는 사람'과 '웃기는 이야기를 많이 아는 사람'은 다르다고 합니다.

인터넷 사이트나 유머 책자에 있는 짧은 우스운 글들을 여러개 외우고 있다고해서 그를 유머가 풍부하다고 하지는 않는다는 얘기지요.</p>


<p>유교 문화속에서 엄숙주의가 지배했던 한국사회도, 어느새 유머가 리더의 중요한 자질중의 하나로 간주되는, 그런 분위기로 바뀌고 있습니다.

크던 작던 한 조직의 리더가 되려면 유머감각을 갖추려는 노력을 해야하는 상황입니다.</p>


<p>저는 레이건을 그의 정책이나 이념을 떠나서 개인적으로 대단한 사람이라고 생각합니다.

저격범 힝클리의 총에 맞아 쓰러진 급박한 상황.

생명을 잃을 수도 있는 그 상황에서, 수술실로 들어가면서 의사들에게 유머를 구사할 수 있는 '여유'가 그에게는 있었습니다.</p>


<p>공화당 출신의 대통령이었던 그는 그 위급한 상황에서도 의사들에게 "당신들 설마 민주당원은 아니겠지?"라고 조크를 던졌습니다.</p>


<!--콘텐츠 삽입 끝-->

</div>

</div>


<div style="width:420px;text-align:right">

<a href="#" onMouseover="moveup()" onMouseout="clearTimeout(moveupvar)"><img

src="http://korea.internet.com/images/scrollUp.gif" border=0></a>  <a href="#" onMouseover="movedown()"

onMouseout="clearTimeout(movedownvar)"><img src="http://korea.internet.com/images/scrollDown.gif" border=0></a></div>


<script language="JavaScript1.2">

var objContent=document.getElementById? document.getElementById("myContent") : document.all.myContent

var objContentHeight=objContent.offsetHeight


function movedown(){

 if (parseInt(objContent.style.top)>=(objContentHeight*(-1)+100))

     objContent.style.top=parseInt(objContent.style.top)-speed+"px"

    

 movedownvar=setTimeout("movedown()",20)

}


function moveup(){

 if (parseInt(objContent.style.top)<=0)

     objContent.style.top=parseInt(objContent.style.top)+speed+"px"

    

 moveupvar=setTimeout("moveup()",20)

}


function getContentHeight(){

 objContentHeight=objContent.offsetHeight

}


window.onload=getContentHeight

</script>

</body>

</html>

select * from all_users  ;
  - 모든 유저 정보 검색

create user test identified by test1 default tablespace user_data;
  - 암호 test1 이고 사용할 테이블은 user_data 인 유저 test를 생성

alter user test identified by testtest;
  - test 유저의 암호를 testtest로 변경

connect sys/tmxbeldh;
  - 암호가 tmxbeldh인 sys 유저에 접속

grant connect to itislord;
  - itislord 유저에게 연결 권한 부여 (이 명령은 먼저 sys로 접속하고
                                      난 후 실행해야 함 )
drop user test;
  - test 유저를 삭제 ( 테이블을 소유하고 있어 삭제가 않될 경우에는
                       뒤에  "cascade"를 사용하면 같이 삭제됨 -주의)
edit test
  - test라는 이름의 sql문서를 notepad에서 작업하게 열어줌
  - 화일로 있는 sql문장을 열때는 " @ test " or " start test " 사용

desc test
  - test 테이블의 현재 상태를 표시

"L 2"      - 바로전 실행한 2번째 명령줄  표시
"C/job/mgr - "l"로 먼저 선택된 행의 단어중 job을 mgr로 변경
"del"      - "l"로 먼저 선택된 행을 삭제
"A emp"    - "l"로 먼저 선택된 행 마지막에 emp추가
"I test"   - 현재 작업 중인 행 뒤에 한행 추가

산술 함수

함   수                  내           용

 ABS (n)                 n의 절대값
 CEIL (n)                n보다 크거나 같은 최소정수
 COS (n)                 n의 cosine값
 COSH (n)                n의 hyperbolic cosine값
 EXP (n)                 e(2.71828183...)의 n 지수승
 FLOOR (n)               n보다 작거나 같은 최대정수
 LN (n)                  n(>0)의 자연로그
 LOG (m,n)               m의 n로그
 MOD (m,n)               m을 n으로 나눈 나머지
 POWER (m,n)             m의 n 지수승
 ROUND (n[,m])           소수점 m자리에서 반올림 ; m이 생략된 경우 default 값 0
 SIGN (n)                n < 0 이면 -1, n = 0 이면 0, n > 0 이면 1
 SIN (n)                 n 의 sine값
 SINH (n)                n의 hyperbolic sine값
 SQRT (n)                n 의 root 근 
 TAN (n)                 n의 tangent
 TANH (n)                n의 hyperbolic tangent값
 TRUNC (n[,m])           소수점 m자리에서 절삭 ; m이 생략된 경우 default 값 0
 nvl(col명, 값)           column값이 null값일 때, 값을 가진다.



☞ ROUND와 TRUNC 함수

 ● ROUND(45.923,   2)           →  45.92
 ● ROUND(45.923,  0)            →  46
 ● ROUND(45.923, -1)           →  50
 ● TRUNC(45.923,   2)           →  45.92
 ● TRUNC(45.923,   0)           →  45
 ● TRUNC(45.923,  -1)          →  40



 ▶ TRUNC와 ROUND함수는 argument가 있어야 한다.
 ▶ 두 번째 argument값이 없거나 0이면 결과값은 소숫점이 없는 형태로 나타나게 된다.
 ▶ 두 번째 argument의 값이 음수이면 해당 수만큼 좌측으로 절삭 또는 반올림한다.


※ Note : ROUND와 TRUNC 함수는 날짜 함수와 같이 쓰여질 수 있다.

1. 한글 설정   

oracle 계정의 .bash_profile의 NLS_LANG 환경변수를 설정한 다음 아래의 글을 참고...

export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
위와 같이 환경변수가 설정되었다면 이제 DBMS의 CHARACTERSET CODE를 조회해 봐야 합니다.

oracle로 로그인
svrmgrl을 실행
SVRMGR>프롬프트 상에서 connect internal 이라고 입력

myhost% svrmgrl

Oracle Server Manager Release 2.3.2.0.0 - Production

Copyright (c) Oracle Corporation 1994, 1995. All rights reserved.

Oracle7 Server Release 7.3.2.1.0 - Production Release
With the distributed, replication and parallel query options
PL/SQL Release 2.3.2.0.0 - Production

SVRMGR> connect internal
Connected.
SVRMGR> select name, value$ from props$ where name like 'NLS%';
조회 결과가
name                              value$
=====================================================
NLS_CHARACTERSET     KO16KSC5601

이라면 별 문제가 없겠지만 아니라면 심각한 고민을 하셔야 합니다.
코드를 바꿀수는 있지만 바꿀 경우 기존의 data의 한글이
제대로 보이지 않는 결과가 발생합니다.
새로 인스톨한 경우이거나 이전의 데이터를 무시할 수 있는 경우라면
다음의 sql을 실행합니다.
SVRMGR> update props$ set value$='KO16KSC5601'  
    where name = 'NLS_CHARACTERSET';
SVRMGR> commit;

그 다음 DBMS를 shutdown/startup을 합니다.
SVRMGR> shutdown
SVRMGR> startup



2. 환경변수 설정

oracle이 해야할 일   

.profile 생성
oracle 로 접속하여 다음과 같이 .profile을 만든다.
RedHat에서는 .bash_profile 이다.

export ORACLE_HOME=/oracle/app/oracle/product/8.0.5
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jdbc/lib
export ORACLE_SID=sid
export ORACLE_TERM=386
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=$PATH:$ORACLE_HOME/bin
export TMPDIR=/tmp
export CLASSPATH=$ORACLE_HOME/jdbc/lib/classes111.zip
umask 022
위의 경우는 "root 작업 1"의 "Create Mount Points"에서 이야기한 오라클을 설치할 경로로 /oracle인 경우이다.

ORACLE_HOME : 오라클을 /oracle에 설치하기로 하였으므로 /oracle/app/oracle/product/8.0.5 로 지정된다.
LD_LIBRARY_PATH : 오라클의 동적/정적 라이브러리의 경로를 나타내는 환경변수로 Pro*C나 PHP등을 사용할때 중요하게 적용된다.
ORACLE_SID : 오라클 인스턴스의 이름이다. 영문자로 3-4글자로 정해주면된다. (지금 SID 명명규칙이 정확히 기억나지 않는데 아마 이 규칙을 맞추지 않으면 에러가 발생하는 것으로 알고 있다.)

그 외의 환경변수는 예제에 나와 있는 데로 하면 된다.

지역언어설정 환경변수 NLS_LANG은 모든 인스톨이 끝나고 설정하면 된다. 지금 단계에서는 설정하지 말고 주석처리하도록 한다.

환경변수 갱신
위와 같이 .profile내용을 변경하였다면
$ . .profile
을 실행하여 환경변수 내용을 업데이트한다.
또는 oracle계정으로 다시 로그인한다



3. 암호변경

오라클 관리자 암호 변경   


예를 들어 SYSTEM의 암호는 abc, SYS는 123로 바꾸기로 했다면 다음과 같은 과정으로 암호를 변경한다.

로그인
  
[oracle@mine bin]$ sqlplus [Enter]

SQL*Plus: Release 8.0.5.0.0 - Production on Thu Oct 22 10:41:36 1998

(c) Copyright 1998 Oracle Corporation.  All rights reserved.

Enter user-name: system[Enter]
Enter password: manager[Enter]

Connected to:
Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production

SQL>_

SQL 문장 실행 : 다음과 같은 SQL문장을 입력하여 각각의 패스워드를 변경한다.

SQL> alter user system identified by abc; [Enter]
  User altered.
 
SQL> alter user sys identified by 123; [Enter]
  User altered.

SQL> exit
Disconnected from Oracle8 Release 8.0.5.0.0 - Production
PL/SQL Release 8.0.5.0.0 - Production
[oracle@more bin]$ _    



4. 기본생성되는 유저/패스워드/테이블

Oracle 8의 사용자 이름과 암호는 다음과 같다.
 
 
사용자 이름(User Name)       암호(PassWord)
   SYS                        CHANGE_ON_INSTALL     ==> itislord
   SYSTEM                     MANAGER               ==> itislord
   SCOTT                      TIGER
   PO8                        PO8(Personal Edition에서만 생성)
   DEMO                       DEMO

오라클은 그 작업을 tablespace 단위로 화일을 만들며, 기본적으로 아래 4개의
tablespace를 만든다. 이를 통해 다른 드라이브나 디스크에 확장이 가능하다.

                TABLE 의      종류
     종 류                            비  고
     system              : sys 나 system이 관리하는 'table이나 view'등이
                                 저장되는 tablespace , 오라클을 관리하는 모든 정보가 이곳에 기록된다.
     rollback_data     : 복구할 수 있는 정보를 저장할수 있는 tablespace  
     temporary_data  : 임시 작업 장소 ,  등의 작업 시 이용되는 임시 저장소
     user_data          : 임의로 유저가 만드는 tablespace  

1. root로 login한 후 아래와 같이 ifconfig 명령을 실행 : rebooting 하지 않고  변경하는 방법

   예) 현재 사용하는 network interface가 le0이고 IP address는 210.123.100.1이며
       변경된 subnetmask 값이 255.255.255.128(ffffff80) 인 경우
      
       # ifconfig le0 inet 210.123.100.1 netmask 0xffffff80(255.255.255.0)
       # ifconfig le0 down  ----> le0 interface를 down
       # ifconfig le0 up    ----> le0 interface를 up

       # ifconfig -a        ----> 모든 interface를 display
      
2. /etc/netmasks 화일에는 아래와 같이 지정

       # vi /etc/netmasks
      
       210.123.0.0   255.255.255.128
      
  /etc/netmasks 화일에 지정할 경우 첫 칼럼에 정의하는 network address는 original network address를 명기해야 한다.

3. /etc/hosts 화일에서 IP 변경

  # vi /etc/hosts

       # Internet host table
       #
       127.0.0.1       localhost
       203.232.111.123 main    loghost
                                                     --- loghost 의 IP를 변경

4. /etc/defaultrouter 화일에 router 설정

  # cat > /etc/defaultrouter
    203.232.111.253


5. rebooting 하지 않고 router 설정

  # route add default 203.232.111.253 1
  
  # route delete default 203.232.111

6. DNS client setting

  # cat > /etc/resolv.conf
    domain chch-c.ac.kr
    nameserver 203.232.111.3

  # vi /etc/nsswitch.conf

    passwd:     files
    group:      files
    hosts:      files  dns
    networks:   files
    protocols:  files
    rpc:        files

  # nslookup   ---> dns service 확인
먼저, 아무런 설정을 하지 않았을때, 웹서버가 어떤 정보를 보여주는지
다음과 같이 telnet 접속을 해보지요. GET / HTTP/1.0 를 입력해줍니다.

gate@silver> telnet localhost 80
Trying 127.0.0.1...
Connected to gate.eunjea.org.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Sat, 25 Nov 2000 16:04:47 GMT
Server: Apache/1.3.14 (Unix) PHP/4.0.3
Last-Modified: Thu, 16 Mar 2000 22:05:43 GMT
ETag: "12aee-524-38d15ab7"
Accept-Ranges: bytes
Content-Length: 1316
.....
.....
.....

Connection closed by foreign host.

위와 같이 아파치 1.3.14와 php 4.0.3 을 사용하고 있다는 것을 보여줍니다.

이런 정보들을 보여 주고 싶지 않다면 아파치 설정파일에 (아파치 설정 파일은 httpd.conf를 말함)

ServerTokens Prod[uctOnly]
([] 안은 생략될수 있음)를 넣어주면 됩니다.

몇가지 다른 키워드가 있는데 다음과 같습니다.

ServerTokens Prod[uctOnly]
: Apache 만 보여줌
ServerTokens Min[imal]
: Apache 버젼만 보여줌
ServerTokens OS
: 아파치 버젼과 운영체제를 보여줌
ServerTokens Full (또는 지시하지 않았을때)
: 모두 보여줌


ServerTokens 옵션은 아파치 1.3 이후 버젼에서 사용할수 있으며,
ProductOnly 키워드는 1.3.12 이후 버젼에 추가되었습니다.  
    
                
No. 12172

HOW TO OC4J INSTALL, START AND SHUTDOWN
========================================

/* OC4J(Oracle Container For J2EE)는 IAS 1.0.2.2 에서부터
제공되는 J2EE Container로, 현재 J2EE Spec 1.2 및 1.3
Spec 일부를 지원하고 있다. J2EE에 관한 추가 정보는 Sun
Homepage에서 찾아볼 수 있다. 본 문서에서는 Win2000 OS
를 기준으로 작성되었다.
/*

oc4j는 다음에서 down받을 수 있다.

otn.oracle.com->downloads->
application server tab내의 Oracle9iAS Containers for J2EE (OC4J)
->맨 아래쪽 previous version부분에서 해당 os를 선택하여
oc4j 1.0.x를 download받는다.



1. 사전 작업

=> oc4j는 jdk 1.2.2_17 또는 1.3.1 version에 certify되어 있으므로,
그에 해당하는 jdk가 설치되어 있어야 한다. 자바 버전은 command
prompt에서 "java -version"을 수행해서 확인해볼 수 있다.


2. oc4j install

a. d:\oc4j란 이름으로 directory 생성후 oc4j.zip 파일을 해당
디렉토리로 copy한다.

b. command prompt에서 해당 directory로 이동후 unzip한다.
"jar xvf oc4j.zip"

c. unzip후 d:\oc4j\j2ee\home directory로 이동한다.
앞으로 이 directory path를 $OC4J_HOME이라 지칭하겠다.

d. "java -jar orion.jar -install"을 실행하면 admin user에 대한
password 정보를 입력하도록 하는 prompt가 나오는데,
이곳에 원하는 패스워드를 정의한다. 이 정보는 admin.jar와 같은
command line tool을 활용할때 사용된다.

3. oc4j start

a. "java -jar orion.jar"

b. default web site의 port는 8888로 정의되어 있다.
브라우저를 띄우고 http://localhost:8888로 접속해서 test해본다.

4. oc4j shutdown

a. command prompt window를 하나 더 띄워 다음 명령어를 실행한다.
"java -jar admin.jar ormi://localhot:23791 admin manager -shutdown"

b. shutdown syntax는 다음과 같다.
"java -jar admin.jar ormi://<host>:<port> <user> <password> -shutdown

=> <port>는 rmi protocol로 통신하기 위한 port 번호로 default는 23791이다.
이 번호는 $OC4J_HOME\config\rmi.xml에 정의되어 있으며 해당 파일에서
포트번호를 변경할 수 있다.

=> <user>는 "java -jar orion.jar -install 수행시 나오는 user로 admin이란
String이 사용된다.

=>  <password>는 "java -jar orion.jar -install"수행시 정의한 password이다.


5. 관련 command tool에 대한 도움말은 아래 command로 확인할 수 있다.
"java -jar orion.jar -?"
"java -jar admin.jar -?"
    
                
No. 12236

OC4J에서 한글관련 SETUP 사항
===========================

/* OC4J(Oracle Container For J2EE)는 IAS 1.0.2.2 에서부터
제공되는 J2EE Container로, 현재 모든 J2EE Spec 1.2 및 1.3
Spec 일부를 지원하고 있다. J2EE에 관한 추가 정보는 Sun
Homepage에서 찾아볼 수 있다. 본 document는 oc4j 1.0.2.2
version을 기준으로 작성되었다.
/*

OC4J가 다른 jsp compiler(또는 servlet engine)와 다른 부분은
OC4J에서 db의 data 또는 다른 jsp page로부터의 한글 값을
받을때 unicode-ascii 변환같은 것을 oc4j container가 자체적으로
해줍니다. 따라서 jsp page 등에 이러한 기능을 구현한 ascii2unicode와
같은 method를 사용하면 한글이 깨집니다. code level에 아무런 method
적용없이 그대로 모든 한글이 사용가능합니다.

다음은 OC4J 이용시 한글과 관련해 setup해주어야 할 사항입니다.

1. $OC4J_HOME\application-deployments\default\안에 세팅을 원하는
site folder의 orion-web.xml file에 아래 내용 기술.

(application을 추가한 경우는 $OC4J_HOME/application-deployments/
  application_module/webmoule/orion-web.xml을 수정)

...
<orion-web-app
        default-charset="EUC-KR"
...
>
...
</orion-web-app>

c.f) developement라는 항목이 있는 경우에는 value를 false로 setup.

2. $OC4J_HOME/config/global-web-application.xml file도
   1번과 같은 형태로 설정한다.

<orion-web-app
        default-charset="EUC-KR"
...
>
...
</orion-web-app>

3. JSP 문서 내 페이지 디렉티브의 contentType 속성에 text/html; charset=EUC-KR을
설정(<%@ page contentType="text/html;charset=EUC-KR"%>)

OC4J 이용시 한글문제는 위 3가지 사항 셋업으로 대부분 해결된다.

'프로그래밍Tips' 카테고리의 다른 글

오라클 OC4J INSTALL, START AND SHUTDOWN  (2) 2005.09.05
자바 error message  (2) 2005.05.11
grep 명령어 사용법  (0) 2005.04.26
From Empas Blog http://blog.empas.com/sylee1004/2001388

번 호 1  
ERROR Exception in thread "main" java.lang.NoClassDefFoundError: 파일명
발생되는 경우 클래스 파일을 찾을 수 없는 경우
조 언 실행하려는 클래스 파일 이름이 제대로 되어 있는지 확인한다.
또한, CLASSPATH 설정이 제대로 되어 있는지 확인하며 (도스모드에서 set명령어)
만약, 되어있지 않다면 설정한다. (CLASSPATH = jdk1.3/jre/lib/rt.jar; 2-1강좌 참조)
  
번 호 2  
ERROR cannot resolve symbol
symbol : class in(에러가 난 부분)
location : class StackTest(찾으려는 위치)  
발생되는 경우 이해할 수 없는 클래스나 메소드, 변수명이 올경우
조 언 보통 이 에러는 철자가 틀렸을 경우에 많이 발생한다. 클래스, 메소드, 변수의 철자를 세심히 확인해 본다.
특히, 철자를 확인할때 대소문자 구분을 확실히 체크한다.(자바는 대소문자를 구별한다.) 그리고 클래스에서 발생할 경우 import를 해주었는지 확인해 봅니다.
  
번 호 3  
ERROR non-static variable 변수이름(or method 메소드이름) cannot br referenced from a static context
발생되는 경우 static 메소드 안에서 static 으로 선언되지 않은 메소드나 변수를 참조(사용)했을 경우.
특히, 메소드의 경우는 인스턴스를 사용하지 않고 static메소드 내에서 바로 선언한 경우.
조 언 static 선언자의 사용여부를 살펴보고 static 메소드 안에 static으로 선언되어지지 않은 메소드나 변수가 있느지 확인해본다.
만약 그런것이 있으면 메소드를 새로 만들어 그쪽에서 선언한다. 단, 인스턴스를 생성해서 불러줘야 한다는 것을 잊지 말아야한다.
  
번 호 4  
ERROR valiable 변수명 might not have been initialized
발생되는 경우 지역변수인 변수명의 변수가 초기화가 되어있지 않았을 경우
조 언 지역변수(메소드 내에서 선언한 변수)를 초기화 하지 않은채 선언했을 경우 발생한다.
멤버 필드가 아닌 경우는 반드시 변수 선언시 초기화를 해주어야 한다.
(멤버 필드는 자바 프로그램 자체에서 자동으로 default값으로 초기화 해준다.)
  
번 호 5  
ERROR class 클래스명 is public, should be declared in a file named 클래스명.java
발생되는 경우 클래스명이 public으로 선언되었는데 파일명과 다를 경우
조 언 public으로 선언된 클래스가 있다면 반드시 그 클래스명과 파일명이 같아야 한다.
클래스명과 파일명의 대소문자 및 철자가 같은지 비교해 본다.
또한, public으로 선언된 클래스가 하나 이상 있는지 찾아본다.(반드시 하나만 있어야한다.)
  
번 호 6  
ERROR push(java.lang.object)[메소드(인자로 받을 수 있는 형)] in java.util.Stack(메소드의 클래스) cannot be applied to (int)[잘못 들어간 형]
발생되는 경우 메소드에서 인자를 받을 때 받을 수 있는 형이 아닌 자료형 또는 클래스형을 사용할 경우
조 언 사용하는 메소드의 API를 참고하여 어떤 형을 인자로 받을 수 있는지 찾아본다.
API를 보지 못할 경우는 각 자료형으로 인자를 직접 바꾸어 본다.
  
번 호 7  
ERROR java.lang.NoSuchMethodError: main
Exception in thread "main"
발생되는 경우 클래스 파일 안에서 main() 메소드를 찾을 수 없는 경우
조 언 자바 애플릿이 아닌 이상 자바 애플리케이션은 반드시 main() 메소드를 사용해야 합니다.
main() 메소드를 빼먹지 않았는지 확인해 보십시요. 또한 public static void main(String[] args) 형식으로 씌어졌는지도 확인해 보십시요.
(main 클래스는 반드시 위와 같은 형식으로 만들어져야 합니다.)
  
번 호 8  
ERROR unreported exception java.io.IOException(Exception명); must be caught or declared to be thrown
발생되는 경우 예외가 발생하는데 예외처리를 해주지 않았을 경우
조 언 예외를 발생하는 메소드 같은 경우는 반드시 예외처리를 해주어야 합니다.
예외를 발생하거나 예외처리를 해야하는 메소드는 API를 확인해 보시면 알 수 있습니다.
그렇지 않다면 컴파일 후 지금처럼 에러가 난 예외를 예외처리해 주시면 됩니다.
또한, 예외를 처리할 때는 메소드 차원에서 throws 예외명을 이용해서 처리할 수 있고
try{} catch{} 구문을 이용해서 직접 처리해 주셔도 됩니다.(예외 강좌를 참고하세요.)
특히, 예외도 클래스이므로 반드시 예외가 들어간 패키지를 import 해주어야 합니다.
  
번 호 9  
ERROR Note : Calculator.java(파일명) uses or overrides a deprecated API.
Note : Recompile with -deprecation for details.  
발생되는 경우 JDK 버전이 높아졌거나 보안등의 기타이유로 사용이 deprecated된 메소드를 사용한 경우
조 언 이건 예외라기 보다는 경고 입니다.(실행하면 됩니다.^^)
JDK가 버전이 높아지거나 보안등의 이유에 따라 예전에 만들어졌지만 필요가 없어지거나 대체된 메소드가 생겨났습니다.
그런 메소드를 deprecated 되었다고 하는데 이것은 API상에 나왔있습니다.
또한, 컴파일할때 -deprecation 옵션주면 어떤 메소드가 deprecate됐는지 알수있읍니다.
사용이 중지 됐다고 보기 보다는 사용을 가능하면 하지 않게끔 해주는 거죠.
대치되었거나 버전 업된 메소드를 사용하시면 됩니다.

  
번 호 10  
ERROR MouseEvent(클래스명) should be declared abstract; it does not define mouseDragged(java.awt.event.MouseEvent)[메소드명(메소드가 포함된 클래스)] in MouseEvent(클래스명)  
발생되는 경우 implements한 Interface의 모든 메소드를 구현하지 않아서 발생됨  
조 언 Interface는 모든 메소드가 선언만 되고 구현되지 않은 추상(abstract) 메소드입니다.
만약 Interface를 implements하려면 implements한 클래스가 Interface에서 선언한 모든 메소드를 구현해 주어야 합니다.
하나라도 빠질 경우 implements한 클래스도 추상 클래스로 보고 에러가 발생합니다.
에러에 구현해 주어야할 메소드명이 나오므로 그곳에 쓰여있는 메소드를 구현해 주면 됩니다.
만약, 그 메소드를 구현해 주었는데 에러가 나면 철자 및 대소문자를 다시 확인해 보십시요.
--MORE--
  
번 호 11  
ERROR incompatible types
found : /null(입력한 자료형)
required : int(요구하는 자료형)
발생되는 경우 입력을 했을때 맞지 않는 자료형이나 클래스형을 입력할 경우
조 언 incompatible 은 '성미가 맞지 않는','모순된' 이라는 뜻을 가진 단어 입니다.
단어뜻 처럼 입력 경우 required 에 나타난 자료형 및 클래스형을 요구하는데
found 에서 나타난 자료형 및 클래스형을 써주어서 입력을 하지 못하게 되어서 발생하는 에러입니다.
found 에 나타난 자료형을 required 에 나타난 자료형으로 변경해 주시면 됩니다.

  
번 호 12  
ERROR package java.servlet(패키지명) does not exist
발생되는 경우 import한 패키지가 존재하지 않을 경우
조 언 import한 패키지가 존재하지 않을 경우에 발생하는 에러입니다.
철자와 대소문자를 먼저 확인하고 CLASSPATH 설정을 확인해 보시기 바랍니다.
또한 그 곳에 패키지가 jar파일로 있는지도 확인해 보셔야 합니다.
(API에 나와있는 패키지는 rt.jar에 다 있습니다.
단 javax가 붙거나 다름으로 시작되는 확장 패키지는 설치해 주어야합니다.(javax.swing 제외))  
  
번 호 13  
ERROR java.lang.NullPointerException
Exception in thread "main"(메소드) java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:341)... [에러가 일어난 부분]
발생되는 경우 참조하거나 사용한 클래스 또는 자료형이 초기화 되지 않은 경우
조 언 보통 이것은 awt나 배열 부분에서 자주 발생하는데 초기화를 해주지 않아서 많이 발생합니다.
자바의 변수들은 기본적으로(자동으로 초기화 되는 멤버필드등을 제외하고) 초기화를 요구합니다.
에러에 체크된 부분을 검토해 보시고 초기화를 해주십시요.  
  
번 호 14  
ERROR ';'(빠진 부분) expected
발생되는 경우 문법상으로 써야할 것을 쓰지 않은 경우 발생합니다.
조 언 주로 ';'을 안써주시거나 아님 '()'(괄호)를 열기만 하고 닫지 않은 실수를 할 경우 발생합니다.
대부분 이 에러가 발생한 경우는 에러에 나온것을 소스에 추가해 주시면 됩니다.
  
번 호 15  
ERROR unexpected type
required : value(요구하는 타입)
found : class(소스상 써준 타입)

발생되는 경우 써주어야 할 타입이 아닌 잘못된 타입을 써주었을 경우
조 언 unexpected type 에러를 해석하면 '기대하지 않은 타입'이란 뜻을 가지고 있습니다.
즉, 원하는 타입(required)이 아닌데 잘못된 타입(found)을 써준 경우 발생합니다.
에러 체크된 부분의 타입을 required 에서 나타난 타입으로 변경해 주시면 됩니다.

  
번 호 16  
ERROR java.lang.ArrayIndexOutOfBoundsException
at Test.main(Test.java:10)[클래스.메소드(파일명:에러난 위치)]
Exception in thread "main"(예외가 던져진 메소드)

발생되는 경우 배열의 범위를 넘어선 값을 넣었을 경우
조 언 위의 에러는 특이하게 컴파일은 이상없이 되지만 실행을 하면 발생하는 에러입니다.
배열의 범위를 넘어설 경우에 발생하므로 에러난 위치의 배열의 참조 범위를 확인해보시고
선언해둔 배열의 범위에 맞게 조정해 주시면 됩니다.  
  
번 호 17  
ERROR illegal start of expression
발생되는 경우 선언자(modifier)를 잘못 집어 넣은 경우
조 언 에러의 단어뜻을 확인해 보면 '표현의 시작이 부적격 합니다.'하고 해석할 수 있습니다.
보통 선언자가 맞지 않거나 쓰일데가 아닌데 선언자를 줄 경우에 많이 발생합니다.
특히 메소드안에서 static 선언자를 쓴 경우에는 직격으로 볼수 있죠.
에러가 난 부분의 선언자를 제거하거나 맞는 것인지 다시 확인해 보십시요.  
  
번 호 18  
ERROR java.io.InputStream(클래스) is abstract; cannot be instantiated
발생되는 경우 abstract로 선언된 클래스를 직접 new 명령어를 이용하여 인스턴스화 할 경우
조 언 abstract로 선언된 클래스를 직접 new 명령어를 이용하여 인스턴스화 할 경우에 발생하는 에러입니다.
왜냐하면, 추상 클래스는 직접 new 명령어를 이용하여 인스턴스화 할수 없기 때문입니다.(객체를 못만든다구요.)
이 경우에는 인스턴스를 다른 방법으로 생성하시면 됩니다.
예를 들어 인스턴스를 반환하는 메소드를 이용한다거나 상속을 통해서 상속받은 클래스의 인스턴스를 만들어
직접 인스턴스를 만드는 효과를 낼수도 있구요. 원하시는 방법으로 바꾸어 보시길...  
  
번 호 19  
ERROR local variable name(변수명) is accessed from within inner class; needs to be declared final
발생되는 경우 Local Class의 변수를 final로 선언하지 않은 경우
조 언 Local Class의 변수는 참조변수의 참조값 변동을 방지하기 위하여 final 선언자를 붙여주어야 합니다.
변수에 final 선언자를 붙이면 변수는 값을 변동할 수 없는 상수 처럼 쓰이며
만약 이 값을 참조할 경우 자바는 이 값을 넘기는게 아니라 이 값의 복사본을 참조 값으로 넘기게 됩니다.
그러므로 Local Class에서 참조값 변동없이 변수를 참조할 수 있게 되는 것입니다.
Local Class를 정의해준 곳을 살펴보고 final 선언자를 확실하게 확인하시기 바랍니다.  
  
번 호 20  
ERROR inner classes cannot have static declarations
발생되는 경우 내부 클래스 안에서 static 선언자를 쓴 경우
조 언 내부 클래스 안에서는 static 선언자를 쓸수 없습니다.
내부 클래스 안에서 사용된 static 선언자를 제거해 주십시요.  
  
번 호 21  
ERROR referenceto List is ambiguous,both class java.util.List(클래스) in java.util(패키지)
and class java.awt.List(클래스) in java.awt(패키지) match  
발생되는 경우 클래스 사용시 다른 패키지내에 동일이름의 클래스들이 있어서 참조가 모호할 경우
조 언 예시를 보면 아시겠지만 import 한 패키지중에 같은 이름을 사용하는 클래스를 클래스 이름만으로
생성함으로서 참조가 모호해질 경우 발생하는 에러입니다.
이와 같은 경우는 import를 하나 제거 하거나 아님 java.util.List 이런식으로
직접 그 클래스의 패키지를 같이 써줌으로서 모호성을 제거할수 있습니다.

  
번 호 22  
ERROR m()(메소드명) in B(클래스명) cannot override m()(메소드명) in A(클래스명);
attempting to use incompatiable return type  
발생되는 경우 클래스를 상속받고서 메소드를 오버라이드 하고자할때 잘못한 경우
조 언 클래스를 상속받고서 메소드를 오버라이드 할 경우에는 지켜야 하는 규칙이 있습니다.
1. 메소드의 이름이 같아야 합니다.
2. 메소드의 파라미터 개수, 데이터형이 같아야 합니다.
3. 메소드의 리턴형이 같아야 합니다.
4. 상위 메소드와 동일하거나 더 구체적인 Exception을 발생시켜야 합니다.
5. 상위 메소드와 동일하거나 접근범위가 더 넣은 접근 제한자를 사용해야 합니다.

님의 메소드 오버라이드시 위 규칙을 잘 지켰는가를 다시 한번 확인해 보세요.

  
번 호 23  
ERROR getPathBetweenRows(int,int)(메소드) has protected access in javax.swing.jTree(클래스)
발생되는 경우 protected로 선언된 메소드를 상속 없이 직접 불러쓸 경우
조 언 protected로 선언되어 있는 메소드는 상속하거나 같은 package에 있을 때만 쓸 수 있습니다.
상속해서 다시 public 메소드로 값을 받던지 아니면
public 메소드 중에서 비슷한 기능을 하는 메소드가 있는지 찾아서 바꾸어주어야 합니다.  
  
번 호 24  
ERROR invalid method declaration; return type required
발생되는 경우 리턴 타입을 쓰지 않아 메소드의 선언이 잘못된 경우
조 언 리턴 타입을 쓰지 않아 메소드의 선언이 잘못된 경우에 발생하는 에러이므로
에러가 발생한 메소드를 확인해보고 리턴 타입을 맞게 적어주어야 합니다.  
  
번 호 25  
ERROR Error occurred during initialization of VM
java.lang.ExceptionInInitializerError
발생되는 경우 static으로 선언된 변수중 초기화가 안되어 있는 것이 있는 경우
조 언 static으로 선언된 변수중에 초기화가 안된게 있는 경우에 발생하는 에러이므로
에러가 발생한 변수를 확인해보고 알맞은 초기화를 시켜주거나 변수의 위치를
자동 초기화가 가능한 메소드 밖의 클래스 변수로서 사용하게 합니다.  
  
번 호 26  
ERROR Error opening registry key 'Software\JavaSoft\Java Runtime Environment'
Error: could not find java.dll
Error: could not find Java 2 Runtime Environment
발생되는 경우 중복설치 등으로 인해 레지스트리 키값이 잘못되어 있는 경우
조 언 중복설치 등으로 인해 레지스트리 키값이 잘못되어 있는 경우에 발생하는 에러이므로
레지스트리 편집기를 열어서 HKEY_LOCAL_MACHINE -> SOFTWARE -> JavaSoft에
보시면 3개의 키가 있을 겁니다. 그중에서 첫번째 키인 Java 런타임 환경 을 마우스
오른쪽 버튼으로 클릭하여 Java Runtime Environment로 이름을 바꿔주시면 됩니다.

  
번 호 27  
ERROR Error Registry Key 'Sofrware\JavaSofrware\Java Runtime Environment\CurrentVerison'
has value '1.1',but '1.3' is requried.
Error: could not find java.dll
Error: could not find java 2 Runtime Enviroment.  
발생되는 경우 중복설치 등으로 인해 레지스트리 키값의 자바 버전이 잘못되어 있는 경우
조 언 중복설치 등으로 인해 레지스트리 키값의 자바 버전이 잘못되어 있는 경우에 발생하는 에러이므로
레지스트리 편집기를 열어서 HKEY_LOCAL_MACHINE -> SOFTWARE -> JavaSoft -> Java Runtime Environment의 Current version의 값을 1.3으로 되어있는지 확인해 주시면 됩니다.

  
번 호 28  
ERROR java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver(드라이버명)  
발생되는 경우 JDBC로 데이터 베이스에 연결하는 중 드라이버를 찾지 못할 경우
조 언 JDBC를 연결하는 중에 드라이버를 찾지 못할 경우에 발생하는 에러이므로
각 데이터 베이스에 맞는 드라이버가 제대로 다운로드 되었는지 확인해 보시고
드라이버의 위치가 클래스 패스에 잡혀 있는지 확인해주시면 됩니다.  
  
번 호 29  
ERROR Method printIn(java.lang.String)(메소드명) not found in class java.io.PrintStream(클래스명)  
발생되는 경우 자신이 사용한 클래스의 메소드가 맞지 않는(=없는)경우
조 언 자신이 사용한 클래스의 메소드가 맞지 않는(=없는) 경우에 발생하는 에러이므로
API를 통해서 사용하고자 하는 클래스와 메소드를 다시 한번 확인해 봅니다.
보통 이경우 메소드의 철자나 대소문자를 잘못 쓴 경우가 많으니 그점을 유심히 살표봅니다.
마지막으로 철자와 대소문자도 맞는다면 메소드의 인자의 객체형을 맞게 주었는지 확인해보면 됩니다.
--MORE----MORE--

'프로그래밍Tips' 카테고리의 다른 글

오라클 OC4J에서 한글관련 SETUP 사항  (2) 2005.09.05
grep 명령어 사용법  (0) 2005.04.26
JSP Coding Example  (1) 2005.04.12

출처 : 유닉스 쉘 바이블 (엘리 퀴클리 지음)에서 발췌.
3.1 grep 명령어


grep : 파일 전체를 뒤져 정규표현식에 대응하는 모든 행들을 출력한다.
egrep : grep의 확장판으로, 추가 정규표현식 메타문자들을 지원한다.
fgrep : fixed grep 이나 fast grep으로 불리며, 모든 문자를 문자 그래도 취급한다. 즉, 정규표현식의 메타문자도 일반 문자로 취급한다.


3.2 정규표현식을 사용하는 grep의 예제
# grep NW datafile
# grep NW d* (d로 시작하는 모든 파일에서 NW를 포함하는 모든 행을 찾는다.)
# grep '^n' datafile (n으로 시작하는 모든 행을 출력한다.)
# grep '4$' datafile (4로 끝나는 모든 행을 출력한다.)
# grep TB Savage datafile (TB만 인자이고 Savage와 datafile은 파일 이름이다.)
# grep 'TB Savage' datafile (TB Savage를 포함하는 모든 행을 출력한다.)
# grep '5.' datafile (숫자 5, 마침표, 임의의 한 문자가 순서대로 나타나는 문자열이 포함된 행을 출력한다.)
# grep '.5' datafile (.5가 나오는 모든 행을 출력한다.)
# grep '^[we]' datafile (w나 e로 시작하는 모든 행을 출력한다.)
# grep '[^0-9]' datafile (숫자가 아닌 문자를 하나라도 포함하는 모든 행을 출력한다.)
# grep '[A-Z][A-Z] [A-Z]' datafile (대문자 2개와 공백 1개, 그리고 대문자 하나가 연이어 나오는 문자열이 포함된 행을 출력한다.)
# grep 'ss* ' datafile (s가 한 번 나오고, 다시 s가 0번 또는 여러번 나온 후에 공백이 연이어 등장하는 문자열을 포함한 모든 행을 출력한다.)
# grep '[a-z]{9}' datafile (소문자가 9번 이상 반복되는 문자열을 포함하는 모든 행을 출력한다.)
# grep '(3).[0-9].*1 *1' datafile (숫자 3,마침표,임의의 한 숫자,임의 개수의 문자,숫자 3(태그),임의 개수의 탭 문자,숫자 3의 순서를 갖는 문자열이 포한된 모든 행을 출력한다.)
# grep '(north로 시작하는 단어가 포함된 모든 행을 출력한다.)
# grep '' datafile (north라는 단어가 포함된 모든 행을 출력한다.)
# grep '<[a-z].*n>' datafile (소문자 하나로 시작하고, 이어서 임의 개수의 여러 문자가 나오며, n으로 끝나는 단어가 포함된 모든 행을 출력한다. 여기서 .*는 공백을 포함한 임의의 문자들을 의미한다.)


3.3 grep에 옵션 사용
# grep -n '^south' datafile (행번호를 함께 출력한다.)
# grep -i 'pat' datafile (대소문자를 구별하지 않게 한다.)
# grep -v 'Suan Chin' datafile (문자열 Suan Chin이 포함되지 않은 모든 행을 출력하게 한다. 이 옵션은 입력 파일에서 특정 내용의 입력을 삭제하는데 쓰인다.
# grep -v 'Suan Chin' datafile > black
# mv black datafile
# grep -l 'SE' * (패턴이 찾아진 파일의 행 번호 대신 단지 파일이름만 출력한다.)
# grep -w 'north' datafile (패턴이 다른 단어의 일부가 아닌 하나의 단어가 되는 경우만 찾는다. northwest나 northeast 등의 단어가 아니라, north라는 단어가 포함된 행만 출력한다.)
# grep -i "$LOGNAME" datafile (환경변수인 LOGNAME의 값을 가진 모든 행을 출력한다. 변수가 큰따옴표로 둘러싸여 있는 경우, 쉘은 변수의 값으로 치환한다. 작은따옴표로 둘러싸여 있으면 변수 치환이 일어나지 않고 그냥 $LOGNAME 이라는 문자로 출력된다.)


3.4 egrep
egrep(extended grep) : grep에서 제공하지 않는 확장된 정규표현식 메타문자를 지원  한다. grep와 동일한 명령행 옵션을 지원한다.

3.4.1 egrep 예제
# egrep 'NW|EA' datafile (NW나 EA가 포함된 행을 출력한다.)
# egrep '3+' datafile (숫자 3이 한 번 이상 등장하는 행을 출력한다.)
# egrep '2.?[0-9]' datafile (숫자 2 다음에 마침표가 없거나 한 번 나오고, 다시 숫자가 오는 행을 출력한다.)
# egrep ' (no)+' datafile (패턴 no가 한 번 이상 연속해서 나오는 행을 출력한다.)
# egrep 'S(h|u)' datafile (문자 S 다음에 h나 u가 나오는 행을 출력한다.)
# egrep 'Sh|u' datafile (패턴 Sh나 u를 포함한 행을 출력한다.)


3.5 고정 grep 과 빠른 grep
fgrep : grep 명령어와 동일하게 동작한다. 다만 정규표현식 메타문자들을 특별하게 취급하지 않는다.
# fgrep '[A-Z]****[0-9]..$5.00' file ([A-Z]****[0-9]..$5.00 이 포함된 행을 출력한다. 모든 문자들을 문자 자체로만 취급한다.)


 출처 : empas blog 시스템 뽀사불기 ~~^=,.=^~~ (syk1000)

//코딩하고나서 500 오류가 날 경우 코딩을 바꾸기 전에 먼저 해당 jsp와 연관된 java를 재 생성시키고나서 다시 한번 해보고
//그리고 나서도 오류가 나면 그때 코딩을 수정해야한다.

//string형을 int형으로
<%=st.getWon(Integer.parseInt(rs[i][11]))%>

//int형을 string형으로
pRowPage1 =  Integer.toString( ROW_PER_PAGE ) ;
tyear = Integer.toString(Integer.parseInt(ryear)-1);

//checkNull 사용하기
String syear =  st.checkNull(request.getParameter("syear"));

//항목별 합계
                        int totalamt = 0;
                        for (int i=0;i<rs.length;i++)
                        {
                                int amount = Integer.parseInt(rs[i][11]);
                                totalamt +=amount;
                        }

//날짜 포맷변경
        Date mydate = new Date();
        SimpleDateFormat m_today = new SimpleDateFormat("yyyy/MM/dd");
        String today = m_today.format(mydate);

//select문에 검색된 값 적용
                                  <SELECT NAME="jh_name" onChange="javascript:openPage(this.value);" class="text">
                                        <option value="" selected>특별장학금 선택 </option>
                                        <%
                                                        for(int i=0; i<num ; i++)
                                                        {
                                                                if (jhData[i].getJh_name().startsWith("<font "))
                                                                        continue;
                                        %>
                                        <option value="<%=jhData[i].getJh_name()%>"><%=jhData[i].getJh_name()%></option>
                                        <%         }          %>
                                </SELECT>

//Substring 사용하기
        regdate = yjData.getRdate();
        String ryear = regdate.substring(0,4);
        String rmonth = regdate.substring(5,7);
        String rday = regdate.substring(8,10);
        String ryear2 = ryear+"0301";
        String rtoday = ryear+rmonth+rday;

//Substring
<%=rs[i][6].substring(0,4)%>.<%=rs[i][6].substring(4,6)%>월~<%=rs[i][7].substring(0,4)%>.<%=rs[i][7].substring(4,6)%>월

//자바스크립트 삽입하기
<script language="javascript" src="../js/adm.js"></script>

//자바스크립트 변수값 확인
<script language="javascript">alert(<%=pageStr%>)</script>

//jsp 변수값 확인
out.print("Page: "+pageStr+"<br>");

//jsp에서 bean 배열값을 사용하는 for문 사용하기
        FormData[] FList = logic.getFList(sUserCode,fOrder,fOrderBy);
        int num = logic.getNdisPlayNum();
        
        int row = 0;
        for(int i=0; i<num ; i++) {
                row++;

//배열 값 jsp에서 사용하기
        FormData[] FList = logic.getFList(sUserCode,fOrder,fOrderBy); 일 경우
        
          FList[i].getUColNm() 등과 같이 사용

//jsp에서 java bean을 호출하여 사용할 때 sql insert 또는 update 문을 사용할 때는 pk값 처리에 주의해야 한다.

//[자바스크립트] 체크박스를 한꺼번에 선택/해제 하기
아래의 자바스크립트 코드는 게시판이나 이메일 에서 많이 보아왔을겁니다...
체크박스를 한꺼번에 선택하거나 해제하는 스크립트 소스입니다.

<script>
function selectAll()
{

for(i = 0 ; i < document.memo_frm.elements.length ; i++)
{
var ele = document.memo_frm.elements[i];
for(j = 0 ; j < document.memo_frm.elements.length ; j++)
{
if(ele.name == "del["+j+"]")
ele.checked = !ele.checked;
}
}
}
</script>

<form name=memo_frm>
<table align='center' border="0" cellspacing="0" cellpadding="3">
<tr>
<td>
<a href='javascript:selectAll()'>전체선택</a></td>
</tr>
<tr><td><input type='checkbox' name='del[0]' value='on'></td></tr>
<tr><td><input type='checkbox' name='del[1]' value='on'></td></tr>
<tr><td><input type='checkbox' name='del[2]' value='on'></td></tr>
<tr><td><input type='checkbox' name='del[3]' value='on'></td></tr>
<tr><td><input type='checkbox' name='del[4]' value='on'></td></tr>
</table>
</form>

//jsp 안에서 사용되는 자바 스크립트 안에 jsp 함수를 사용할 경우
  자바스크립트 시작과 끝에 일반적으로 삽입하는 " <!--      //-->" 캐릭터를 삭제해야 한다.

//자바 컴파일시     javac -classpath ../../../ TableDev.java

//자바 스크립트 즐겨찾기 :  http://happyscript.net/happyboard/_htmdb/src_form/index-src_form.htm

+ Recent posts