jdbc
java+servlet+xml
이런 개발 환경을 구축할려면, 몇가지 과정이 있어서 헤깔리고 힘든 경우가 많다. 다음 글에서 Windows 에서 이러한 환경을 구축하는데 조금이라도 도움이 되길 바란다. 다음은 대략적인 과정만을 설명한 것으로 이런 환경을 원하는 사람들 에게 초기 도움이 되기를 원한다.
1.사전 설정
처음 설치시 라이센스 등도 문제가 되는 경우가 많으므로 약간의 주의를 기울이기 바란다. 일단 다음과 같이 하면 크게 문제가 될것 같지는 않다.
(1) jdk의 설치
SUN 사이트에서 Java(TM) 2 Platform, Standard Edition (을)를 구할 수있다.
(인스톨 후에, JAVA_HOME=F:\jdk1.3.1(※주의-F:는 설치 드라이브)으로 환경 변수를 설정한다.)
(2) Servlet[Tomcat]의 설치
Jakarta Project 에서 Tomcat3.2.3 패키지를 설치하길 권장한다. ---binary 패키지로 설치하길 추천한다.
(source로부터 build 하고 싶은 분은, ant, servletapi, tomcat 이 필요합니다.)
※build 과정은 자세한 정보를 제공하는 사이트가 있으므로 여기서는 언급하지 않겠습니다.
(3) XML parser (JAXP)의 설치
SUN 사이트에서 Java(TM) Technology & XML 을 구하여 설치할수 있습니다.
(상기, Tomcat3.2.3 binary에 포함되어 있기 때문에 source로부터 build 할 필요없으므로 그쪽을 사용하길 권장합니다.)
2.Apache와의 제휴 환경의 설정
jakarta-tomcat은 그 자체로 web-server 의 기능도 가지고 있습니다. 그러나, Apache 와 연동하는 쪽이 속도적, 기능면에서 훨씬 뛰어 나므로 일반적인 서버 환경에서 설치하는 방법입니다. 그러므로 비록 개발 환경이라고 해도 Apache 와 연동하는 방식으로 동작시키는 것이 더 좋을 듯 합니다.
(1) Tomcat의 초기설정 및 기동
일단 bin 디렉토리 내의 startup.bat를 기동합니다.
이렇게 하면 conf 디렉토리 내에서 자동으로―auto 관련의 각종 설정 파일들이 완성됩니다.
브라우저로 http://localhost:8080/ 로 하면 tomcat 이 기동되는 것을 확인할수 있습니다.(^.^) 여기서 일단 종료시킵니다.
(2) mod_jk.conf의 작성
conf/mod_jk.conf-auto 를 conf/mod_jk.conf 로 복사합니다.
conf/mod_jk.conf 를 추가적으로 수정합니다.
LoadModule jk_module mod_jk.dll
※ 참고로 이부분은 일본어 설정 관련이며 이글이 원래 일본글의 번역인지라 이 부분이 포함되어 있습니다.
(3) server.xml 의 수정
Apache 와 연동하기 위해서 web-server 기능을 오프로 합니다.
<!-- Normal HTTP -->
<!-- Apache link
<Connector className="org.apache.tomcat.service.PoolTcpConnector">
<Parameter name="handler"
value="org.apache.tomcat.service.http.HttpConnectionHandler"/>
<Parameter name="port"
value="8080"/>
</Connector>
Apache link -->
(4) Apache의 config/httpd.conf 의 마지막줄에 아래와 같이를 추가합니다.
Include F:\jakarta-tomcat-3.2.3/conf/mod_jk.conf
(5) Jakarta 어댑터의 설정
mod_jk.dll, jni_connect.dll를 ApacheCore.dll 이 있는 장소에 인스톨 합니다.
(source로부터 build 하는 분은, tomcat-3.2.3-src\src\native\apache1.3 아래에 build-source가 있습니다.)
3. postgres-jdbc 드라이버의 설정
postgresql-7.1.3 의 jdbc 는 Jan-17-2001 판입니다.
(1) postgresql.jar(※주의, JDBC2입니다)를 CLASSPATH에 추가해 주세요.
(2) jdbc 동작 테스트
interface\jdbc 내의 example\psql로 동작 시켜 보겠습니다.
(JAVA-VM만으로 동작시키기 때문에 standalone라면 jdk1.3.1만으로 동작합니다.)
java example.psql jdbc:postgresql://localhost/Administrator Administrator ""
PostgreSQL psql example v6.3 rev 1
Connecting to Database URL = jdbc:postgresql://localhost/Administrator
Connected to PostgreSQL 7.1.3
psql:1> \dt
TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
급여 정보 TABLE no remarks
경력 정보 TABLE no remarks
사원 명부 TABLE no remarks
s시스 정의 TABLE no remarks
tx TABLE no remarks
kanji TABLE no remarks
psql:2> create table 테이블 정의 (연번 char(6) not null, 라벨명 char(20) not null, db명칭 char(60) not null, 항목명 char(60) not null, 행수 char(2) not null, 렬수 char(2) not null);
Updated 1 rows
psql:3> insert into 테이블 정의 values('000101', '와', '데이타베이스', '넣은', '20', '6');
Updated 1 rows
psql:4> select * from 테이블 정의;
연번 라벨명 db명칭 항목명행 수열수
000101 와 데이타베이스 넣은 20 6
psql:5>\q
※이것이 동작하면 PostgreSQL-JDBC 드라이버 세팅은 OK입니다.
4. servlet 동작 샘플
(1) server.xml에 등록
새롭게, web용 디렉토리를 등록(ex. pghome) 합니다.
<!-- PG_servlet exsample Add -->
<Context path="/pghome"
docBase="webapps/pghome"
crossContext="true"
debug="0"
reloadable="true">
</Context>
(2) mod_jk.conf 에 등록
새롭게 web용 디렉토리 정보를 등록(ex. pghome) 합니다.
Alias /pghome "F:/jakarta-tomcat-3.2.3/webapps/pghome"
<Directory "F:/jakarta-tomcat-3.2.3/webapps/pghome">
Options Indexes FollowSymLinks
</Directory>
JkMount /pghome/servlet/* ajp12
JkMount /pghome/*.jsp ajp12
<Location "/pghome/WEB-INF/">
AllowOverride None
deny from all
</Location>
<Directory "F:/jakarta-tomcat-3.2.3/webapps/pghome/WEB-INF/">
AllowOverride None
deny from all
</Directory>
<Location "/pghome/META-INF/">
AllowOverride None
deny from all
</Location>
<Directory "F:/jakarta-tomcat-3.2.3/webapps/pghome/META-INF/">
AllowOverride None
deny from all
</Directory>
(3) webapps아래에servlet 동작 샘플을 전개합니다.
servlet 구성은, 아래와 같은 구성이 되어 있습니다.
index.html 탑
servlet/ Auto-Reload Servlet-class
Web-inf/web.xml Servlet 의 등록이나 매핑, MIME 매핑등을 정의한다.
web-inf/classes/ Servlet-Class
Meta-inf/mainfest.mf MANIFEST
※PostgreSQL 데이타베이스의 사원 명부 테이블은, 전술의 PHP로 작성한 것을 사용합니다.
(4) Jakarta-tomcat 과 Apache를 기동합니다.
Jakarta-tomcat은 bin\startup.bat 에 의해 기동합니다.
2001-09-11 04:14:54 - ContextManager: Adding context Ctx( /pghome )
Starting tomcat. Check logs/tomcat.log for error messages
2001-09-11 04:14:54 - ContextManager: Adding context Ctx( /admin )
2001-09-11 04:14:54 - ContextManager: Adding context Ctx( /examples )
2001-09-11 04:14:54 - ContextManager: Adding context Ctx( )
2001-09-11 04:14:54 - ContextManager: Adding context Ctx( /test )
2001-09-11 04:14:56 - PoolTcpConnector: Starting Ajp12ConnectionHandler on 8007
Apache/1.3.20 (Win32) mod_jk running...
(5) pg_servlet 샘플의 동작 확인
http://localhost/pghome/servlet/pg_servlet/ 로 지정해 보세요.
사원 명부
사원번호 이름 후리가나 메일
00101 사이토 타로 사이트우 타로우 sai01@postgresql.org
00200 후쿠하라 지로 후크하라 시″로우 fukuchan@postgresql.org
00311 쿠와무라 이치로 쿠웜라 이치로우 kuwamu@postgresql.org
00412 이시이 요시코 이시이 요시코 ishii@postgresql.org
원시 코드(상기)
pg_servlet
// ************************************************************************
// * PostgreSQL Servlet exsample
// * 2001.09.10 H.saito
// ************************************************************************
import java.io.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
//
// package postgresql;
//
public class pg_servlet extends HttpServlet
{
private Connection handler;
public void init() throws ServletException
{
String PGUrl = "jdbc:postgresql://localhost/Administrator";
String PGUser = "Administrator";
String PGPasswd = "";
try{
Class.forName("org.postgresql.Driver");
handler = DriverManager.getConnection(PGUrl, PGUser, PGPasswd);
}
catch (Exception ex){
throw new
ServletException("JDBC Error");
}
}
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try{
Statement ex_stmt = handler.createStatement();
String query ="SELECT * FROM 사원 명부 ";
ResultSet rs = ex_stmt.executeQuery(query);
response.setContentType("text/html; charset=sjis");
PrintWriter out = response.getWriter();
out.println("");
out.println("JDBC driver function test");
out.println("");
out.println("사원 명부 ");
out.println("");
out.println("사원 번호 | 이름 | 후리가나 | 메일 | ");
while(rs.next()){
String numb = rs.getString(1);
String name = rs.getString(2);
String furi = rs.getString(3);
String email = rs.getString(4);
out.println("" + "" + numb + " | " + "" + name + " | " +
"" + furi + " | " + "" + email + " | " + " ");
}
out.println(" ");
out.println(" |