Tomcat 한글

원문: http://blog.naver.com/utsman?Redirect=Log&logNo=110014144021


Tomcat/JSP와 한글 



총 정리 차원에서...
Tomcat 한글 설정하기
일반적으로 웹 어플리케이션이 GET과 POST 방식으로 파라미터를 넘겨 받을 때 request.setCharacterEncoding()을 통한 문자셋 인코딩이 필요하다.


◎ Tomcat 4.x
단순히 JSP 혹은 서블릿의 최 상단에 request.setCharacterEncoding("euc-kr");을 하면 된다.
GET과 POST 방식에 상관없이 인코딩을 해준다.



◎ Tomcat 5.x
POST 방식은 request.setCharacterEncoding("euc-kr");로 계속 하면된다.
하지만 GET 방식은 server.xml의 설정 부분을 바꿔줘야만 한다.



<Connector port="8080"
  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
  enableLookups="false" redirectPort="8443" acceptCount="100"
  debug="0" connectionTimeout="20000"
  disableUploadTimeout="true" URIEncoding="euc-kr"/>

<Connector port="8009"
  enableLookups="false" redirectPort="8443" debug="0"
  protocol="AJP/1.3" URIEncoding="euc-kr"/>



위에서 URIEncoding="euc-kr" 부분이다.그리고 아래의 port="8009" 부분은 mod_jk를 이용해서 Apache와 Tomcat 5.x 를 연동할 때 URIEncoding="euc-kr"을 지정할 필요가 있다.

URIEncoding으로 지정할 경우, 만약 웹 어플리케이션이 EUC-KR과 UTF-8을 각 요청 별로 따로 처리할 필요가 있을경우 그에 대응할 수 없다. 대신, useBodyEncodingForURI="true"을 사용하면 Tomcat 4.x와 동일한 방식으로 즉, request.setCharacterEncoding() 값에 따라 GET/POST 방식 모두를 처리할 수도 있다. (참조 : http://tomcat.apache.org/tomcat-5.5-doc/config/http.html)

결론적으로 Tomcat 4.x와 Tomcat 5.x 는 모두 request.setCharacterEncoding()이 필요하다는 사실에는 변함이 없다.



◎ 한글 파라미터를 가진 링크를 만들 때


JSP페이지에서 링크를 생성할 때, 한글이 됐든 공백이나 특수문자를 가진 영어가 됐든, 순수하게 영어와 숫자, 밑줄 등으로만 이뤄진게 아닌 모든 파라미터를 넘길 때는 무조건 URLEncoding을 해야한다고 봐도 된다.

Web Container에 따라 URLEncoding을 안하고 넘겨도 작동하는 경우가 있는데, 동일한 웹 컨테이너라도 버전에 따라 한글을 제대로 인식하지 못하는 경우도 있고, 또 다른 컨테이너에서는 URLEncoding이 안된 한글을 전혀 인식하지 못할 수도 있다.

그러므로 무조건 표준을 따라서 java.net.URLEncoder.encode()메 소드를 사용해 인코딩해서 넘기도록 한다. 디코드 작업은 request.setCharacterEncoding()에 의해서 자동으로 이뤄지므로 해줄것이 없다.(Tomcat 3.x대- JSP Spec 1.1 -에서는 request.setCharacterEncoding()이 없으므로 String.getBytes()를 이용해 직접 디코딩을 해줘야만 했다)

◎ <%@ include file="test.jspf"%> 에서의 한글
위와 같이 test.jspf를 static include 할 경우에 test.jspf에 있는 한글이 모두 깨질 수 있다. test.jspf에도 한글 설정이 필요한데, 이 경우에는 test.jspf의 최 상단에 다음을 추가하면 된다.

<%@page pageEncoding="euc-kr"%>


static include : JSP 페이지를 컴파일하는 시점에 해당 jspf 파일의 내용을 문자열 그대로 현재 jsp에 삽입하여 컴파일 하는 것. static include 방식에서 include 되는 대상 jsp의 확장자는 .jspf로 하는 것이 표준이다. .jspf 는 단독 실행을 위한 것이 아니라 항상 다른 JSP에 포함되어 쓰이는 목적으로 만들어졌기 때문에 완전한 JSP의 형태를 갖추고 있지 않다.

<jsp:include page=""/> 이 방식은 동적 include 방식으로, JSP 페이지가 실행되는 중간에 page에 지정된 jsp를 실행한 결과를 삽입하는 방식이다. 이 방식에서는 include 되는 JSP 페이지가 원래부터 페이지 인코딩 정보 등을 포함한 완전한 JSP 형태를 갖추고 있어야만 한다.






...okJSP 추가 사항


※ 톰캣에서  한글문제 해결방법 ※
작성일 : 2005.10.26



-. 아햏햏, ?막? ? , 퀰, 휖 같은 문자를 파라미터로 입력 받는방법
-. 한글 이름으로 된 파일(그림파일)이 다운로드 되지 않는문제 해결
-. Oreilly에서 만든 MultipartRequest 에서 한글파일 이름 얻기


우선  KSC5601(EUC_KR)에서는 위와같은 문자를 표현할 수 없다.

1. server.xml 에서
     useBodyEncodingForURI 옵션추가
     URIEncoding이 값 있다면 아래와같이 UTF8로 변경한다.
    (톰캣이 파일 관리시 내부적으로 UTF8을 사용하는것 같음)

     <Connector .... 
          useBodyEncodingForURI="true"
          URIEncoding="UTF8"/>


2. JSP출력 인코등은 MS949, HTML은 KSC5601 혹은 EUC-KR, MS949 로 한다.
   JSP,HTML 다음과 같이 넣어준다...

   <%@ page contentType="text/html; charset=MS949" %>
  
   <TITLE>한글 테스트</TITLE>
   <META http-equiv="Content-Type" content="text/html; charset=KSC5601">


3. HttpServletRequest.getParameter(String)를 사용하기전에, 다음 코드를 미리 실행한다.
  
   request.setCharacterEncoding("MS949");

   이것은  아래와 같이 실행한 결과를 한것과 동일하다.
   new String(request.getParameter("param1").getBytes("ISO8859_1"),"MS949")

4. com.oreilly.servlet.MultipartRequest 에서 한글 파일 이름 얻기
    아래와 같이 생성자의 3번째 파라미터에 MS949를 입력한다.

   MultipartRequest multi = new MultipartRequest(request, "c:\upload", (1024*1024*30), "MS949", new DefaultFileRenamePolicy());


 
 
      
Tag  
tag는 게시물의 성격을 나타내는 키워드를 입력하는 공간입니다. login 후 사용하실 수 있습니다.
        
  감사합니다. ^^kenu2005-10-26 20:41:31x
좋은 팁 감사합니다.

그런데, 이러한 방식이 좋은 결정일까요?

받아들이는 인코딩과 내보내는 인코딩이 다른데다, 특정 브라우저의 특별한 설정에 의존적이기도 하구요.

하려면 완전히 UTF-8로 이전하거나 아니면 EUC-KR혹은 MS949로 통일하고 한글과 특수문자 들어가는 부분은 request.setCharacterEncoding()과 URLEncoder.encoding()으로 처리하는 것이 옳다고 보는데요.(이럴경우 WAS특성 타는 것을 본적이 없는거 같습니다.. 아직은요..)

위와 같은 경우 WAS가 달라지면 어떤 현상이 생길지 예측이 안되네요..

자바 웹 어플리케이션은 WAS바꿔 들어가는게 비일비재한데...

다른분들은 어떻게 생각하시나요?
자바 웹 프로그래머라면 한글 문제로 골머리 앓아본적 한두번씩은 있을 텐데요...
권남2005-10-28 03:48:22x
http://enhydra.objectweb.org/doc/e6.2/developer/encoding.html#d0e35 문서에 의하면 URIEncoding은 useBodyEncodingForURI 에 의해 무시당하고 request.setCharacterEncoding()을 따르는군요...

그렇다면 실제로 저 설정은 동일한 GET과 POST에 대해 항상 동일한 인코딩을 사용하는 설정이고 URIEncoding은 아무 의미도 없는거네요..

흠... 에구 테스트 해봐야징... 일단, URIEncoding보다는 useBodyEncodingForURI="true"를 사용하는 것이 더 좋을 것 같네요.

새로운거 하나 알았습니다.권남2005-10-28 04:05:36x
톰캣문서 http://tomcat.apache.org/tomcat-5.0-doc/config/http.html 에 의하면, useBodyEncodingForURI보다는 URIEncoding 사용을 권장하는 것 같네요... --;

This specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding. This setting is present for compatibility with Tomcat 4.1.x, where the encoding specified in the contentType, or explicitely set using Request.setCharacterEncoding method was also used for the parameters from the URL. The default value is false.권남2005-10-28 04:08:17x

XP 자동 로그인 설정

출처: http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10201&eid=cFPQP513eRfIjAqTD3aRNGW00s/2JT91&qb=7JyI64+E7JqwIHhwIOyekOuPmeuhnOq3uOyduA==

사용자 삽입 이미지

SMTP 통신을 테스트하기 위해 포트 25로 텔넷 연결

출처 : http://www.eldorado29.com/12

KB Article 2007/08/27 18:36

요약

이 문서에서는 SMTP(Simple Mail Transfer Protocol) 통신 문제를 해결하기 위해 SMTP 서비스를 실행하는 컴퓨터의 포트 25에 텔넷으로 연결하는 방법을 설명합니다. 기본적으로 SMTP는 포트 25에서 수신 대기합니다.

다음 중에서 발생한 문제 유형에 적합한 방법을 사용하여 문제를 해결할 수 있습니다. 예를 들어 두 Microsoft Exchange 2000 Server 서버 간에 SMTP를 통해 보내는 데 문제가 있으면 보내는 서버에서 텔넷으로 대상 서버의 포트 25로 연결하여 SMTP 연결을 테스트할 수 있습니다. 또는 인터넷에서 SMTP 메일을 받는 데 문제가 있으면 이 문서에 설명된 단계를 따라 인터넷에는 있지만 해당 네트워크에는 없는 호스트에서 SMTP 서버로의 연결을 테스트할 수 있습니다.

추가 정보

Microsoft 제품군에는 여러 버전의 SMTP가 있습니다. Microsoft Windows 제품군에는 인터넷 정보 서비스(IIS)와 함께 제공되는 SMTP 서비스가 있으며 Microsoft Windows NT Server 4.0에서는 SMTP 서비스가 옵션 팩에 포함되었습니다. 보다 최신의 Windows 버전에서는 IIS가 운영 체제에 통합되어 있으며 제어판의 프로그램 추가/제거를 사용하여 IIS를 추가할 수 있습니다. 또한 Exchange 2000과 Microsoft Exchange Server 2003에서는 IIS의 기존 SMTP 서비스를 추가 기능과 함께 사용합니다. Microsoft Exchange Server 버전 4.0, 5.0 및 5.5는 모두 IMC(인터넷 메일 커넥터)나 IMS(인터넷 메일 서비스) 형식으로 된 자체 버전의 SMTP와 함께 제공됩니다.

참고 Exchange 5.0 이상에서는 IMC가 IMS로 이름이 바뀌었습니다.

텔넷 세션을 시작하기 전에 이 테스트 메시지를 받을 대상 사용자의 전체 SMTP 전자 메일 주소가 있어야 합니다. 이 전자 메일 주소의 형식은 다음과 같아야 합니다.
User@Site.Domain.com
SMTP 서비스를 실행 중인 서버 컴퓨터의 FQDN(정규화된 도메인 이름)이나 IP 주소(예: 10.120.159.1)도 있어야 합니다. 서버가 조직 내부에 있으면 이미 이 정보가 있을 것입니다. 서버가 조직 외부에 있으면 Nslookup.exe를 사용하여 이 정보가 포함된 DNS 레코드를 찾는 것이 이 정보를 찾는 가장 쉬운 방법입니다. NSlookup에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
200525 (http://support.microsoft.com/kb/200525/) NSlookup.exe 사용
인터넷 메일 교환기 레코드를 구하는 방법은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
203204 (http://support.microsoft.com/kb/203204/) XFOR: Nslookup.exe 유틸리티를 사용하여 인터넷 메일 교환기 레코드를 구하는 방법

SMTP 서비스를 실행하는 서버에서 SMTP가 시작되었는지 확인하십시오. 이 문서에 설명된 기본 테스트를 실행하고 원격 서버에서 220 응답이 수신되는지 확인하여 SMTP가 시작되었는지 테스트할 수 있습니다. 이렇게 하면 SMTP가 실행되고 있는지도 확인됩니다.

참고
일부 텔넷 응용 프로그램에서는 로컬 에코(LOCAL ECHO) 기능을 켜야 입력하는 명령을 볼 수 있습니다. Microsoft Telnet 세션 중에 이렇게 하려면 명령 프롬프트에 set local_echo를 입력하십시오.
Microsoft Windows XP에서는 set local_echo 대신 set localecho를 입력하십시오.

기본 테스트

호 스트 컴퓨터와 원격 SMTP 서버가 통신할 수 있는지 확인하려면 다음과 같이 하십시오. 다음 명령 중 하나를 입력한 후 아래의 오류 메시지가 나타나면 구문이나 명령에 오류가 있기 때문에 SMTP 서버에서 사용자가 입력한 내용을 인식하지 못하는 것입니다.
500 Command not recognized
명령을 확인하고 다시 입력하거나 Microsoft SMTP 서버와 직접 통신하고 있는지 확인하십시오.

참고 Microsoft Telnet에서는 백스페이스 키를 사용할 수 없습니다. 명령을 입력하면서 실수한 경우 Enter 키를 누른 다음 새 명령을 시작해야 합니다.

다음 단계에서는 명령줄에서 텔넷을 실행합니다. 명령줄을 열려면 시작, 실행을 차례로 누르고 열기 상자에 cmd를 입력한 다음 확인을 누르십시오.
1. 다음과 같은 형식의 텔넷 명령을 사용하여 텔넷 세션을 시작할 수 있습니다.

참고 각 줄을 입력한 다음에는 Enter 키를 누르십시오.
telnet servername portnumber
예를 들어 다음과 같이 입력하십시오.
telnet mail.contoso.com 25
참고 연결할 SMTP 서버의 IP 주소나 FQDN으로 servername을 바꿀 수 있습니다. 각 명령을 입력한 다음에는 Enter 키를 눌러야 합니다.

명령이 제대로 작동하면 SMTP 서버에서 다음과 같은 응답이 수신됩니다.
220 site.contoso.com Microsoft Exchange Internet Mail Connector <version number of the IMC>
참고 여러 버전의 Microsoft SMTP 서버나 타사 SMTP 서버가 있으면 받는 서버에서 응답이 여러 개 수신될 수 있습니다. 중요한 점은 서버 FQDN과 SMTP 버전이 포함된 220 응답이 수신된다는 것입니다. 또한 Microsoft SMTP의 모든 버전에서는 "Microsoft"라는 용어가 220 응답에 포함됩니다.
2. 다음 명령을 입력하여 통신을 시작합니다.
EHLO test.com
참고 HELO 명령을 사용할 수 있지만 EHLO는 SMTP의 현재 모든 Microsoft 구현에서 지원되는 확장 SMTP 동사 집합의 동사이므로 확장 SMTP 동사에 문제가 없다면 EHLO를 사용하는 것이 좋습니다.

명령이 성공하면 아래와 같은 응답이 나타납니다.
250 OK
3. 받는 SMTP 서버에 메시지 보낸 사람을 알리려면 다음 명령을 입력합니다.
MAIL FROM:Admin@test.com
참고 이 주소는 원하는 모든 SMTP 주소가 될 수 있지만 다음과 같은 문제를 고려하는 것이 좋습니다.
a. 일부 SMTP 메일 시스템에서는 MAIL FROM: 주소를 기반으로 메시지를 필터링하며 연결하는 특정 IP 주소가 SMTP 메일 시스템이 있는 도메인과 일치하지 않는 경우 해당 IP 주소에서 SMTP 메일 시스템에 연결하거나 전자 메일을 보낼 수 없습니다. 이 예에서 이러한 도메인은 test.com입니다.
b. 메시지를 보낼 때 유효한 전자 메일 주소를 사용하지 않으면 NDR(배달 못 함 보고서)이 유효하지 않은 IP 주소에 도달할 수 없기 때문에 메시지에 배달 문제가 있었는지 확인할 수 없습니다. 유효한 전자 메일 주소를 사용하면 SMTP 서버에서 다음과 같은 응답이 수신됩니다.
250 OK - MAIL FROM Admin@test.com
4. 받는 SMTP 서버에 메시지 받는 사람을 알리려면 다음 명령을 입력합니다.

참고 항상 메시지를 받을 도메인에서 유효한 받는 사람 SMTP 주소를 사용하는 것이 좋습니다. 예를 들어 john@domain.com에 보낼 경우 도메인에 john@domain.com이 있어야 합니다. 그렇지 않으면 NDR이 수신됩니다.

메시지를 받을 사람의 SMTP 주소를 사용하여 다음 명령을 입력합니다.
RCPT TO: User@Domain.Com
다음과 같은 응답이 수신됩니다.
250 OK - Recipient User@ Domain.Com
5. 다음 명령을 입력하여 데이터를 보낼 준비가 완료되었음을 SMTP 서버에 알립니다.
DATA
다음과 같은 응답이 수신됩니다.
354 Send data. End with CRLF.CRLF
6. 이제 메시지의 822/2822 부분을 입력할 준비가 완료되었습니다. 사용자는 자신의 받은 편지함에서 이 메시지 부분을 보게 됩니다. 다음 명령을 입력하여 제목 줄을 추가합니다.
Subject: test message
Enter 키를 두 번 누릅니다. 이 명령에 대해서는 응답이 수신되지 않습니다.

참고 두 번의 Enter 키 명령은 RFC(Request for Comments) 822 및 2822를 따릅니다. 822 명령 뒤에는 빈 줄이 와야 합니다.
7. 다음 명령을 입력하여 메시지 본문을 추가합니다.
This is a test message you will not see a response from this command.
8. 다음 빈 줄에 마침표(.)를 입력한 다음 Enter 키를 누릅니다. 다음과 같은 응답이 수신됩니다.
250 OK
9. 다음 명령을 입력하여 연결을 종료합니다.
QUIT
다음과 같은 응답이 수신됩니다.
221 closing connection
10. 보낸 메시지를 받는 사람이 받았는지 확인합니다. 응용 프로그램 이벤트 로그에 오류 이벤트 메시지가 나타나거나 메시지 수신에 문제가 있으면 호스트에 대한 구성이나 통신을 확인합니다.

고급 테스트

이 문서에 설명된 기본 테스트 단계 외에도 배달 확인을 사용하여 양방향에서 모두 메일을 테스트할 수 있습니다. 이 방법을 사용하면 SMTP 서버가 인바운드 연결을 받아들이고 보낸 사람에 대해 배달 확인을 생성할 수 있는지 확인하여 SMTP 서버의 아웃바운드 연결을 테스트할 수 있습니다.

테스트 메시지에 대해 배달 확인을 요청하려면 이 문서의 "기본 테스트" 절에 있는 4단계를 참조하여 입력한 정보가 배달 확인을 받을 수 있는 유효한 전자 메일 주소인지 확인합니다. 그런 다음 이 문서의 "기본 테스트" 절에 있는 5단계에서 텔넷 세션을 사용하여 다음 명령을 입력합니다.
RCPT TO:User@Site.Domain.Com notify=success,failure
 

JSP에서의 include

출처: http://aboutjsp.com/lec/include.jsp

<jsp:include page="doc1.jsp" flush="true" /> ==> HTML include
< % @include file="doc2.jsp" % > ==> JSP Source include


<jsp:include page="URI" flush="true">
<jsp:param name="파라메터이름" value="파라메터값" />
</jsp:include> 

오라클 10g에서 쉽게 CLOB 다루기

출처: http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html


1. 32K(32765 Byte) 미만일 경우
: Connection 객체를 얻어올때 "SetBigStringTryClob" 속성을 설정하고
: Statement.setString 메소드를 이용한다.


import java.sql.Connection;
import java.sql.DriverManager;
import oracle.jdbc.OracleDriver;
import java.util.Properties;
..........

// Load the database details into the variables.
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";

// Create the properties object that holds all database details
Properties props = new Properties();
props.put("user", user );
props.put("password", password);
props.put("SetBigStringTryClob", "true");

// Load the Oracle JDBC driver class.
DriverManager.registerDriver(new OracleDriver());

// Get the database connection
Connection conn = DriverManager.getConnection( this.url, this.props );




PreparedStatement pstmt = conn.prepareStatement(
"INSERT INTO clob_tab VALUES(?)");

// Read a big file(larger than 32765 bytes).
// Note: method readFile() not listed here.
// It can be any method that reads a file.
String str = this.readFile("bigFile.txt");

// The string data is automatically transformed into a CLOB and
// inserted into the database column.
// Make sure that the Connection property - 'SetBigStringTryClob' is
// set to true for the insert to happen.
pstmt.setString(1, str);
pstmt.executeUpdate();


2. 모든 경우
: OraclePreparedStatement 를 이용하는 방법

// Create SQL query to insert CLOB data and other columns in the database.
String sql = "INSERT INTO clob_tab VALUES(?)";
     
// Read a big file(larger than 32765 bytes).
// Note: method readFile() not listed here.
// It can be any method that reads a file.
String str = this.readFile("bigFile.txt");

// Create the OraclePreparedStatement object
opstmt = (OraclePreparedStatement)conn.prepareStatement(sql);

// Use the new method to insert the CLOB data (for data greater or lesser than 32 KB)
opstmt.setStringForClob(1,str);

// Execute the OraclePreparedStatement
opstmt.executeUpdate();

[JavaScript] Dynamic Combo

Dynamic Combo

<html>
<head>
<!--
This file retrieved from the JS-Examples archives
http://www.js-examples.com
1000s of free ready to use scripts, tutorials, forums.
Author: Mirko Elviro - http://www.js-x.com/
-->
<script language="JavaScript">
/*
*** Multiple dynamic combo boxes
*** by Mirko Elviro, 9 Mar 2005
***
***Please do not remove this comment
*/

// This script supports an unlimited number of linked combo boxed
// Their id must be "combo_0", "combo_1", "combo_2" etc.
// Here you have to put the data that will fill the combo boxes
// ie. data_2_1 will be the first option in the second combo box
// when the first combo box has the second option selected


// first combo box
data_1 = new Option("1", "$");
data_2 = new Option("2", "$$");

// second combo box
data_1_1 = new Option("11", "-");
data_1_2 = new Option("12", "-");
data_2_1 = new Option("21", "--");
data_2_2 = new Option("22", "--");
data_2_3 = new Option("23", "--");
data_2_4 = new Option("24", "--");
data_2_5 = new Option("25", "--");

// third combo box
data_1_1_1 = new Option("111", "*");
data_1_1_2 = new Option("112", "*");
data_1_1_3 = new Option("113", "*");
data_1_2_1 = new Option("121", "*");
data_1_2_2 = new Option("122", "*");
data_1_2_3 = new Option("123", "*");
data_1_2_4 = new Option("124", "*");
data_2_1_1 = new Option("211", "**");
data_2_1_2 = new Option("212", "**");
data_2_2_1 = new Option("221", "**");
data_2_2_2 = new Option("222", "**");
data_2_3_1 = new Option("231", "***");
data_2_3_2 = new Option("232", "***");

// fourth combo box
data_2_2_1_1 = new Option("2211","%")
data_2_2_1_2 = new Option("2212","%%")

// other parameters
displaywhenempty="-empty-"
valuewhenempty=-1

displaywhennotempty="-select-"
valuewhennotempty=0


function change(currentbox)
{
  var numb = currentbox.id.split("_");
  var currentbox = numb[1];
  var i=parseInt(currentbox)+1;
  // I empty all combo boxes following the current one
  var _t=eval("typeof(document.getElementById('combo_"+i+"'))!='undefined'");
  while (_t && document.getElementById("combo_"+i)!=null)
  {
    var son = document.getElementById("combo_"+i);
    // I empty all options except the first (it isn't allowed)
    for (m=son.options.length-1;m>0;m--)
      son.options[m]=null;
    // I reset the first option
    son.options[0]=new Option(displaywhenempty,valuewhenempty);
    i=i+1;
  }

  // now I create the string with the "base" name ("stringa"), ie. "data_1_0"
  // to which I'll add _0,_1,_2,_3 etc to obtain the name of the combo box to fill
  var stringa='data';
  i=0;
  _t=eval("typeof(document.getElementById('combo_"+i+"'))!='undefined'");
  while (_t && document.getElementById("combo_"+i)!=null)
  {
    eval("stringa=stringa+'_'+document.getElementById(\"combo_"+i+"\").selectedIndex");
    if (i==currentbox)
      break;
    i=i+1;
  }

  // filling the "son" combo (if exists)
  var following=parseInt(currentbox)+1;
  _t=eval("typeof(document.getElementById('combo_"+following+"'))!='undefined'");
  if (_t && document.getElementById("combo_"+following)!=null)
  {
    son=document.getElementById("combo_"+following);
    stringa=stringa+"_";
    i=0;
    while ((eval("typeof("+stringa+i+")!='undefined'")) || (i==0))
    {
      // if there are no options, I empty the first option of the "son" combo
      // otherwise I put "-select-" in it
      if ((i==0) && eval("typeof("+stringa+"0)=='undefined'"))
        if (eval("typeof("+stringa+"1)=='undefined'"))
          eval("son.options[0]=new Option(displaywhenempty,valuewhenempty)");
        else
          eval("son.options[0]=new Option(displaywhennotempty,valuewhennotempty)");
        else
          eval("son.options["+i+"]=new Option("+stringa+i+".text,"+stringa+i+".value)")
      i++;
    }
    //son.focus();
    i=1;
    combostatus='';
    cstatus=stringa.split("_");
    while (cstatus[i]!=null)
    {
      combostatus=combostatus+cstatus[i];
      i=i+1;
    }
    return combostatus;
  }
}
</script>

</head>
<body>
<form>
<select name="combo0" id="combo_0" onChange="change(this);"
style="width:200px;">
<option value="value1">-select-</option>
<option value="value2">1</option>
<option value="value3">2</option>
</select>
<BR><BR>
<select name="combo1" id="combo_1" onChange="change(this)"
style="width:200px;">
<option value="value1">  </option>
</select>
<BR><BR>
<select name="combo2" id="combo_2" onChange="change(this);"
style="width:200px;">
<option value="value1">  </option>
</select>
<BR><BR>
<select name="combo3" id="combo_3" onChange="change(this);"
style="width:200px;">
<option value="value1">  </option>
</select>
</form>
<BR><center><a href='http://www.js-examples.com'>JS-Examples.com</a></center>
</body>
</html>


RPC OVER HTTP for Exchange server 2003

http://www.petri.co.il/configure_rpc_over_https_on_a_single_server.htm

[JavaScript] 값 더하기

자바스크립트에서 값을 더한다.

document.cq.mla6.value = Number(document.cq.mla2.value)+ Number(document.cq.mla4.value);

[JavaScript] Object 위치 및 크기를 구하는 함수

 function GetAbsPosition(object) {
  var position = new Object;
  position.x = 0;
  position.y = 0;
 
  if( object ) {
  position.x = object.offsetLeft;
  position.y = object.offsetTop;
 
  if( object.offsetParent ) {
  var parentpos = GetAbsPosition(object.offsetParent);
  position.x += parentpos.x;
  position.y += parentpos.y;
  }
  }
 
  position.cx = object.offsetWidth;
  position.cy = object.offsetHeight;
 
  return position;
 }

<img onclick="javascript:GetAbsPosition(this);" ....

위와 같이 파라미터로 Object를 전달하면 위치 및 크기를 리턴하는 함수

비스타 64비트(x64)에서 뮤즈 플레이어 실행하기

비스타 64비트 버전에서 뮤즈의 플레이어를 실행하면
Init 단계에서 멈춘다.

이를 해결하기 위해서는

Windows\syswow64 디렉토리의
Muz로 시작되는 되어있는 모든 파일과 P3로 시작되는 모든 파일을
Windows\system32 디렉토리로 옮기고
뮤즈 플레이어를 실행하면

download 단계를 이후 정상적으로 실행이 된다.


퍼온곳:
http://blog.naver.com/premium512/130019295977