JAVA企业级应用Tomcat实战

1.Centos7的一些命令

# Centos7版本/etc/rc.local默认没有执行权限
chmod +x /etc/rc.d/rc.local  # 才能启用这个文件用于开机执行命令
# 五种运行级别
ls -lh /usr/lib/systemd/system/runlevel*.target
# 查看服务开机自启状态
chkconfig --list
systemctl list-unit-files
systemctl --type service  # 查看服务详情
# 下面这两条ip命令用的不多
ip address show
ip route show
# 获取当前运行级别
systemctl get-default
systemctl set-default graphical.target

2.部署Tomcat

# 常用java容器:WebSphere,WebLogic,Resin,Tomcat
mkdir /application/
tar xf jdk-8u60-linux-x64.tar.gz -C /application/
ln -s /application/jdk1.8.0_60 /application/jdk
# 添加环境变量
sed -ir '$a export JAVA_HOME=/application/jdk
 
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
 
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
java -version
java version "1.8.0_60"

tar xf apache-tomcat-8.5.37.tar.gz -C /application/
ln -s /application/apache-tomcat-8.5.37/ /application/tomcat
echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile
chown -R root.root /application/jdk/ /application/tomcat/
source /etc/profile
cd /application/tomcat/ && tree -L 1
bin  # 用以启动、关闭Tomcat或者其它功能的脚本
conf # 配置文件目录
lib  # 存放web应用能访问的JAR包
logs # Catalina和其它Web应用程序的日志文件
temp # 临时文件
work # 存放JSP编译出的Servlet的.java和.class文件
# Web应用程序根目录
webapps
cd webapps
docs         # 帮助文档
examples     # web应用实例
host-manager # 管理
manager      # 管理
ROOT         # 默认网站根目录

/application/tomcat/bin/startup.sh
访问:http://10.0.0.50:8080/
cd /application/tomcat/logs/
catalina.out  # tomcat实时日志,启动、报错日志都在这个日志里
tailf catalina.out  # 看到下面这行表示tomcat启动成功
Server startup in 2117 ms

3.Tomcat主配置文件Server.xml详解

  Tomcat管理功能用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用,仅供测试,生产环境禁止使用,默认处于禁用状态,在</tomcat-users>这一行上面加两行,访问http://10.0.0.50:8080/manager/status,报错403,是因为context.xml做了访问限制,修改一下,重启,输入账号密码即可.

vim /application/tomcat/conf/tomcat-users.xml
  <role rolename="manager-gui"/>
  <user name="admin" password="root123456" roles="manager-gui"/>
</tomcat-users>

vim /application/tomcat/webapps/manager/META-INF/context.xml
allow="127.d+.d+.d+|::1|0:0:0:0:0:0:0:1|10.0.0.*" />
# 降低安全隐患,将下面这些目录、文件都移走
mv docs/ examples/ host-manager/ manager/ ROOT/* /tmp/
# 把现在这个tomcat打成tar包,以后就不用再去下载,再去转移有隐患的目录
tar zcf tomcat-8.5.37.tar.gz /application/apache-tomcat-8.5.37/

  8005端口之前监听在0.0.0.0上,现在监听在127.0.0.1上,telnet 127.0.0.1 8005 输入SHUTDOWN即可关闭tomcat,注释掉8009这一行;

tomcat能识别未被解压的war包,能自动部署,是因为下面这一行配置:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

  connector:接收用户请求,类似于httpd的listen配置监听端口的;

  service:将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine,一般情况下一个server内部只有一个service,一个service内部只有一个engine,但可以有多个connector.

4.自定义网站目录

  假装自己有这个war包,memtest.war,上传,重启Tomcat,并访问http://10.0.0.50:8080/memtest/meminfo.jsp,

现在想以这个url访问此项目:http://10.0.0.50:8080/meminfo.jsp,有两种方法

# 方法一
将meminfo.jsp或其他程序放在ROOT目录下即可,因为默认网站根目录为tomcat/webapps/ROOT
# 方法二
vim /application/tomcat/conf/server.xml
<Context path="" docBase="/application/tomcat/webapps/memtest" debug="0" reloadable="false" crossContext="true"/>

Context表示一个web应用程序,通常为WAR文件;

docBase应用程序的路径或者是WAR文件存放的路径,也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;

path表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****;

reloadable如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重启tomcat的情况下改变应用程序.

5.Tomcat多实例,日志在不同实例下的logs中

mkdir -p /data/www/www/ROOT
cp /application/tomcat/webapps/memtest/meminfo.jsp /data/www/www/ROOT/
cp -a /application/apache-tomcat-8.5.37/ /application/tomcat8-1
cp -a /application/apache-tomcat-8.5.37/ /application/tomcat8-2
/application/tomcat8-1中8005改为8011,8080改为8081,appBase改为/data/www/www
/application/tomcat8-2中8005改为8012,8080改为8082,appBase改为/data/www/www
for i in {1..2};do /application/tomcat8_$i/bin/startup.sh;done
netstat -tunlp|grep java
浏览器可以分别访问http://10.0.0.50:8081/meminfo.jsp和http://10.0.0.50:8082/meminfo.jsp

使用nginx反向代理Tomcat
vim /application/nginx/conf/nginx.conf
upstream web_pools {
    server 10.0.0.50:8081;
    server 10.0.0.50:8082;
    }
server {
    listen 80;
    server_name tomcat.etiantian.org;
    location / {
        root html;
        index index.jsp index.html index.htm;
        proxy_pass http://web_pools;
    }
}
cat /etc/hosts
10.0.0.10  tomcat.etiantian.org
访问http://tomcat.etiantian.org/meminfo.jsp可以看到轮询效果

6.Tomcat安装Jpress

tar xf apache-maven-3.3.9-bin.tar.gz -C /application/
ln -s /application/apache-maven-3.3.9 /application/maven
# 在/etc/profile中添加两行
MAVEN_HOME=/application/maven
PATH="$MAVEN_HOME/bin:$PATH"
jpress-web-newest.war位置https://github.com/JpressProjects/jpress
cd /data/www/www/ROOT
jar xf /root/jpress-web-newest.war
10.0.0.50:8081/install # 需要连接数据库,跟之前装WordPress是一样的

7.Tomcat安全优化和性能优化

A.安全优化

1).降权启动:以普通用户启动tomcat;
2).telnet管理端口保护:将8005改为其它端口,将SHUTDOWN口令改为其它;
3).ajp连接端口保护:将8009这个端口注释掉,AJP协议;
4).禁用管理端:将host-manager、manager等目录移走.

B.性能优化

1).屏蔽dns查询enableLookups="false"

2).jvm调优

优化catalina.sh配置文件,在catalina.sh配置文件中添加以下代码,放在最前面的位置

  JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

-XX:PermSize:设定内存的永久保存区域,已被移除;

-XX:MaxPermSize:设定最大内存的永久保存区域,已被移除;

server:一定要作为第一个参数,在多个CPU时性能佳;

-Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些;

-Xmx:初始堆内存heap最大值,使用的最大内存;

上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半.

参考博客:https://blog.csdn.net/woshizhangliang999/article/details/50644454

原文地址:https://www.cnblogs.com/fawaikuangtu123/p/10889374.html