2016年9月10日土曜日

tomcat7 を CentOS7 に入れる時のメモ

今更ながら、CentOS7tomcat7をインストールして確認するメモです。

Tomcat7のインストール

yumでそのまま入る。

yum update
yum install tomcat*
tomcat version
systemd start tomcat
systemd status tomcat
curl -v localhost:8080

起動しない場合は、JAVA_OPTSを設定する。

vi /etc/tomcat/tomcat.conf
# 以下を追加
JAVA_OPTS="-Xmx512m -XX:MaxPermSize=256m"

Javaのインストール(Tomcat7は、6以上ならOK)

JRE1.8は自動で入る。そのため、1.8でコンパイルしたものは、そのまま動く。

使いたいバージョンのJDKがある場合は指定して入れる。

yum install java-1.6.0-openjdk-devel
java -version
javac -version
# 必要に応じてalternativesで設定
systemd restart tomcat
curl -v localhost:8080

servletの動作確認

cat > HelloServlet.java << EOF
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloServlet extends HttpServlet {
    public void service(HttpServletRequest req,
        HttpServletResponse res)
        throws ServletException, IOException {

        PrintWriter out = res.getWriter();
        out.println("Hello World!");
        
    }
}
EOF

javac -classpath '/usr/share/tomcat/lib/*' HelloServlet.java 
mkdir -p /usr/share/tomcat/webapps/ROOT/WEB-INF/classes
cp HelloServlet.class /usr/share/tomcat/webapps/ROOT/WEB-INF/classes/.
cat > /usr/share/tomcat/webapps/ROOT/WEB-INF/web.xml <<EOF
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
</web-app>
EOF
systemctl restart tomcat
curl -v localhost:8080/HelloServlet

Contextの設定と確認

cat > /etc/tomcat/Catalina/localhost/mycontext.xml <<EOF
<Context path="/mycontext" docBase="/tmp/mycontext" workDir="/tmp/mycontext/work" />
EOF

mkdir -p /tmp/mycontext/WEB-INF/classes
cp HelloServlet.class /tmp/mycontext/WEB-INF/classes/.
cp /usr/share/tomcat/webapps/ROOT/WEB-INF/web.xml /tmp/mycontext/WEB-INF/.
curl -v localhost:8080/mycontext/HelloServlet

firewallの設定をする

  • クラウドならば、Security Groupなどを設定
  • インスタンスのfirewallを開く(CentOS7はfirewalld)
  • 外部からアクセスできるようにする場合は注意

トラブルシューティング

500系エラー

  • ログを見て対処。
  • ClassNotFound系は、classファイルの設置場所が正しいか確認。

400系エラー

  • web.xmlの指定が正しいか確認。
  • web.xmlの設定が壊れている場合は、どこをたたいても400系エラーが出る。

0 件のコメント:

コメントを投稿