ProjectPrometheus 중 나눌만한 Tip 들이나 기타 코드 이디엄들 등등. [[TableOfContents]] === Python 에서의 한글 사용 === Seminar:UsingIdle === java regular expression === {{{~cpp String find = "(http|https)+://([^ \t\n<>()"]+)" // 패턴 설정 Pattern pattern = Pattern.compile( find ); // 패턴 컴파일 Matcher matcher = pattern.matcher( html ); // 패턴 찾기 matcher.group(1); // 사용 (교체하거나 여러가지 할수 있음) }}} regular expression 패턴을 정의하기 위해서 ["Komodo"] 를 이용할 수도 있다. 또는 Seminar:TddRegularExpression 을 시도해보는 것도 좋다. ["1002"] 는 Python Interpreter 를 이용, 표현식을 찾아냈다. === servlet 에서 한글 출력 === {{{~cpp setContentType }}} 에서 charset 에 euc-kr 를 추가해준다. {{{~cpp public class HelloWorldApp extends HttpServlet { protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { httpServletResponse.setContentType("text/html; charset=euc-kr"); PrintWriter out = httpServletResponse.getWriter(); out.println(" " + "한글 테스트..." + ""); } } }}} === 쓰기 좋은 타이머 === Wiki:SandglassProgramming ---- 물리적인 모래시계가 없을 경우 사용할만한 모래시계 소프트웨어 * 멀티 타이머 http://www.programming.de/cpp/timer.zip 동시에 10개의 타이머 설정 가능. 카운트 다운, 카운트 업 가능. 멈췄다가 프로그램을 다시 시작할 때 지난 시간에서 resume 가능. 단, 메모리 누수 버그가 있다. * 마이크로 에그 타이머 http://users.informatik.fh-hamburg.de/~rohde_i/eggtimer/mr-egg-z.zip 단순하지만 매우 편리한 타이머. 태스크 바에서 남은 시간을 확인 가능 === ISBN 이란? === * http://rs2.riss4u.net/librarian_ch/list/rule/rule_06.html * http://www.kpa21.or.kr/chulpan/200106/200106_07.htm == HTTP Protocol == === HTTP GET, POST 넘기기 === Python 에서는 urllib 와 httplib 를 이용한다. Python document 의 httplib - examples 를 참조하면 GET 의 예와 POST 의 예가 나온다. Java 에서는 HttpURLConnection 을 이용한다. 관련 코드는 http://www.javafaq.nu/tips/servlets/index.shtml 를 참조. {{{~cpp Connection.setRequestProperty("Content-Type", "text/plain"); }}} === HttpUrlConnection 에서 GET,POST 넘길때 주의사항 === Python 에서의 string.urlencode 과 마찬가지로 GET,POST 로 넘기기 전 파라메터에 대해 URL Encoding 이 필요하다. URLEncoder 라는 클래스를 이용하면 된다. {{{~cpp import java.net.URLEncoder; . . . URLEncoder.encode (paramString, "UTF-8"); }}} === GET, POST 인자의 내용중 한글을 받을때 주의 사항 === {{{~cpp protected void service( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //super.service(request, response); response.setContentType("text/html; charset=euc-kr"); request.setCharacterEncoding("KSC5601"); String serviceName = (String) request.getParameter("service"); }}} getParameter 가 호출되기 전에 request의 인코딩이 세팅되어야 한다. 현재 Prometheus의 Controller의 경우 service 의 명을 보고 각각의 서비스에게 실행 권한을 넘기는데, 가장 처음에 request의 characterEncoding 을 세팅해야 한다. 차후 JSP/Servlet 컨테이너들의 업그레이드 되어야 할 내용으로 생각됨 자세한 내용은 http://javaservice.net/~java/bbs/read.cgi?m=appserver&b=engine&c=r_p&n=957572615 참고 === HTTP Cookie 넘기기 === Cookie 는 보내는쪽 HTTP Protocol 의 Header 부분에 'Cookie: a=1; b=2; c=3' 식으로 쓰여진다. 받는쪽에서는 "Set-Cookie: a=10" ... 식으로 날라온다. 다음은 Python 을 이용, Cookie, GET/POST 변수들을 채운뒤 해당 사이트의 결과물을 인쇄하는 소스. ["cookieSend.py"] == Resin == === default root 정의 & 포트 수정 === root 디렉토리는 태그부분을, port 는 부분을 수정한다. 둘 다 태그 하위에 있다. === default utility === resin 에서 홈 디렉토리를 변경하거나 resin 이 실행될때 기본적으로 생기는 디렉토리들(example 등)이 있다. 이는 라는 태그로 정의되어있다. 삭제하고 싶다면 '/' 외의 다른 web-app에 등록된 것들을 삭제해주면 된다. === Resin 에서 DB POOL Setting === resin.conf 에 다음을 셋팅해준다. ( 태그 안쪽에 삽입) {{{~cpp jdbc/'reference 이름' javax.sql.DataSource }}} === Resin 을 NT,2000 의 Service 로 등록 === resin 을 실행할 때 다음과 같이 실행 {{{~cpp httpd -install }}} 그리고, 제어판-관리도구-서비스 에서 resin web server 서비스를 시작 시킨다. === JNDI로 resin에서 JDBC 코드 작성 일반적인 순서 === 1. Context - environment 얻고 2. environment 변수를 근거로 Data Source 얻고 3. Data Source 를 근거로 Connection 얻고 Connection 을 이용. 4. Connection 객체로 Statement 객체를 얻고 5. Statement 객체로 SQL 수행. ResultSet 객체 얻기. 6. ResultSet 객체 이용하기. {{{~cpp Context env = ( Context )( new InitialContext().lookup( "java:comp/env" ) ); DataSource source = ( DataSource )( env.lookup( "jdbc/zeropage" ) ); conn = source.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("......... some query statement ..................."); while (rs.next()) { rs.getString(1); // 순서에 따라.. 첫번째 : 1번... . . . } }}} ZeroPageServer 웹 프로그램을 만들어서 미리 읽어볼 소스를 주신 선우형에게 감사드리며~! 형 덕택에 resin 셋팅 & JDBC 접근 방법 한방에 되었어여..~ -- PP 팀 일동 == ETC == === ZeroPageServer 에서 UnitTest === ZeroPageServer 에 릴리즈 한뒤 UnitTest 하기. build_zpLocal.xml ( .../Prometheus/bin 에 빌드하는 스크립트 ) 를 이용, 실행되는 위치와 관계없는 곳에 일단 컴파일을 하고, 테스트를 돌리게 한다. {{{~cpp .../Prometheus$ ant -buildfile build_zpLocal.xml .../Prometheus$ java -cp "$CLASSPATH:./bin" junit.textui.TestRunner org.zeropage.prometheus.test.AllAllTests ......................................... ............................... Time: 189.444 OK (72 tests) }}} * ["Ant"] 에서 ["JUnit"] 을 실행시키는 방법이 있다고 한다. 추후 알아볼것.~! === 안전하게 UI 수정하기 === ["Ant"] 를 이용하면 된다. Ant 의 경우 컴파일 & 배포할때 수정된 화일만 덮어쓰기를 한다. CVS & ["Ant"] 조합이면 해결이라 생각. ---- ["ProjectPrometheus"]