tomcat基本使用方法

在说tomcat之前首先得看看JAVA的相关基础!毕竟tomcat也是运行在JAVA虚拟机上的,其实tomcat用到场景并不少,毕竟在大陆JAVA程序员比较多并且在普通企业中的WEB信息化项目都是有JAVA程序员研发的产品所以tomcat是普通企业的重点!

JAVA:

JAVA是由SUN项目研发,使用于客户端(一次编写到处运行)。作者James Gosling,不过现在SUN被甲骨文收购所以需要下载JDK的同学和openJDK的话都得在甲骨文官网上进行下载!http://www.oracle.com/technetwork/java/javase/downloads/index.html

JAVA的体系结构:

其实一共四个非常简单:

(1) JAVA编程语言
(2) JAVA class(类)文件格式
(3) JAVA API(类库)
(4) JAVA VM (虚拟机)

JAVA的运行模式:

tomcat01

tomcat的核心组件:

catalina: serverlet container(用于控制tomcat)
coyote: http connection (http连接器)
jasper: JSP引擎(翻译器)

安装tomcat:

其实安装非常简单,只需要上两个网站,一个是apache官网和甲骨文java的网站下载jdk和tomcat程序。tomcat项目官网:https://tomcat.apache.org/ jdk之前我已经说过了。

安装tomcat:

[root@localhost ~] tar -xf apache-tomcat-8.5.6.tar.gz -C /usr/local
[root@localhost ~] cd /usr/local
[root@localhost local] ln -s apache-tomcat-8.5.6 tomcat
[root@localhost local] vi /etc/profile.d/tomcat.sh
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH
[root@localhost local]# source /etc/profile.d/tomcat.sh
#到此tomcat就算部署完毕了

安装jdk:

[root@localhost ~] yum localinstall jdk-8u101-linux-x64.rpm
[root@localhost ~] vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
#到此jdk就算安装部署完毕了

看来tomcat在Linux上面部署真的非常方便,不像windows!

使用catalina来管理tomcat:

上面安装完毕我们又添加好变量之后就可以使用catalina这个脚本来管理tomcat了,如果第一次使用可以输入命令catalina.sh –help

上述输出的内容有四个比较常用常用,第一个debug顾名思义你懂的!第二个就是start用来启动!第三个是stop停止程序!第四个查看版本的version。请注意在tomcat中是没有重新启动的功能,所以需要重新启动就先用stop过两秒再start!

开启manager APP、host manager、server status功能:

首先我们启动tomcat程序随后直接输入地址进入默认页面:

tomcat02

注意:本次实验我用的是端口映射方式进行访问网站的!

画线的三个部分就是传说中可以查看状态、管理虚拟主机和管理tomcat的界面!当然如果是初始状态那肯定会显示403被拒绝的!并且给出解决办法,让你在指定的配置文件添加账号和密码才能登陆。

[root@localhost ~] vi /usr/local/tomcat/conf/tomcat-users.xml #进入用户配置文件
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tom" password="tomcat" roles="manager-gui,admin-gui"/>
<user username="jerry" password="jerrymouse" roles="manager-gui,admin-gui"/>
#上面是我定义的两个用户,一个tom一个jerry

注意:定义规则和账号密码的时候必须在<tomcat-users>和</tomcat-users>之间进行定义否则肯定为定义无效,并且配置文件在结尾处会有定义的示例可以观看!

随后我们重新启动来看看效果,可惜的是还是显示为403被拒绝!这个问题当时困扰了我一天的时间,随后我在manager的项目文件夹中找到了一个神奇的文件:

首先看看manager的项目:

[root@localhost ~] vi /usr/local/tomcat/webapps/manager/META-INF/context.xml
#进入manager的META-INF文件中有个context文件!
<Context antiResourceLocking="false" privileged="true" >
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
#打开之后你会看到上述的内容,原来没有在主配置文件中进行定义别名和过滤
#而是在项目里面进行定义了,所以我们需要注释掉过滤选项!
<Context antiResourceLocking="false" privileged="true" >
<!--
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
#按照上述这样就算OK了!

看完了manager的项目的修改方法那么host-manager项目的修改方法和上述相同,注释掉过滤的选项即可,或者你自己定义!

配置完毕以后再重新启动tomcat在看看访问的结果:

tomcat03

随后你就能查看主机状态、管理tomcat、添加虚拟主机了!

添加一个新的虚拟主机:

添加的方法一共两种:第一种就是在网页上进行添加即可,虽然看上去比较的方便但是我并不习惯,况且登陆host manager的过程中用户密码都是不进行加密的比较危险,所以还得做好规则!第二种方案就是编辑主配置文件进行定义,虽然看上去比较麻烦但是情况都在你的掌握之中!

在添加之前首先我们对server.xml的主配置文件应该框架性的了解:

<server> #即一个tomcat实例
<service> #用于将connector组件关联在engine组件,一个service只能包含一个engine组件和一个或多个connector组件
<connector> #设置监听模式,使用AJP或HTTP协议,可出现多次
<Engine> #设置webapp下面的项目的主机名!
<Host> #定义虚拟主机,可在engine出现多次
<Context> #定义应用程序,可出现多次,类似于httpd中的alias
</Context>
….
</Host>
….
</Engine>

</connector>

</service>
</server>

除此之外肯定还有value、realm组件等,不过这些并不是经常使用的选项!

了解完毕配置文件的格式和内容之后我们得创建一个网站根目录的文件,我定义在/var/tomcat/myapp之中

创建完文件之后我们进入myapp中创建一些java网站需要的文件夹:mkdir {lib,classes,WEB-INF,META-INF}

之后再创建一个index.jsp的java的主页面,写点内容进去:

<%@ page language=”java” %>
<%@ page import=”java.util.*” %>
<html>
<head>
<title>JSP test page.</title>
</head>
<body>
<% out.println(“welcome cookiesinn!”); %>
</body>
</html>

万事具备就欠东风了!接下来配置主配置文件:

#找到Engine语句,最后将默认主机改为你想要的
 <Engine name="Catalina" defaultHost="tomcat.cookiesinn.org">
#随后找到默认主机结束的位置随后再添加一个虚拟主机
 <Host name="localhost" appBase="webapps"
 unpackWARs="true" autoDeploy="true">

 <!-- SingleSignOn valve, share authentication between web applications
 Documentation at: /docs/config/valve.html -->
 <!--
 <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
 -->

 <!-- Access log processes all example.
 Documentation at: /docs/config/valve.html
 Note: The pattern used is equivalent to using pattern="common" -->
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
 prefix="localhost_access_log" suffix=".txt"
 pattern="%h %l %u %t &quot;%r&quot; %s %b" />

 </Host>
#在上述的下面添加一个虚拟主机:
<Host name="tomcat.cookiesinn.org" appBase="/var/tomcat/myapp" unpackWARs="true" autoDeploy="true">
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/logs"
 prefix="myapp_access_log" suffix=".txt"
 pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
#这样就算添加好了!

随后我们重新启动tomcat,但是你会发现游览器上面什么都没显示空白页面一张!不是刚刚写过字的吗?随后你按F12发现这个:

tomcat04

一开始我还以为是我从物理主机的游览器通过端口映射访问虚拟机出错了,后来使用ubuntu通过添加域名在Hosts中访问还是一样显示页面错误!这个问题当时也困绕了我1天左右,后来在google和官方文档的结合下发现这个问题:

如果按照上面定义的虚拟主机进行访问则打开网页则会打开/var/tomcat/myapp/ROOT中的index.jsp!所以需要建立ROOT文件并且把内容移动进去,如果是使用 war 包部署的话。直接把你的war包。取名叫做 ROOT.war 即可。
那么这个肯定不能满足许多人的需求,如果在这个目录下面要建立多个虚拟主机呢?而且使用ROOT作为根目录肯定不行无法区分。所以还记得context的组件不?我们用它在host中进行定义:

<Host name="tomcat.cookiesinn.org" appBase="/var/tomcat" unpackWARs="true" autoDeploy="true">
 <Context path="/" docBase="myapp">
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/logs"
 prefix="myapp_access_log" suffix=".txt"
 pattern="%h %l %u %t &quot;%r&quot; %s %b" />
 </Context>
</Host>

然后说一下刚刚context的参数效果:path表示当网页输入网址后访问根目录的时候,而docbase表示应用程序放置位置,那么可能有人问这个有啥关系,定义docbase的标准是定义在appbase下面的网站的具体项目而且context可以定义多个,所以可以分成不同的项目。其次path表示路径映射上述的表达的意思就是当输入网址后则访问/var/tomcat/myapp目录的index.jsp资源。当你有多个项目的时候也可以定义多个context或者资源不在本机中在NFS中则可以使用path映射配合docbase使其定义在NFS路径中!其实一般使用情况都是定义主页位置的!

随后我们还得再重启tomcat才行,随后主机就被我们显示出来了:

tomcat05

OK!至此我就把tomcat的基本配置讲解完毕,一般企业中自研的信息化项目都是这样添加虚拟主机然后上线的,但是关于使用httpd、nginx反向代理还有配置文件的详细部分,我放在以后说!

Comments

Leave a Reply

Your email address will not be published. Name and email are required