Tomcat TIPS
ユーザー名もしくはパスワードを忘れてしまった。CATALINA_HOMEのconfディレクトリにtomcat-users.xmlがあります。これをエディターで開きます。 <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="tomcat"/> <role rolename="role1"/> <role rolename="manager"/> <role rolename="admin"/> <user username="tomcat" password="password1" roles="tomcat"/> <user username="role1" password="password1" roles="role1"/> <user username="both" password="password1" roles="tomcat,role1"/> <user username="admin" password="password1" roles="admin,manager"/> </tomcat-users> こんな感じになっていると思いますが、これのrolesにadminの指定があるユーザ、すなわちusename="admin"がユーザ名でpassword1がパスワードになります。 アクセスログがとりたいApacheとTomcatを連携すればいいんですが、ここではTomcatだけでお話します。 CATALINA_HOMEのconfディレクトリにserver.xmlがあります。これをエディターで開きます。 <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> --> この記述を探して、<!-- -->のコメントを削除します。その後Tomcatを再起動して、CATALINA_HOMEのlogディレクトリを見てみてください。 localhost_access_log.2004-09-25.txtみたいなファイルができていればOKです。 あるホストやアドレスだけを許可したい。または拒否したい。たとえば/adminは他のマシンからアクセスされるのは困るといった場合があります。この場合は http://localhost:8080/admin/login.jsp にいって Tomcat Web Server Administration Toolからログインします。 ログイン後、左上の Service (Tomcat-Standalone)をクリックして、 Host (localhost) をクリックします。すると対象となる Context (/admin) が表示されますのでさらにクリックします。 このときクリックするのは、名前でなくその左の虫眼鏡みたいなやつです。 ここで右上に Context Actions--利用可能なアクション--とあり、--利用可能なアクション--のコンボを選択して、新しいバルブの作成を選択します。 そこでプロパティの型をRemoteAddrValveを選択します。 ここにアドレスを追加していきます。まず自分(127.0.0.1)はいれてください。その後複数ある場合は、カンマの後に続けて記述していきます。 また192.168.1.1~192.168.1.255までを許可したい場合は、192.168.1と記述します。 ファイル一覧を表示したくないweb.xmlのorg.apache.catalina.servlets.DefaultServletServletefaultServlet?でlistingsをfalseにします。 ちなみに<load-on-startup>はServerの起動と同時にこのservletをロードすることができます。1にしてますが、ロードされる順序で値が小さいものから順に起動されます。 <servlet> <servlet-name>default2</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> また <servlet-mapping> <servlet-name>default2</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> を追加しておきます。 versionを忘れてしまったTOMCATを起動して、http://localhost:8080/index.jspを表示します。 すると左上の猫の隣にvesionが表示されます。もしくは、Tomcatを起動したときに、Apache Tomcat/4.1.30とか表示さます。もうひとつはjspを作って、 <%= application.getServerInfo() %> としてやります。これはhttp://localhost:8080/index.jspのソースに記述があります。 つまりこれ。javax.servlet.ServletContext?.getServerInfo?(); 文字化けするformから入力された日本語が化けるときがあります。こんなとき、Strutsの場合ActionForm?で public void reset(ActionMapping map, HttpServletRequest request){ try { request.setCharacterEncoding("Windows-31J"); } catch (Exception e) { e.printStackTrace(); } } といった記述をみかけます。確かに化けることはなくなるのですが、1本作るだけならまだしも、たくさんのプログラムを作らなければならないのに、すべてのActionForm?に書くのはどうなんでしょうか。もしくはActionForm?を継承したabstractクラスに定義しておいて、それを継承してもいいですが、今は、web.xmlに <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>MS932</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> を記述し、TOMCAT_HOME\webapps\examples\WEB-INF\classes\filtersの SetCharacterEncodingFilter.java をプロジェクトに取り込んでおります。正直日本語の処理ぐらいはそっちでやってよという意味をこめてます。また最初だけ文字化けする場合は <mime-mapping> <extension>html</extension> <mime-type>text/html;charset=Shift_JIS</mime-type> </mime-mapping> をweb.xmlに追加してやるといけるそうな。現象がでないので、試してません。 CGI5以降ですが、CATALINA_HOMEのserver/libにある、servlets-cgi.renametojarをファイル名のとおり、servlets-cgi.jarに変更します。あと、conf/web.xmlのcgiと書いてあるあたりのコメントをとります。またphpも動くようなのですが、試してないです。 http://cgi39.plala.or.jp/klove/w/k.cgi?page=Tomcat%A4%C7PHP%2DCGI%A4%F2%A5%B5%A1%BC%A5%D3%A5%B9%A4%B9%A4%EB セッション時間変更servlet-mappingの下あたりに <session-config> <session-timeout>60</session-timeout> </session-config> を追加します。単位は60です。 MIMECATALINA_HOME\confのweb.xmlに<mime-mapping>がありますので、ここに新しく追加する。ここで追加すると全体に反映されるが、個別のアプリのweb.xmlに書いてそれだけ対応することも可能 <mime-mapping> <extension>asf</extension> <mime-type>video/x-ms-asf</mime-type> </mime-mapping> web.xmlこれは記述する順番がきまっています。上から順番に.. J2EE 1.4に対応したweb.xmlを記述する icon display-name description distributable context-param filter filter-mapping listener servlet servlet-mapping session-config mime-mapping welcome-file-list error-page taglib resource-env-ref resource-ref security-constraint login-config security-role env-entry ejb-ref ejb-local-ref Linuxで自動起動#!/bin/bash # # Startup script for the Tomcat # # chkconfig: 345 80 15 # description:Tomcat # Source function library. . /etc/rc.d/init.d/functions export JAVA_HOME=/usr/local/j2sdk1.4 export PATH=$PATH:$JAVA_HOME/bin export CATALINA_HOME=/usr/local/tomcat4.1 export CATALINA_OPTS="-server -Xmx256m -Xms256m -Xss256k" export PATH=$PATH:$CATALINA_HOME/bin case "$1" in 'start') if [ -f $CATALINA_HOME/bin/startup.sh ]; then echo "Start tomcat" daemon --user nobody "$CATALINA_HOME/bin/startup.sh" sleep 1 pid=`pidof java` echo -n "tomcat [$pid]" touch /var/lock/subsys/tomcat echo $pid > /var/run/tomcat.pid echo fi ;; 'stop') if [ -f $CATALINA_HOME/bin/shutdown.sh ]; then echo "Stop tomcat" daemon --user nobody "$CATALINA_HOME/bin/shutdown.sh" sleep 2 rm -f /var/run/tomcat.pid rm -f /var/lock/subsys/tomcat echo fi ;; 'restart') $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac exit 0 pidof javaはあやしいです。またchkconfig: 345 80 15の80はapacheより小さい数で15は大きい数で。またnobodyで動かしているので、tomcatのファイルの権限には気をつけてください。 クラスの読み込み順$APP_HOME/WEB-INF/classes $APP_HOME/WEB-INF/lib/*.jar 環境変数のCLASSPATH $CATALINA_HOME/common/classes $CATALINA_HOME/common/endorsed/*.jar $CATALINA_HOME/common/lib/*.jar $CATALINA_HOME/shared/classes $CATALINA_HOME/shared/lib/*.jar GCjava -Xloggc:output_file hogeapp でGCの情報をoutput_fileにはくことができる。またjava.lang.RuntimeのtotalMemory()やfreeMemory()を使って調べてみる。 http://www.atmarkit.co.jp/fjava/rensai3/javavm02/javavm02_2.html Exception java.lang.OutOfMemoryError?: requested <size> bytes. Out of swap space?こんなエラーが出る場合は、Xmxを見直しましょう。小さくしてやります。 ログオフすると終了する。これは試してないんですが、シャットダウンやログオフのイベントを受け取り、終了するようになっているそうです。ですので、起動時に-Xrsをつければ、ログオフしても大丈夫だそうです。 セッションcontextタグに cookies="false" を追加するとセッションの別管理が可能。試してません。 http://www.atmarkit.co.jp/fjava/javafaq/session/session04.html ajp13.connect() failed ajp13:/opt/33/work/jk2.socketApacheと連携しているとerror_logログにajp13.connect() failed ajp13:/opt/33/work/jk2.socketと表示されてました。workers2.propertiesをみてみると、 [lb:lb_1] info=A second load balancer. debug=0 [channel.socket:localhost:8019] info=A second tomcat instance. debug=0 tomcatId=localhost:8019 lb_factor=1 group=lb group=lb_1 disabled=0 [channel.un:/opt/33/work/jk2.socket] info=A second channel connecting to localhost:8019 via unix socket tomcatId=localhost:8019 lb_factor=1 debug=0 [uri:127.0.0.1:8003/ex] info=Example webapp in the virtual host. It'll go to lb_1 ( i.e. localhost:8019 ) context=/ex group=lb_1 これはsecond tomcat instance用みたいなので消しました。 [notice] channelApr.open()error_logログに[notice] channelApr.open()が大量に出力されてます。これもworkers2.propertiesで [logger] level=DEBUG となっているからです。DEBUGをERRORに変更しました。 java.lang.NoSuchMethodError?: javax.servlet.jsp.JspFactory?.getJspApplicationContext?(Ljavax/servlet/ServletContext?;)Ljavax/servlet/jsp/JspApplicationContext?;さていきなり動かすとこんなエラーがでてくれました。違うバージョンのtomcatを交互に動かしていたんですが、work\org\apache\jspを消してやれば、動きました。 Apache + Tomcat連携でCPUが100%に...実際お目にかかったことはないのですが、server.xmlを8009を8080と同じようにすればいいとのこと。 <!-- <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> --> <Connector port="8009" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" protocol="AJP/1.3" /> 参考:Apache2.2+Tomcat5.5でのCPU使用率 アクセス制限をweb.xmlの記述だけで実現するhttp://www.atmarkit.co.jp/fjava/javatips/011jspservlet002.html コンテキストconf/Catalina/localhost以下にコンテキスト名.xmlで保存しておく。これってtomcat5から?4まではserver.xmlだったように思ってました。 %TOMCAT_HOME%/conf/context.xmlやWebアプリのMETA-INF/context.xmlにも書けます。 JSP事前コンパイルhttp://www.atmarkit.co.jp/fjava/javatips/144jspservlet051.html The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.pathエラーが気になる場合は、server.xmlの <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> を <!-- <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> --> にコメントアウトします。 TOMCAT 6からResource nameはどこに書く?context.xmlにでも。 調査リンクhttp://www.jajakarta.org/tomcat/faq/misc.html コメント
|