Center OS Tomcat7 服务器配置总结

tomcat7 目录结构html

  --- webapps        应用存放目录,能够配置Host 来决定这个文件的目录,能够配置多个Host,多个webappsjava

      ---ROOT        项目根目录,Tomcat会特殊对待这个目录,配置Host时会影响到这个目录web

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

  --- logs           日志存放目录windows

  --- worktomcat

  --- bin            可执行文件存放目录服务器

  --- lib            第三方包存放目录app

  --- temp           临时文件存放目录dom



如何配置Tomcat的Host,Domain?webapp

<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

相关文章
相关标签/搜索