# cd /usr/local # sh ~/src/jdk-6u30-solaris-i586.sh # sh ~/src/jdk-6u30-solaris-x64.sh # ln -s jdk1.6.0_30 java # vi /etc/profile ... if [ -d /usr/local/java ]; then PATH=/usr/local/java/bin:$PATH; export PATH; JAVA_HOME=/usr/local/java; export JAVA_HOME; JDK_HOME=/usr/local/java; export JDK_HOME fi # . /etc/profile
root@wl ~/src # wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-7/v7.0.23/bin/apache-tomcat-7.0.23.tar.gz root@wl ~/src # cd /usr/local root@wl /usr/local # tar xvfz ~/src/apache-tomcat-7.0.23.tar.gz root@wl /usr/local # ln -s apache-tomcat-7.0.23 tomcat단순히 압축만 풀어줘도 [/usr/local/tomcat/bin/startup.sh] 를 사용해 톰캣을 실행할 수 있다. 하지만 아래에 소개된 몇가지 설정을 고려해보자.
root@wl ~/src # wget http://apache.mirror.cdnetworks.com//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.32-src.tar.gz root@wl ~/src # tar xvfz tomcat-connectors-1.2.32-src.tar.gz root@wl ~/src # cd tomcat-connectors-1.2.32-src/native root@wl ~/tomcat-connectors-1.2.32-src/native # ./configure --with-apxs=/usr/local/apache2/bin/apxs root@wl ~/tomcat-connectors-1.2.32-src/native # make root@wl ~/tomcat-connectors-1.2.32-src/native # make install root@wl ~/tomcat-connectors-1.2.32-src/native # cd ../conf root@wl ~/tomcat-connectors-1.2.32-src/conf # cp httpd-jk.conf /usr/local/apache2/conf/extra/ root@wl ~/tomcat-connectors-1.2.32-src/conf # cp uriworkermap.properties /usr/local/apache2/conf/extra/ root@wl ~/tomcat-connectors-1.2.32-src/conf # cp workers.properties.minimal /usr/local/apache2/conf/workers.properties커넥터 설정은 다음 챕터를 참고하자.
정보: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: ...
root@wl /usr/local/tomcat/bin # tar xvfz tomcat-native.tar.gz root@wl /usr/local/tomcat/bin # cd tomcat-native-1.1.22-src/jni/native root@wl /usr/local/tomcat/bin/tomcat-native-1.1.22-src/jni/native # ./configure --prefix=/usr/local --with-apr=/usr/local/apache2 1) root@wl /usr/local/tomcat/bin/tomcat-native-1.1.22-src/jni/native # make root@wl /usr/local/tomcat/bin/tomcat-native-1.1.22-src/jni/native # make install 2)1) 아파치2의 APR 라이브러리를 사용하고, /usr/local 에 설치한다.
root@wl /usr/local/tomcat/bin # tar xvfz commons-daemon-native.tar.gz
root@wl /usr/local/tomcat/bin # cd commons-daemon-1.0.7-native-src/unix
root@wl /usr/local/tomcat/bin/commons-daemon-1.0.7-native-src/unix # ./configure --with-java=/usr/java
root@wl /usr/local/tomcat/bin/commons-daemon-1.0.7-native-src/unix # make
root@wl /usr/local/tomcat/bin/commons-daemon-1.0.7-native-src/unix # cp jsvc ../..
root@wl /usr/local/tomcat/bin/commons-daemon-1.0.7-native-src/unix # cp samples/Tomcat7.sh ../..
root@wl /usr/local/tomcat/bin/commons-daemon-1.0.7-native-src/unix # cd ../..
root@wl /usr/local/tomcat/bin # useradd -u 210 tomcat
root@wl /usr/local/tomcat/bin # ./Tomcat7.sh start 1)
1) [startup.sh], [shutdown.sh] 대신 [Tomcat7.sh start], [Tomcat7.sh stop]를 사용해야 한다. (아니면 catalina.sh 를 적당히 수정하면 된다) 이 문서는 Commons Daemon를 사용하지 않았으므로, Tomcat7.sh으로 표기하지 않았다.
root@wl ~ # vi /usr/local/tomcat/conf/tomcat-users.xml <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager" /> <role rolename="manager-gui" /> <role rolename="manager-script" /> <role rolename="manager-jmx" /> <role rolename="manager-status" /> <user username="tomcat" password="s3cret" roles="manager-gui,manager-script,manager-jmx,manager-status" /> </tomcat-users>GET 메소드에서, 한글입력을 위해 Connector 태그에 아래와 같이 추가한다.
root@wl ~ # vi /usr/local/tomcat/conf/server.xml 1)
<!-- Connector 태그에 useBodyEncodingForURI="true" 또는 URIEncoding="UTF-8" 속성을 추가한다. -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForURI="true" />
<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" connectionTimeout="20000" />
root@wl ~ # vi /usr/local/apache2/conf/httpd.conf 1) ... # mod_jk Include conf/extra/httpd-jk.conf root@wl ~ # vi /usr/local/apache2/conf/extra/httpd-jk.conf ... JkWorkersFile conf/workers.properties 1) ... JkMountFile conf/extra/uriworkermap.properties 1) ... # JkMount /*.jsp ajp13 root@wl ~ # vi /usr/local/apache2/conf/workers.properties worker.list=wlb,jkstatus,jk-status,jk-manager 2) ... worker.jk-status.type=status 3) worker.jk-status.read_only=true 3) worker.jk-manager.type=status 3) root@wl ~ # vi /usr/local/apache2/conf/extra/uriworkermap.properties ... /*.jsp=wlb 3)1) 보기와 같이 주석 표시(#)를 지운다.
root@wl ~ # /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.23 Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.23 Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.23/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/apache-tomcat-7.0.23/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.23/bin/tomcat-juli.jar톰캣 종료는 단지 shutdown.sh 을 실행하면 된다.
root@wl ~ # /usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.23 Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.23 Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.23/temp Using JRE_HOME: /usr/local/java Using CLASSPATH: /usr/local/apache-tomcat-7.0.23/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.23/bin/tomcat-juli.jar
| 톰캣 시작 화면 http://localhost:8080 |
톰캣 매니저 화면 http://localhost:8080/manager/html |
![]() |
![]() |
tomcat_test.jsp | 다운로드 (845 바이트) |
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
%><?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head><title>윈디하나의 솔라나라: TOMCAT - TOMCAT TEST</title></head>
<body><pre>
클래스경로: <%=System.getProperty("java.class.path",".")%>
라이브러리경로: <%=System.getProperty("java.library.path", ".")%>
파라메터: <%=request.getParameter("param")%> ('한글'이라고 표기되어야 함)
파일인코딩: <%=System.getProperty("file.encoding")%>
시스템캐릭터셋: <%=java.nio.charset.Charset.defaultCharset().name()%>
페이지캐릭터셋: <%=response.getCharacterEncoding()%>
서블릿 경로: <%=application.getRealPath("")%>
</pre></body>
</html>
http://localhost:8080/tomcat_test.jsp?param=%ED%95%9C%EA%B8%80 와
http://localhost/tomcat_test.jsp?param=%ED%95%9C%EA%B8%80 에 접속해서, 아래화면과 비슷하게 보여야 한다.
tomcat_connstatus.jsp | 다운로드 (3,980 바이트) |
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.*,javax.management.*,org.apache.tomcat.util.modeler.Registry"
%><%!
public static String padRight(String s, int n) {
return String.format("%1$-" + n + "s", s);
}
public static String padLeft(String s, int n) {
return String.format("%1$#" + n + "s", s);
}
public static String formatTime(Object obj, boolean seconds) {
long time = -1L;
if (obj instanceof Long) {
time = ((Long) obj).longValue();
} else if (obj instanceof Integer) {
time = ((Integer) obj).intValue();
}
if (seconds) {
return ((((float) time ) / 1000) + " s");
} else {
return (time + "ms");
}
}
public static String formatSize(Object obj, boolean mb) {
long bytes = -1L;
if (obj instanceof Long) {
bytes = ((Long) obj).longValue();
} else if (obj instanceof Integer) {
bytes = ((Integer) obj).intValue();
}
if (mb) {
StringBuilder buff = new StringBuilder();
if (bytes < 0) {
buff.append('-');
bytes = -bytes;
}
long mbytes = bytes / (1024 * 1024);
long rest =
((bytes - (mbytes * (1024 * 1024))) * 100) / (1024 * 1024);
buff.append(mbytes).append('.');
if (rest < 10) {
buff.append('0');
}
buff.append(rest).append("MiB");
return buff.toString();
} else {
return ((bytes / 1024) + "KiB");
}
}
%><?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head><title>윈디하나의 솔라나라: TOMCAT - CONNECTION STATUS</title></head>
<body><pre>
수행시간 IP URL 호스트명 받음 보냄 커넥터명
-------- --------------- ---------------------- ---------- ---- ---- ----------
<%
// 아래 소스 참고
// org.apache.catalina.manager.StatusManagerServlet
// org.apache.catalina.manager.StatusTransformer
MBeanServer mBeanServer = Registry.getRegistry(null, null).getMBeanServer();
Vector<ObjectName> requestProcessors = new Vector<ObjectName>();
String onStr = "*:type=RequestProcessor,*";
ObjectName objectName = new ObjectName(onStr);
Set<ObjectInstance> set = mBeanServer.queryMBeans(objectName, null);
Iterator<ObjectInstance> iterator = set.iterator();
while (iterator.hasNext()) {
ObjectInstance oi = iterator.next();
requestProcessors.addElement(oi.getObjectName());
}
Enumeration<ObjectName> enumeration = requestProcessors.elements();
while (enumeration.hasMoreElements()) {
objectName = (ObjectName) enumeration.nextElement();
String workerName = objectName.getKeyProperty("worker");
int stageValue = (Integer) mBeanServer.getAttribute(objectName, "stage");
String URL = (String) mBeanServer.getAttribute(objectName, "currentUri");
if (stageValue >= 1 && stageValue <= 7 && URL != null) {
String queryString = (String) mBeanServer.getAttribute(objectName, "currentQueryString");
out.write(padLeft(formatTime(mBeanServer.getAttribute(objectName, "requestProcessingTime"), false), 8));
out.write(" " + padLeft(((String) mBeanServer.getAttribute(objectName, "remoteAddr")).trim(), 15));
out.write(" " + padLeft(URL + (queryString != null ? "?" + queryString : ""), 22));
out.write(" " + padRight(mBeanServer.getAttribute(objectName, "virtualHost").toString(), 10));
out.write(" " + formatSize(mBeanServer.getAttribute(objectName, "requestBytesReceived").toString(), false));
out.write(" " + formatSize(mBeanServer.getAttribute(objectName, "requestBytesSent").toString(), false));
out.write(" " + workerName);
out.write("\n");
}
}
%></pre></body>
</html>
톰캣 매니저의 톰캣 상태 확인 페이지에서, 접속 상태(URL, 시간, 보낸 크기, 받은 크기, 접속한 톰캣 커넥터 이름 등)만 볼 수 있도록 프로그램을 재 구성했다. 아래와 유사하게 표시될 것이다.
수행시간 IP URL 호스트명 받음 보냄 커넥터명
-------- --------------- ---------------------- ---------- ---- ---- ----------
1ms 192.168.0.100 /tomcat_connstatus.jsp localhost 0KiB 0KiB "http-bio-8080"





|
|
Copyright © 2004-2012 Jo HoSeok. All rights reserved. |