반응형

1. SQLMap.xml

<![CDATA [ SELECT * FROM TEST WHERE $[CON_01]]]>해주고

<where id=”CON_01”>AND MAIN_CD IN (?)</where>

 

2. l_iwhere 해당하는 조건 값이 있으면 수행하고 없으면 통과

Java: i_where.addwhereIn (“CON_01”, “PARAM”, l_DatasetUtils.getBindValue(input, 0, “MAIN_CD”).split(“,”))

Input 으로 들어온 MAIN_CD0번째를 ,로 짤라서 Param에 담는다.


반응형
반응형

예전 익스플로러 4,5 대 에서는 인식 문제 때문에 사용했었다.

자바스크립트 해석기가 없어 화면에 스크립트 그대로 출력했었다. 요즘엔 안하는 게 좋다.

(<!--//-->는 마크업 공통 주석 처리 방식이다.)

 

Javascriptclient측이다. 즉 브라우저 뜨고나서 실행시 시작된다.

Jsp는 서버측으로 화면 브라우저에 보여주는 순간 끝이다.

그렇기 때문에 javascript 파라미터 값에 <%=%>는 안되는 것으로 알고 있다.

사용하려면 변수에 <%=%>담고, 그것을 호출하는 식으로 처리해야한다.

반응형
반응형

xdoclet은 컴포넌트 별로 정의된 태그를 자바소스에 사용함으로 인해
자바소스 및 Descriptor파일을 자동으로 생성할 수 있는 방식.

사용이유: 자바소스가 수정될 경우 소스코드 하나만 관리하면 되기 때문에 개발시간의
단축효과 볼수 있다. (자바소스와 Descriptor와의 동시성 유지)

사용하려면: 우선 Ant가 있어야 한다.
1. xdoclet.sourceforge.net
2. web.xml
에 정의하고자 하는 내용을
/*@web.servlet name="~" @web.servlet~*/

서블리에 정해진 태그를 이용하여 추가(java파일에)

web.xml :
웹 어플리케이션의 배치 descriptor
<servlet><servletMapping>

3.
커스텀 태그 (tag 정보 가지는 tld)생성할 때 사용
(
커스텀 태그 클래스에 정의 )
/*@jsp.tag name="~"*/

4. struts-config

/*@struts.action name=”~” path=”~”*/

 

동작:

Browse-> web.xml(Servlet Action)-> struts-config.xml-> LoginAction-> LoginForm-> JSP View

 

) <action path=”/selectcode” type=”selectAction” name=”selectForm” selectcode.do>

selectAction을 찾아가 selectForm을 가지고

반응형
반응형

taglib는 공개된 커스텀 라이브러리이다.
jakarta.apache.org/taglibs

커스텀 태그를 사용하는 이유: 디자인과 프로그램을 분리하기 위해서이다.

설정: 톰캣 server.xml 파일에 <HOST>태그에서 unpackWARS="true"면
~~~.war(taglib파일)을 톰캣의 <CATALINA_HOME>/webapps에 복사한다. (잠시 압축풀리며 디렉토리를 생성한다.)

다른곳에서 사용: /WEB-INF 아래 /lib 만들어서
1. 압축풀린 ~~~를 /WEB-INF/lib에 ***.jar파일과 common_lang.jar복사한다.
2. /WEB-INF아래에 ~~.tld복사한다.
(jsp에서 실제 동작하는 태그핸들러와 사용하는 태그를 연결해주는 역할이다. xml파일형식)
3. web.xml에 파일을 등록한다.
<taglib><taglib-uri>~</taglib-uri></taglib>
4. jsp소스에서는 <%taglib uri="tld가 있는 위치" prefix="str" %>선언한다.
<%@taglib%> 에서 prefix="str" 소스에서 커스텀 태그 적용된부분으로 <str:> 로 시작하는 태그이다.
예) <str:upperCase>Test</str:upperCase>
<tag>
<name>upperCase</name>
<tag-class>java파일</tag-class>
반응형
반응형

PGA영역을 늘리면 메모리 효율성이 떨어진다.
1M면 될것을 10M잡으면 100명이 붙을때 100M로 끝날 것을 1G사용하게 되기 때문이다.


버퍼킵은 DISK  I/O가 안일어나고 미리 소트되어 있으니 빠르다.
M-VIEW는 대용량 DML이 일어나면 쓰면 안된다.(DML시 VIEW도 같이 수정 및 메모리에 올려야 되니까)
(그만큼 SGA영역에 여유가 필요하다.)
M-VIEW는 물리적 존재하는 VIEW다.

반응형
반응형


esc와 back-space 클릭 방지




TextBox에 readonly 속성이 걸려있을 경우 백스페이스 삭제시 뒤로가기가 된다. 그걸 방지 하기 위한 스크립트.

/*

 ******************************************
 * 2005-08-10
 * 박 이 수
 * esc와 back-space 클릭 방지
 ******************************************
 */
document.onkeydown=checkKey;

function checkKey(){
 //alert("You pressed a following key: "+window.event.keyCode);
 // ESC Key 누를 때 데이터 사라지는 것 방지
 if(window.event.keyCode == 27){
  window.event.returnValue = false;
  return;
 }

 // back-space 누를 때
 if(window.event.keyCode == 8){

  // TextEdit가 아니면 작동하지 않도록
  if(!window.event.srcElement.isTextEdit){
   window.event.returnValue = false;
   return;
  }else if(window.event.srcElement.readOnly || window.event.srcElement.disabled){
   // readOnly나 disabled인 경우 작동하지 않도록
   window.event.returnValue = false;
   return;
  }
 }
 
 event.returnValue = true;
}

반응형
반응형

소스참조: http://www.ibm.com/developerworks/library/x-tipent.html

원인)
xml validation을 하다보면 (builder.parse~~부분)
xml파일이 있는 경로에 dtd이 없거나, 현재 시스템이 사용중인 디렉토리에서 계속 dtd를 읽어들어
dtd파일을 찾을 수 없어 validation을 처리할 수 없는 경우를 종종 경험했다.

예) xml 문서에
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Message PUBLIC "-//LEE//JIN" "TEST.dtd">
...............
와 같이 되어있다면 /../../../TEST.dtd 지정된 경로에 파일을 찾을 수 없습니다.


해결방법)
EntityResolver을 사용하는 것이다.
EntityResolver를 사용하면 외부의 dtd를 두고 xml을 파싱하여 validation을 체크할 수 있다.
EntityResolver는

The Parser will call this method before opening any external entity except the top-level document entity (including the external DTD subset, external entities referenced within the DTD, and external entities referenced within the document element): the application may request that the parser resolve the entity itself, that it use an alternative URI, or that it use an entirely different input source.



소스)
class DTDResolver implements EntityResolver {
    public InputSource resolveEntity(String publicID, String systemID)
        throws SAXException {
     System.out.println(systemID.toString());
        if (systemID.equals("TEST.dtd")) {
            // Return local copy of the copyright.xml file
            return new InputSource("/lee/jin/test/TEST.dtd");
        }
        // If no match, returning null makes process continue normally
        return null;
    }
}


여기서 pulbicId와 Systemid를 받는데 xml의 doctype을 보면
<!DOCTYPE Message PUBLIC "-//LEE//JIN" "TEST.dtd">
"-//LEE//JIN" 가 publicID, "TEST.dtd"가 SystemID 이다.

그렇기에 xml문서에서 "TEST.dtd"를 만나게 되면 "/lee/jin/test/TEST.dtd"를 리턴하라는 것이다.

즉 어디에 있는 xml을 불러들이건 특정 한 경로에 dtd파일이 있으면 그것을 참조하여 xml을 파싱하기때문에 여러곳에 dtd를 넣고 작업하지 않아도 된다.

(만약 위와같이 했는데도 TEST.dtd를 찾지 못한다면 SystemID.endsWith를 사용하여 처리하면 해결 할 수 있다.)



API참고: http://download.oracle.com/javase/1.4.2/docs/api/org/xml/sax/EntityResolver.html
반응형
반응형

DTD를 기준으로 validation을 할때 사용하는 소스이다.

참조: http://www.roseindia.net/xml/dom/DOMValidateDTD.shtml

import java.io.FileInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class DOMValidateDTD {
 public static void main(String args[]) {
  String msg=null;
  try {
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
   factory.setValidating(true);
   DocumentBuilder builder = factory.newDocumentBuilder();
   

   builder.setErrorHandler(new org.xml.sax.ErrorHandler() {
    // Ignore the fatal errors
    public void fatalError(SAXParseException exception)
      throws SAXException {
    }

    // Validation errors
    public void error(SAXParseException e) throws SAXParseException {
     System.out.println(e.getMessage());
    }

    // Show warnings
    public void warning(SAXParseException err)
      throws SAXParseException {
     System.out.println(err.getMessage());
    }
   });
   
   builder.setEntityResolver(new DTDResolver());
   
   Document xmlDocument = builder.parse(new FileInputStream(
     "Test.xml"));
   
   DOMSource source = new DOMSource(xmlDocument);
   StreamResult result = new StreamResult(System.out);
   StreamResult result = new StreamResult(System.out);
   TransformerFactory tf = TransformerFactory.newInstance();
   Transformer transformer = tf.newTransformer();
   transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,  "");
   transformer.transform(source, result);
  } catch (Exception e) {
   System.out.println(e.getMessage());
  }
 }
}

1. builder.setEntityResolver(new DTDResolver()); 
- 외부 dtd가 있는 경우 그것을 참조하게 설정해 주는 DTDResolver라는 EntityResolver를 상속받는 클래스를 구현한 것이다.

2. builder.setErrorHandler(new org.xml.sax.ErrorHandler()
- 파싱중에 발생하는 에러를 처리하는 부분이다.
ㄱ. warning - 오류취급 하지 않지만 사용자에게 전달해야 할때
ㄴ. error - xml 1.0권고안 오류, 파서 더이상 실행하지 않음.
ㄷ. fatal error - 오류로 인해 파서의 계속적 수행불가 (태그 열리고 닫히는 것)

3.    Document xmlDocument = builder.parse(new FileInputStream("TEST.xml"));
xml문서를 파싱하는 부분이다.

4.    DOMSource source = new DOMSource(xmlDocument);
   StreamResult result = new StreamResult(System.out);
   TransformerFactory tf = TransformerFactory.newInstance();
   Transformer transformer = tf.newTransformer();
   transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
     "");
파싱한 문서를 다시 Transformer객체를 이용해서 xml문서를 생성해 주는 부분이다.
setOutputProperty를 사용하여 만들고자 하는 xml을 원하는 값으로 넣어준다.
위와같이    transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, ""); 로 한다면
만들어진 xml확인시 DOCTYPE이 공백으로 나올 것이다.

반응형
반응형
1. 현재 경로 확인
: System.out.println(system.getProperty("user.dir"));

cf.파일 경로를 볼땐 : File.getCanonicalPath();


2. System.exit(0)
:함수가 public void 일때 return 해주는 값이 없으므로
System.exit(0)를 하여 0을 리턴하면서 시스템을 종료 시키는 것을 의미한다.

3. StringBuffer최기화 하는 방법은
StringBuffer변수명.setLength(0);으로 해준다.

맨처음 StringBuffer를 초기화 하는것이 StringBuffe변수명 = null로 해주는 것이라 생각했다.
하지만 알아보니 null로 하는 것은
StringBuffer Object를 다시 비초기화 상태로 돌리는 것이다.

그러므로 new를 사용하거나 setLength(0)를 사용한다.
반응형
반응형

에러: provider.org.apache.xalan.processor.Transformer FactoryImpl not found
해결 방법: remove xmlparserAPIs.jar. from tomcat5/common/endorsed

반응형

+ Recent posts