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文件。
这样就只会有一次解压和部署。
百牛信息技术bainiu.ltd整理发布于博客园
如何配置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时先设置这个变量
Center OS Tomcat7 服务器配置总结的更多相关文章
- center os
CentOS.Ubuntu.Debian三个linux比较异同 Center OS 7 安装 $$ center os 安装mysql5.6 Linux学习之Center os网络配置 Cent Os ...
- Center OS 7 /etc/rc.d/init.d/network, status=6
service network restart 报错 Center OS 7 /etc/rc.d/init.d/network status=6 google上找到答案: Just in case a ...
- 【我的Android进阶之旅】解决Center OS 64位系统编译Android APP报错error=2和finished with non-zero exit value 127
一.错误描述 1.问题 java.io.IOException: error=2, 没有那个文件或目录 今天在刚重新搭建好的64位的Center OS上安装好了Android SDK,Jenkins, ...
- center os 安装mysql5.6
软件 MySQL-server-5.6.13-1.el6.x86_64.rpm MySQL-client-5.6.13-1.el6.x86_64.rpm 安装命令 rpm -ivh MySQL-ser ...
- center os 7最小化安装后按table无法补全命令的问题
闲来无趣,这两天huskiesir又重新安装了下center os 7操作系统,结果呢,发现一个问题:按table键无法补全命令啊. 咦,奇怪了,这次怎么回事,完全没遇到过啊.哦,回想了一下,和以往的 ...
- Center OS 7安装 Apollo
声明: 每个人的情况都不一样,所以大家在看教程的时候自行斟酌,最好先扫一遍,再来根据自身情况进行操作.同时,遇到的问题也可能不尽相同,要灵活处理. 了解: Apollo是从原始ActiveMQ的基础构 ...
- Center OS 7 Apache安装配置
感谢:https://blog.csdn.net/u014157384/article/details/79497761 该作者的帮助. 自己购买了国外的服务器,想把我的网页放到服务器,网页是以web ...
- Center OS 7 通过Docker部署yapi
Center OS 7 通过Docker部署yapi 版本要求 Linux Center OS 7 安装Docker #Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前 ...
- center os 7 安装 elasticSeartch
Centos7下安装配置elasticsearch 6.3.1 1)下载 Elasticsearch 6.3.1 地址:https://artifacts.elastic.co/downloads ...
随机推荐
- bzoj 2802 [Poi2012]Warehouse Store STL
[Poi2012]Warehouse Store Time Limit: 10 Sec Memory Limit: 64 MBSec Special JudgeSubmit: 621 Solve ...
- 【记录】新建Cordova项目出现ios-deploy找不到的问题
按老流程 Cordova create helloApp Cordova platform add ios 之前一般这种操作之后就能有执行的iOS目录了,像这样 然后 Cordova build ...
- P2820 局域网 洛谷
https://www.luogu.org/problem/show?pid=2820 题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成 ...
- [Bzoj3193][JLOI2013]地形生成 (排列组合 + DP)
3193: [JLOI2013]地形生成 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 459 Solved: 223[Submit][Status ...
- 洛谷 P3811 【模板】乘法逆元
P3811 [模板]乘法逆元 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下 ...
- Java中文件和I/O
以下内容引用自http://wiki.jikexueyuan.com/project/java/files-and-io.html: 在Java中java.io包含的每一个类几乎都要进行输入和输出操作 ...
- 百亿级企业级 RPC 框架开源了!
今天给大家介绍给一款性能卓越的 RPC 开源框架,其作者就是我推荐每个 Java 程序员都应该看的<Java 生态核心知识点整理>的原作者张玉龙. 说实话我第一次看到这个资料的时候,就感觉 ...
- Spring4.0MVC学习资料,注解自己主动扫描bean,自己主动注入bean(二)
Spring4.0的新特性我们在上一章已经介绍过了. 包含它对jdk8的支持,Groovy Bean Definition DSL的支持.核心容器功能的改进,Web开发改进.測试框架改进等等.这张我们 ...
- PHP开发者实用的代码
一.查看邮件是否已被阅读 当你在发送邮件时,你或许很想知道该邮件是否被对方已阅读.这里有段非常有趣的代码片段能够显示对方IP地址记录阅读的实际日期和时间. <? error_reporting( ...
- 在Oracle数据库中使用NFS,怎样调优?
MOS上有好多文章,基本上都跑不了以下三点: Setup can make a big difference 1. Network topology and load 2. NFS mount opt ...