반응형
  1. 자바스크립트란?

    넷츠케이프 에서 사용하는 스크립트 언어 로서 프로그램 코드가 직접 HTML문서 상에 삽입되어, 브라우저 에서 HTML 파일을 읽을때 같이 해석되고 실행된다.
    클라이언트 에서만 실행 되기에 정보를 서버에 보낼필요 없이 즉시 처리 할수가 있다.
    달리 해석 하자면 인터넷 연결 없이도 넷츠케이프2.0, 익스플로러3.0 이상의 브라우저만 있다면 실행하고 확인 할수가 있다.

  2. 자바스크립트 와 자바의 차이점?

    자바스크립트

    • 자바스크립트는 직접 html문서 안에 삽입되어 브라우저 에서 문서가 읽혀지면 같이 해석되고 실행된다.
    • 자바스크립트는 타입 체크를 자바 보다는 철저히 하지 않는다.
    • 그렇기에 누구나 쉽게 배울수있다.
    • 그 댓가로 몇가지 객체지향 요소를 포기 하는데,가령 클래스를 정의할수 없다거나 클래스를 상속 할수 없다.
    • 그대신 객체를 정의하여 사용 할수가 있다.
    • 객체기반 스크립트 언어이다.(이미 언어로 만든 객체들의 집합을 단순히 이용하여 프로그래밍)
    • 변수타입이 선언되지 않아도 된다.
    자바
    • 자바는 서버에서 컴파일 작업시 해석한후 애플릿 형태로 html문서에 삽입된다. 미리 해석되어 있기에 속도면에서 자바 스크립트 보다 빠르다.
    • 타입체크를 철저히 하기 때문에 클래스를 정의 할수 있고 상속 할수 있다.
    • 객체지향 언어이다( 만들고자 하는 클래스를 생성하고, 추가할 수 있으며 특정 작업을 수행하는 일련의 문장이 아닌 다른일을 하는 개개의 부분들의 집합을 프로그래밍)
    • 변수타입이 선언 되어야 한다.

  3. 스크립트 언어란?

    매크로와 같은 어떤 특별한 것들을 사용해서 작은 프로그램 들을 구현해 넣음 으로써 프로그램을
    고칠 수 있다.
    대부분은 미니 프로그램 들이 컴파일 되지 않고 에플리케이션이 실행되는 동안 라인 단위로 해석 되는데
    이러한 미니 프로그램 들을 스크립트라 하며 관련 명령어와 문장들의 집합체를 스크립트 언어라 한다.

  4. 자바스크립트 실행

    자바스크립트는 <script> 로시작해서....(본문)...</script>로 끝나게 된다.
    <script>택은 넷츠케이프 에서 자바스크립트를 위하여 새롭게 만든 택으로 넷츠케이프나 익스플로러를
    제외한 다른 브라우저 에서는 인식을 하지 못하는 경우가 많다.
    그렇기 때문에 자바스크립트를 실행시키기 위해서는 위의 두 브라우저
    중에 하나를 사용해야 합니다.

    (브라우저 다운받는곳:익스플로러, 넷츠케이프)
    다운이 안되면 직접사이트를 방문해서 받으세요..
    인터넷 익스플로러 사이트
    네츠케이프 사이트

    자바스크립트 코드는 보통 <head>---</head>택 사이나
    <body>---</body>택 사이에 들어간다.
    보통은 <head>택 사이에 들어가는데 그이유는 웹 브라우저가 HTML 문서를 읽을때 <head>안에 있는
    정보를 모두 읽은후에 <body>안에 있는 실제 정보를 읽어 화면에 출력하기 때문에 <body> 안에
    넣는다면 화면에 페이지를 출력 하면서 자바스크립트 코드를 읽어 들이고, 미처 해석 하기도 전에
    코드를 실행시킨 다면 오류를 일으키기 때문에 이런 문제를 미연에 방지 하고자 페이지가 화면에
    출력되기 전에 <head>택사이에 넣어 미리 읽어들여 해석하게 하는 것이다.
    ※그렇다고<body>에넣으면 안된다는 말은 아닙니다.~ ~만약을 대비 해서죠

  5. 주석문

    자바 스크립트 주석문은 2가지가 있다.

    /* 과 */ 사이에 들어가는 문장을 주석문으로 취급한다.
    // 는 한줄만 주석문 으로 처리 한다.

    <!-- 와 --> 는 HTML 주석문으로 자바스크립트 코드를 감출때 쓰이는데
    만약 넷츠케이프나 익스플로러 처럼 자바스크립트를 지원하는 웹 브라우저를 제외한 다른 브라우저는 <script> 택이 무시 된다.

    하지만 <script>....</script> 사이에 있는 코드들은 아무런 태그 표시가 없기 때문에
    그대로 화면에 출력된다.
    이것을 해결하기 위해 <!-- 와 --> 택으로 밑(↓)에있는 소스와 같이 모든 코드를 안에 넣어주면 된다.

  6. 간단한 예제.
    <HTML>
    <HEAD>
       <TITLE>자바스크립트</TITLE>
       <SCRIPT LANGUAGE="JavaScript">
       <!--
        document.write("안녕하세요!")
       //스크립트 끝 -->
       </SCRIPT>
     </HEAD>
       <BODY>
       </BODY>
    </HTML>

    ☞ 소스해석
    스크립트 택이 헤더 사이에 위치해 있다.
    스크립트 택에는 LANGUAGE 라는 옵션이 사용 되는데 이는 다른 스크립트 언어에 확장이 가능 하도록 하기 위해서 이다.
    지금은 자바스크립트 이기 때문에 LANGUAGE="JavaScript"가 할당된 것을 볼 수 있다. 자바스크립트가 아닌 VB스크립트 라면 LANGUAGE="vbscript" 라고 할당해 주면 된다
    중간에 document.write 라는 명령이 나오는데 이것은 영문뜻과 같이 문서에 출력하라(써라!) 라는 명령이다.
    저장 할때는 확장자를 이름.html 또는 이름.htm 으로 저장해서 브라우저로 출력해 보면 write안에 있는 "안녕하세요"가 출력 된다.

    실행하기

반응형

onabort
이미지의 다운로드를 중지할  (브라우저의 중지버튼)
onactivate
개체가 활성활   발생
(
태그의 기능이 작용할  발생하는 이벤트로 예를 들어 링크를 누를 경우 링크가 옮겨질때 발생하는 것을 감지하는 이벤트 핸들러)
onafterprint
문서가 출력되거나 혹은 출력하기 위해 출력 미리보기를 한후에 발생
onafterupdate
데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가  업데이트 되었을  발생(데이터 개체부분 참조)
onbeforeactivate
개체가 활성화 상태로 되기 바로 직전에 발생 (onactivate 참고)
onbeforecopy
선택 영역이 시스템의 클립보드로 복사되기 바로 직전에 발생
onbeforecut
선택 영역이 지워지기 바로 직전에 발생
onbeforedeactivate
 문서에서 현재 개체에서 다른 개체로 activeElement 바뀔 때 발생 (activeElement 개체를 지칭하는 예약어로도 쓰임)
onbeforeeditfocus
편집가능한 개체 내부에 포함된 개체가 편집활성화  상태가 되거나 혹은 편집가능한 개체가 제어를 위해 선택될때 
onbeforepaste
시스템의 클립보드에서 문서로 붙여넣기 될때 대상 개체에서 발생
onbeforeprint
문서가 출력되거나 혹은 출력하기 위해 출력미리보기 직전에 발생
onbeforeunload
페이지가 언로드되기 직전에 발생
onbeforeupdate
데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가  업데이트 되기전에 발생(데이터 개체부분 참조)
onblur
개체가 포커스를 잃었을 
onbounce
마퀴태그에서 alernate상태에서 스크롤이  사이드에서 바운드 될때 발생
oncellchange
데이터제공 개체에서 데이터가 변화할때 발생
onchange
개체 혹은 선택영역의 내용이 바뀔  발생
onclick
개체위에서 마우스의 왼쪽 버튼을 누를때 발생
oncontextmenu 
클라이언트 영역에서 사용자가 마우스 오른쪽 버튼을 눌러 콘텍스트 메뉴를 열 때 발생
oncontrolselect
사용자가 개체의 제어 영역을 만들때 발생
oncopy

시스템의 클립보드에 선택영역 혹은 개체를 복사할  소스 개체로부터 발생
oncut
시스템의 클립보드에 선택영역 혹은 개체를 잘라낼때 소스 개체로부터 발생
ondataavailable
비정기적으로 데이터를 전달하는 데이터 소스 개체로부터 데이터가 도착할  마다 정기적으로 발생
ondatasetchanged
데이터 소스개체의 변화에 의해 데이터가 노출된 상태로 될때 발생
ondatasetcomplete
데이터 소스 개체로부터 모든 데이터가 유용한 상태로 표시될때 발생
ondblclick
사용자가 개체에 더블클릭 할때 발생
ondeactivate
 문서에서 현재 개체에서 다른 개체로 activeElement 변할 때 발생
ondrag
드래그 상태가 지속되는 동안 소스 객체로 부터 발생
ondragend
드래그 상태가 끝날때 소스 객체로 부터 발생
ondragenter
사용자가 개체를 드래그 하여 드롭가능 위치로 지정된 영역으로 이동할때 타겟 개체에서 발생
ondragleave
사용자가 개체를 드래그 하여 드롭가능 위치로 지정된 영역을 떠날때 타겟 개체에서 발생
ondragover
사용자가 개체를 드래그 하여 드롭가능 위치로 지정된 영역내에서 드래그할  계속적으로 타겟 개체에서 발생
ondragstart
선택된 개체 혹은 텍스트 영역에서 사용자가 드래그를 시작할  발생
ondrop
드래그앤드롭 작용에서 상태가 진행되는 동안 개체가 타겟 개체에 드롭되었을  타겟 개체에서 발생
onerror
개체가 로드되는 동안 발생하는 이벤트
onerrorupdate
데이터 소스 개체 내에 데이터가 없데이트 되는 동안 에러가 발생할  데이터 영역 개체에서 발생 
onfilterchange
비주얼 필터의 상태가 바뀌거나 트랜지션이 완료되었을  발생
onfinish
마퀴개체의 loop 완료되었을  발생
onfocus
개체가 포커스를 받았을  발생
onfocusin
개체에 포커스가 셋팅되기 바로 직전 개체에 대해 발생
onfocusout
포커스가 다른 개체로 이동한 후에 포커스를 가고 있는 현재 개체에서 발생
onhelp
브라우저가 활성화 되어 있는 동안 F1키를 눌렀을  
onkeydown
사용자가 키를 눌렀을  
onkeypress
기능키를 제외한 키를 눌렀을  발생
onkeyup
사용자가 키를 놓았을  발생
onlayoutcomplete
소스 문서로 부터 콘텐드를 가지는 객체가 미리보기나 출력을 할때 현재 LayoutRect개체를 모두 채우는 것이 끝났을  발생
onload
브라우저가 개체를 로드한 후에 발생
onlosecapture
개체가 마우스 캡쳐를 잃었을  발생
onmousedown
개체 위에 마우스 버튼을 누를 때 발생(좌우 어느 버튼이든)
onmouseenter
개체 안으로 마우스 포인터가 들어올 때 발생
onmouseleave
개체의 경계 밖으로 마우스 포인터가 이동할  발생
onmousemove
개체 위에서 마우스가 움직일 때 발생
onmouseout
개체 밖으로 마우스 포인터가 빠져나갈  발생
onmouseover
개체위로 마우스 포인터가 들어올 때 발생
onmouseup
마우스가 개체 위에 있는 동안 마우스를 누른상태에서 해제될때 발생
onmousewheel
마우스 휠이 돌아갈 때 발생
onmove
개체가 움직일  발생
onmoveend
개체가 움직임이 끝날  발생
onmovestart
개체가 움직이기 시작할  발생
onpaste
문서에 클립보드로 부터 데이터가 전송될때 타겟 개체에서 발생
onpropertychange
개체의 속성이 바뀔 때 발생
onreadystatechange
개체의 상태가 변화할 때 발생
onreset
폼을 사용자가 리셋할 경우 발생
onresize
개체의 크기가 바뀔 때 발생
onresizeend
제어영역에서 개체의 크기가 사용자에 의해 변화가 끝날 때 발생
onresizestart
제어영역에서 개체의 크기가 사용자에 의해 변화되기 시작할 때 발생
onrowenter
데이터 소스 내에서 현재 열이 변화되거나 개체에 새로운 유용한 데이터가 입력될 때 발생
onrowexit
데이터 소스 콘트르롤이 개체내의 현재 열을  변화시킬  발생 
onrowsdelete
레코드셋에서 열이 삭제될 때 발생
onrowsinserted
현재 레코드셋에 새로운 열이 추가된 후에 발생(데이터 개체에서)
onscroll
사용자가 개체내이 스크롤 바를 스크롤 할 때 발생
onselect
현재 선택된 영역이 바뀔 때 발생
onselectionchange
문서의 선택 영역의 상태가 바뀔 때 발생
onselectstart
개체가 선택되기 시작할 때 발생
onstart
마퀴 개체에서  루프가 시작될 때 발생
onstop
사용자가 stop버튼을 눌렀을 경우 혹은 페이지를 떠날 때 발생
onsubmit
폼이 전송되기 바로 전에 발생
onunload
 

반응형

Tomcat 5.0 JNDI Datasoruce 설정


JNDI Datasoruce 설정 개요

  • Tomcat 5 JNDI DataSource를 통한 DB 커넥션 풀 사용
  • JNDI를 통한 커넥션 풀 사용은 J2EE 표준이고, 현존하는 거의 모든 웹 컨테이너가 지원
  • Jakarta의 DBCP 커넥션 풀과 Tomcat JNDI 설정을 통해 데이터베이스 커넥션 풀을 사용하는 방법 제시
  • 기본적으로 필요한 라이브러리
    • commons-dbcp.jar
    • commons-collections.jar
    • commons-pool.jar
    • DB에 대한 JDBC 라이브러리 (JAR)

JNDI Naming Resource 설정

  1. 위 라이브러리들을 $CATALINA_HOME/common/lib 에 복사한다. 그 이외 디렉토리에 두면 안된다.
  2. Connection 풀을 이용할 경우에는 ResultSet과 Connection 객체를 필히 직접 닫아 줘야만 한다.
  3. $CATALINA_HOME/conf/server.xml 혹은 각 웹 컨텍스트별 XML 파일의 <Context>의 자식 요소로 <Resource>를 추가한다.
  4. 웹 어플리케이션의 web.xml파일에 <resource-ref>를 추가하여 JNDI 리소스를 사용할 수 있도록 한다.
  5. 전역적인 JNDI 리소스를 이용하고자 하는 경우는 <GlobalNamingResources>

Server.xml

server.xml
<Resource name="jdbc/forumDb" auth="Container" type="javax.sql.DataSource"/>
<!-- Resource의 name 속성을 이용해서 각 어플리케이션에서 javax.sql.DataSource 객체를 얻어가게 된다. -->

<!-- 자세한 파라미터 설정은 위의 참조사이트에서 확인 -->
<ResourceParams name="jdbc/forumDb">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>

<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>

<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>

<!-- DB 사용자명과 비밀번호 설정 -->
<parameter>
<name>username</name>
<value>dbuser</value>
</parameter>
<parameter>
<name>password</name>
<value>dbpasswd</value>
</parameter>

<!-- JDBC 드라이버 클래스 -->
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>

<!-- JDBC 접속 URL -->
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@dbhost:1521:ORA</value>
</parameter>
</ResourceParams>
전역 JNDI 리소스 이용
  • <Resource>와 <ResourceParams> 요소를 server.xml의 <GlobalNamingResources> 의 자식노드로 옮기면 특정 웹 어플리케이션이 아니라, 이 톰캣에 설치된 전체 웹 어플리케이션에서 사용 할 수 있게 된다. 하지만 각 웹 어플리케이션 "<Context>"에 다음과 같은 설정을 해야 한다.
server.xml의 <Context> 부분에 추가
<ResourceLink
name="jdbc/forumDb"
global="jdbc/forumDb"
type="javax.sql.DataSource"
/>
  • 아니면 server.xml에서 <Host> 요소의 자식으로 다음을 추가하면 각 컨텍스트별 설정 필요없이 전체 웹 어플리케이션 컨텍스트에서 GlobalNamingResources로 지정된 JNDI 리소스를 사용할 수 있다.
server.xml의 <Context> 부분에 추가
<DefaultContext>
<ResourceLink
name="jdbc/forumDb"
global="jdbc/forumDb"
type="javax.sql.DataSource"
/>
</DefaultContext>

web.xml

web.xml에 리소스에 대한 reference를 설정
<resource-ref>
<description>Forum DB Connection</description>
<!-- 다음이 바로 리소스의 이름 -->
<res-ref-name>jdbc/forumDb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

Tomcat 5.5 JNDI Datasoruce 설정


DBCP(Database Connection Pool) 설정

  • 라이브러리 설치
    • Jakarta-Commons DBCP
    • Jakarta-Commons Collections
    • Jakarta-Commons Pool
  • DBCP 는 Jakarta-Commons Database Connection Pool을 사용하는데, 위에 있는 세개의 라이브러리는 $CATALINA_HOME/common/lib/naming-factory-dbcp.jar의 한개의 JAR에 포함되어 있다.
  • 이 하나의 라이브러리가 존재하는지 확인한다.

DB connection pool 누수 방지하기

  • DBCP Datasource 설정에 다음 Resource 속성을 설정한다.
  • 디폴트는 false이다.
removeAbandoned="true"
  • 취소된 Connection에 대한 timeout 시간을 설정한다.
  • 디폴트 timeout 시간읜 300초이다.
removeAbandonedTimeout="60"
  • Connection 리소스를 취소하는 코드의 Stack Trace를 로깅하도록 설정한다.
  • 디폴트는 false이다.
logAbandoned="true"

MySQL DBCP 예제

  • MySQL JDBC 드라이버 설치 
    • MySQL 3.23.47, MySQL 3.23.47 using InnoDB,, MySQL 3.23.58, MySQL 4.0.1alpha
    • Connector/J 3.0.11-stable (the official JDBC Driver)
    • mm.mysql 2.0.14 (an old 3rd party JDBC Driver)
    • 이 중에 하나의 드라이버를 결정하여 $CATALINA_HOME/common/lib에 복사한다.
  • Context 설정 (context.xml)
context.xml
<Context path="/DBTest" docBase="DBTest"
        debug="5" reloadable="true" crossContext="true">

    <!-- maxActive: Maximum number of dB connections in pool. Make sure you
         configure your mysqld max_connections large enough to handle
         all of your db connections. Set to -1 for no limit.
         -->

    <!-- maxIdle: Maximum number of idle dB connections to retain in pool.
         Set to -1 for no limit.  See also the DBCP documentation on this
         and the minEvictableIdleTimeMillis configuration parameter.
         -->

    <!-- maxWait: Maximum time to wait for a dB connection to become available
         in ms, in this example 10 seconds. An Exception is thrown if
         this timeout is exceeded.  Set to -1 to wait indefinitely.
         -->

    <!-- username and password: MySQL dB username and password for dB connections  -->

    <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
         org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
         Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
         -->

    <!-- url: The JDBC connection url for connecting to your MySQL dB.
         The autoReconnect=true argument to the url makes sure that the
         mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
         connection.  mysqld by default closes idle connections after 8 hours.
         -->

  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>

</Context>
  • web.xml 설정
    • WebRoot의 WEB-INF/web.xml 파일에 다음 <resource-ref> 부분을 추가한다.
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

Oracle 8i, 9i & 10g 예제

  •  Oracle의 경우에는 MySQL 예제에서 최소한의 수정을 통해 설정할 수 있다.
  • 오라클9i까지는 oracle.jdbc.driver.OracleDriver 드라이버를 지원하지만 이후에는 oracle.jdbc.OracleDriver 드라이버를 활용해야 한다.
  • 오라클 드라이버를 포함하는 JAR 파일을 $CATALINA_HOME/common/lib에 설치한다.
  • context.xml 설정
<Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
              username="scott" password="tiger" maxActive="20" maxIdle="10"
              maxWait="-1"/>
  • web.xml 설정
<resource-ref>
 <description>Oracle Datasource example</description>
 <res-ref-name>jdbc/myoracle</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>
  • 자바 활용 코드 예제
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
//etc.

Tomcat 6.0 JNDI Datasoruce 설정


Tomcat 5.5와 동일한 설정

  • 톰캣 5.5의 설정방법과 동일하게 6.0에서도 설정한다.

참고자료


 

+ Recent posts