2. java regular expression ¶
~cpp
String find = "(http|https)+://([^ \t\n<>()"]+)" // 패턴 설정
Pattern pattern = Pattern.compile( find ); // 패턴 컴파일
Matcher matcher = pattern.matcher( html ); // 패턴 찾기
matcher.group(1); // 사용 (교체하거나 여러가지 할수 있음)
3. 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("<HTML> " +
"한글 테스트..." +
"</HTML>");
}
}
4. 쓰기 좋은 타이머 ¶
물리적인 모래시계가 없을 경우 사용할만한 모래시계 소프트웨어
7. HTTP GET, POST 넘기기 ¶
Python 에서는 urllib 와 httplib 를 이용한다. Python document 의 httplib - examples 를 참조하면 GET 의 예와 POST 의 예가 나온다.
Python 에서의 string.urlencode 과 마찬가지로 GET,POST 로 넘기기 전 파라메터에 대해 URL Encoding 이 필요하다.
URLEncoder 라는 클래스를 이용하면 된다.
~cpp
import java.net.URLEncoder;
.
.
.
URLEncoder.encode (paramString, "UTF-8");
9. 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");
10. HTTP Cookie 넘기기 ¶
Cookie 는 보내는쪽 HTTP Protocol 의 Header 부분에 'Cookie: a=1; b=2; c=3' 식으로 쓰여진다.
받는쪽에서는 "Set-Cookie: a=10" ... 식으로 날라온다.
다음은 Python 을 이용, Cookie, GET/POST 변수들을 채운뒤 해당 사이트의 결과물을 인쇄하는 소스.
cookieSend.py
12. default root 정의 & 포트 수정 ¶
root 디렉토리는 <doc-dir> 태그부분을, port 는 <http port='____'> 부분을 수정한다.
둘 다 <http-server> 태그 하위에 있다.
13. default utility ¶
resin 에서 홈 디렉토리를 변경하거나 resin 이 실행될때 기본적으로 생기는 디렉토리들(example 등)이 있다.
이는 <web-app> 라는 태그로 정의되어있다. 삭제하고 싶다면 '/' 외의 다른 web-app에 등록된 것들을 삭제해주면 된다.
14. Resin 에서 DB POOL Setting ¶
resin.conf 에 다음을 셋팅해준다. (<caucho.com> 태그 안쪽에 삽입)
~cpp
<resource-ref>
<res-ref-name>jdbc/'reference 이름'</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="org.gjt.mm.mysql.Driver 식으로 드라이버 이름"/>
<init-param url="jdbc:mysql://서버주소:서버IP/reference 이름"/>
<init-param user="DB 사용자 ID"/>
<init-param password="DB 사용자 Password"/>
<init-param max-connections="20"/>
<init-param enable-transaction="false"/>
</resource-ref>
15. Resin 을 NT,2000 의 Service 로 등록 ¶
resin 을 실행할 때 다음과 같이 실행
~cpp
httpd -install
그리고, 제어판-관리도구-서비스 에서 resin web server 서비스를 시작 시킨다.
16. JNDI로 resin에서 JDBC 코드 작성 일반적인 순서 ¶
- Context - environment 얻고
- environment 변수를 근거로 Data Source 얻고
- Data Source 를 근거로 Connection 얻고 Connection 을 이용.
- Connection 객체로 Statement 객체를 얻고
- Statement 객체로 SQL 수행. ResultSet 객체 얻기.
- 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 팀 일동
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 을 실행시키는 방법이 있다고 한다. 추후 알아볼것.~!
19. 안전하게 UI 수정하기 ¶
Ant 를 이용하면 된다. Ant 의 경우 컴파일 & 배포할때 수정된 화일만 덮어쓰기를 한다. CVS &
Ant 조합이면 해결이라 생각.