2-1) バッチ/シェルを直接起動する
* 外部コマンドを実行する / ProcessBuilder* Java1.5から 外部コマンドを実行できる ProcessBuilder を使用して、 バッチ/シェルを実行するhttp://blogs.yahoo.co.jp/dk521123/34842155.html
サンプル
TomcatStartter.java
* Tomcat の開始public class TomcatStartter { public static void main(String[] args) { try { String command = "C:/tomcat/tomcat8/bin/startup.bat"; ProcessBuilder processBuilder = new ProcessBuilder(command); Process process = processBuilder.start(); int result = process.waitFor(); System.out.println("Done " + result); } catch (Exception ex) { ex.printStackTrace(); } } }
TomcatStopper.java
* Tomcat の停止public class TomcatStopper { public static void main(String[] args) { try { String command = "C:/tomcat/tomcat8/bin/shutdown.bat"; ProcessBuilder processBuilder = new ProcessBuilder(command); Process process = processBuilder.start(); int result = process.waitFor(); System.out.println("Done " + result); } catch (Exception ex) { ex.printStackTrace(); } } }
注意
* Tomcat停止時には、以下のエラーでうまく動かないことがある
エラー内容
The CATALINA_HOME ennviroment variable is not defined correctly This enviroment variable is needed to run this program.
解決策
* 環境変数 CATALINA_HOME を設定する(Eclipseで動かしていたら再起動)
2-2) 組み込みTomcatを利用する
* Tomcat 7から提供された「org.apache.catalina.startup.Tomcat」クラスを利用する
サンプル
EmbeddedTomcatStartter.java
* Tomcat の開始import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.startup.Tomcat; import com.sample.servlet.HelloWorldServlet; public class EmbeddedTomcatStartter { public static void main(String[] args) { try { Tomcat tomcat = new Tomcat(); Context context = tomcat.addContext("/", "."); Tomcat.addServlet(context, "HelloWorldServlet", new HelloWorldServlet()); context.addServletMapping("/HelloWorldServlet", "HelloWorldServlet"); tomcat.start(); tomcat.getServer().await(); } catch (LifecycleException ex) { ex.printStackTrace(); } } }* Tomcat の停止は、上記のtomcat をとっておき、tomcat.stop()で可能?
HelloWorldServlet.java
http://blogs.yahoo.co.jp/dk521123/32073184.htmlと同じ
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloWorldServlet. */ public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet(). */ public HelloWorldServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<p>Hello World!</p>"); out.println("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
確認方法
EmbeddedTomcatStartterを起動してから、ブラウザで以下を表示すると 「Hello World!」が表示されたらOK[http://localhost:8080/HelloWorldServlet]
注意
* 以下のエラーが表示されたら、以下の関連記事を参照のこと +「NoClassDefFoundError: org/apache/juli/logging/LogFactory」が表示される +「LifecycleException: Failed to start component」が表示されるhttp://blogs.yahoo.co.jp/dk521123/34691085.html