{{{ #!html
Servlet
tomcat
}}} [[PageOutline]] * 測試tomcat 的執行權限 * 如何讓 Servlet 執行 shell 或其他指令 * 如何編譯 Servlet 與執行 = 如何讓 Servlet 執行 shell 或其他指令 = servlet 就是 java ,因此呼叫shell 或指令用同一個語法 {{{ #!java Runtime.getRuntime().exec( "/path/my_shell.sh"); }}} = 如何編譯 Servlet 與執行 = 需要額外引入 servlet-api.jar 與 jsp-api.jar (此兩個檔可以到 tomcat_home/lib/) HelloWorldExample.java {{{ #!java /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* $Id: HelloWorldExample.java 500674 2007-01-27 23:15:00Z markt $ * */ import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; /** * The simplest possible servlet. * * @author James Duncan Davidson */ public class HelloWorldExample extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ResourceBundle rb = ResourceBundle.getBundle("LocalStrings",request.getLocale()); response.setContentType("text/html"); PrintWriter out = response.getWriter(); Runtime.getRuntime().exec( "/home/waue/a.sh"); out.println(""); out.println(""); String title = rb.getString("helloworld.title"); title="waue test!"; out.println("" + title + ""); out.println(""); out.println(""); // note that all links are created to be relative. this // ensures that we can move the web application that this // servlet belongs to to a different place in the url // tree and not have any harmful side effects. // XXX // making these absolute till we work out the // addition of a PathInfo issue out.println(""); out.println("\"view"); out.println(""); out.println("\"return\""); out.println("

" + title + "

"); out.println(""); out.println(""); } } }}} 編譯過後需將class 檔 放到 $tomcat_home/webapps/examples/WEB-INF/classes/ 資料夾下 重新啟動 tomcat 或 用 manager/的 reload examples 資料夾 = 測試tomcat 的執行權限 = 範例中會執行 /home/waue/a.sh a.sh 的執行權限為 700 擁有者為 waue {{{ #!sh #!/bin/bash date=`date` echo "gogogo" > a.txt echo "$date" >> a.txt }}} 如果 tomcat 的執行權限不是 waue ,則無法執行也無法寫入 答案如預期,證明 tomcat 的執行權限即為 啟動tomcat 的使用者。