Center OS Tomcat7 服務器配置總結

tomcat7 目錄結構

  --- webapps        應用存放目錄,可以配置Host 來決定這個文件的目錄,可以配置多個Host,多個webapps

      ---ROOT        項目根目錄,Tomcat會特殊對待這個目錄,配置Host時會影響到這個目錄

  --- conf           配置文件存放目錄 配置端口 Host Domain 等

  --- logs           日誌存放目錄

  --- work

  --- bin            可執行文件存放目錄

  --- lib            第三方包存放目錄

  --- temp           臨時文件存放目錄



如何配置Tomcat的Host,Domain?

<Engine name="Catalina" defaultHost="www.jrpy.net">...</Engine>

<Host name="www.jrpy.net" appBase="webapps"

                 unpackWARs="true" autoDeploy="true"  debug="0" reloadable="false">

               <Context path="" docBase="D:/test/jrpynet" reloadable="true"/>

       </Host>

Engine       在這個標籤下可以配置訪問域名,日誌輸出等。一個Tomcat只能配置一個Engine


defaultHost  配置默認訪問域名,就是如果用IP,或者其他指向這個服務器的域名都會跳到

            這個Host所指的項目,在Engine標籤下必須存在defaultHost屬性所指的Host.


       Host         是用來配置訪問域名的。


Host-name    表示的域名。 可以填localhost,和指向這個服務器的域名。


Host-appBase 當前Host的訪問空間。 可以爲一個絕對路徑, 也可以填寫一個相對於Tomcat Home的相對路徑


       unpackWARs   如果值爲true 將會在程序啓動時自動解壓Host-appBase下的所有War文件


autoDeploy   如果值爲true 將會自動部署Host-appBase目錄下的所有項目


       reloadable   如果爲true 將會自動監聽Host-appBase目錄War文件和項目的變化,如果存在變化,將自動重新加載。


Host/Context 用來配置應用所在位置,訪問ContentPath 等。


Context-path 用來配置項目的訪問ContentPath 一般我們配置爲 "" 這樣就可以訪問爲根目錄,

    如果值爲abc ,那麼訪問是要在Domain的後面加上abc然後在是訪問路徑和參數,如:http://domain:port/abc/...


docBase      配置項目目錄,可以指向一個絕對路徑,或者一個相對於Host-appBase的路徑. 如果指向的是文件夾,那麼文件夾裏面的內容就是項目內容。

    如果指向的爲一個War文件,這個文件將會被解壓到Host-appBase所指路徑。 如果Host-appBase 不存在ROOT文件夾,而這個war文件爲

    非ROOT.war文件,那麼這個war文件將會解壓和部署兩次,一個是ROOT項目,另外一個是它本身。所以建議將這個文件命名爲ROOT.war文件。

    這樣就只會有一次解壓和部署。






如何配置Log4j的日誌存放路徑?

在log4j.xml 或log4j.properties 文件中你會找到類似這樣的配置

<param name="File" value="../logs/wmf_handler.log"/>

log44j 的日誌配置路徑,如果配置爲 ../logs/... 在windows系統下面會將日誌文件寫到Tomcat 或者其他服務器的Home下面。

但是如果爲Linux系統下,這樣的配置將會把日誌文件寫的根目錄下, 但是往往我們會在Linux下不會已Root用戶啓動Tomcat。

所以Tomcat將會沒有權限寫日誌文件。 日誌就不會成功寫出。

那麼解決方法就是,不要把配置寫成 ../logs/... 這樣的形式。 那麼我們該這麼寫呢?配置到那個文件夾合適呢?

1. tomcat目錄, 如果把日誌寫到這個目錄,我們就有權限。 這個文件夾下面,日誌會一直存在和追加。 方面以後追蹤錯誤。

如果要配置到這個目錄,我們可以使用這樣的形式配置 ${catalina.home}/logs/...

因爲 Tomcat 會在項目啓動的時候設置catalina.home這個系統變量指向我們的Tomcat Home

2. 項目目錄。 這個文件夾下面有兩個好處。

     1,我們可以配置來通過項目的web訪問日誌,

     2,這個目錄在我們項目重新部署時。可以方便刪除日誌文件,每次查看都是這次運行產生的日誌

     如果要配置到這個目錄,我們可以使用這樣的配置,${webapp.root}/logs/...

     但是我們必須要在web.xml中存在Log4jConfigListener 監聽器, 因爲這個監聽器會配置一個webapp.root

     的系統變量指向我們的項目根目錄, 你也可以自己配置 一個webapp.root 名字可以自己隨便給。

     也可以通過web.xml 配置這個名字(但是必須配合Log4jConfigListener) 。 配置代碼如下:

<context-param>

<param-name>webAppRootKey</param-name>

<param-value>wmfWebApp.root</param-value>

</context-param>



如何配置Tomcat的執行用戶?


  在Linux系統下,特別是服務,不能使用ROOT用戶來啓動Tomcat,

  因爲一旦使用ROOT用戶來啓動,Tomcat就會獲得最高執行權限,

  這樣的話如果******的虎就可以通過Tomcat來控制整個系統。

  所以,我們不能使用Root用戶運行Tomcat,那麼我們該如何配置Tomcat的執行用戶呢?


 如何配置,請參考:http://os.51cto.com/art/201002/184813.htm





如何使用Tomcat配置域名跳轉?

  兩種方式。

  1. 使用apache + tomcat 配置 域名跳轉 參考:http://gaoxingf.blog.51cto.com/612518/193209

  2. 使用service.xml 中的Host + 域名跳轉項目。  

     新建一個項目,使用Filter ,需要在xml中配置。 Filter具體代碼如下:


import org.apache.commons.io.IOUtils;

import org.apache.http.HttpResponse;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;


import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;


/**

* Created with IntelliJ IDEA.

* User: Ryan

* Date: 14-2-11

* Time: 上午11:33

*/

public class ForwardFilter implements Filter {

   private String forwardTo;


   @Override

   public void init(FilterConfig config) throws ServletException {

       forwardTo = config.getInitParameter("to");

       if (null == forwardTo) {

           throw new RuntimeException("you must set forward to in init parameter.");

       }

   }


   @Override

   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

       HttpServletRequest request = (HttpServletRequest) req;

       HttpServletResponse response = (HttpServletResponse) res;

       request.setCharacterEncoding("utf-8");

       // 獲取請求路徑

       String serverName = request.getServerName();

       int end = serverName.indexOf(forwardTo);

       String path = request.getRequestURI();

       String requestURI = "http://" + forwardTo + path;

       if (end == -1 || end == 0) {

           if ("get".equalsIgnoreCase(request.getMethod())) {

               String queryString = (request.getQueryString() == null ? "" : "?" + request.getQueryString());

               response.setStatus(301);

               response.setHeader("Location", requestURI + queryString);

               response.setHeader("Connection", "close");

           } else {

               List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();

               Map pms = request.getParameterMap();

               if (pms != null && !pms.isEmpty()) {

                   for (Object key : pms.keySet()) {

                       Object val = pms.get(key);

                       if (val instanceof String[]) {

                           String[] values = (String[]) val;

                           for (String value : values) {

                               list.add(new BasicNameValuePair(key.toString(), value));

                           }

                       } else {

                           list.add(new BasicNameValuePair(key.toString(), val.toString()));

                       }

                   }

               }

               try {

                   // 實現將請求的參數封裝到表單中,請求體重

                   UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, "utf-8");


                   // 使用Post方式提交數據

                   HttpPost httpPost = new HttpPost(requestURI);

                   httpPost.setEntity(entity);

                   // 指定post請求

                   DefaultHttpClient client = new DefaultHttpClient();

                   HttpResponse httpResponse = client.execute(httpPost);

                   print(response, IOUtils.toString(httpResponse.getEntity().getContent(), "utf-8"));

               } catch (Exception e) {

                   e.printStackTrace();

               }

           }

       } else {

           chain.doFilter(request, response);

       }

   }



   //向請求端發送返回數據

   public void print(HttpServletResponse response, String content) {

       try {

           response.setContentType("text/html;charset=utf-8");

           response.setCharacterEncoding("utf-8");

           response.getWriter().print(content);

           response.getWriter().flush();

           response.getWriter().close();

       } catch (Exception e) {

           e.printStackTrace();

       }

   }


   @Override

   public void destroy() {

   }

}




如何配置啓動tomcat時使用大內存

CATALINA_OPTS="-Xms512m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m"

將這句加入到 /etc/init.d/tomcat 文件的最開始。

或者在啓動tomcat時先設置這個變量


如何配置Tomcat開機自啓動,和啓動Service?


http://calvinliu.iteye.com/blog/1122974



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章