TOMCAT使用帮助(二)

一、打包JavaWeb应用

  在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:

  

范例:将JavaWebDemoProject这个JavaWeb应用打包成war包

  

  执行完之后,就可以得到一个文件,平时开发完JavaWeb应用后,一般都会将JavaWeb应用打包成一个war包,然后将这个war包放到Tomcat服务器的webapps目录下,当Tomcat服务器启动时,就会自动将webapps目录下的war包解压。

比如现在将放到放到Tomcat服务器的webapps目录下

  

Tomcat服务器启动后会自动"Deploying web application",将这个war文件解压缩,如下图所示:

  

  

二、Tomcat的体系结构

  

  Tomcat服务器的启动是基于一个server.xml文件的,Tomcat启动的时候首先会启动一个Server,Server里面就会启动Service,Service里面就会启动多个"Connector(连接器)",每一个连接器都在等待客户机的连接,当有用户使用浏览器去访问服务器上面的web资源时,首先是连接到Connector(连接器),Connector(连接器)是不处理用户的请求的,而是将用户的请求交给一个Engine(引擎)去处理,Engine(引擎)接收到请求后就会解析用户想要访问的Host,然后将请求交给相应的Host,Host收到请求后就会解析出用户想要访问这个Host下面的哪一个Web应用,一个web应用对应一个Context。

 1 <?xml version=‘1.0‘ encoding=‘utf-8‘?>
 2 <Server port="8005" shutdown="SHUTDOWN">
 3   <Service name="Catalina">
 4     <Connector port="8080" protocol="HTTP/1.1"
 5                connectionTimeout="20000"
 6                redirectPort="8443" />
 7     <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
 8                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 9                clientAuth="false" sslProtocol="TLS"
10                keystoreFile="conf/.keystore" keystorePass="123456"/>
11     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
12     <Engine name="Catalina" defaultHost="localhost">
13
14       <Host name="localhost"  appBase="webapps"
15             unpackWARs="true" autoDeploy="true">
16         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
17                prefix="localhost_access_log." suffix=".txt"
18                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
19       </Host>
20       <Host name="www.gacl.cn" appBase="F:\JavaWebApps">
21         <Context path="" docBase="F:\JavaWebApps\JavaWebDemo1"/>
22       </Host>
23
24     </Engine>
25   </Service>
26 </Server>

三、互联网上的加密原理

  Tomcat服务器启动时候会启动多个Connector(连接器),而Tomcat服务器的连接器又分为加密连接器和非加密连机器,比如:

  

  这里访问的就是使用8080端口的那个连接器

1  <Connector port="8080" protocol="HTTP/1.1"
2                connectionTimeout="20000"
3                redirectPort="8443" />

  这个Connector是一个没有加密的连接器,使用"http://localhost:8080/JavaWebDemoProject/Web/1.jsp"去请求服务器上的web资源的这个过程中,我们的请求是不加密的,要是想以一种加密的方式来访问Tomcat服务器,那么就要在Tomcat里面配置一个加密的Connector。要配置一个加密连接器,首先应该把互联网上的加密原理弄清楚。

3.1、对称加密

  采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

  需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。

  所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。

  加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题

  常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等

3.2、非对称加密

  非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。

非对称加密工作原理

  1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。

  2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。

  3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。

  4.A将这个消息发给B(已经用B的公钥加密消息)。

  5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥

  发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样,信息就可以安全无误地到达目的地了,即使被第三方截获,由于没有相应的私钥,也无法进行解密。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。

  非对称性加密依然没有解决数据传输的安全性问题,比如A想向B发数据,B首先生成一对密钥(公钥和私钥),然后将公钥发给A,A拿到B发给他的公钥有就可以使用公钥加密数据后发给B,然而在B公钥发送给A的这个过程中,很有可能会被第三方C截获,C截获到B的公钥后,也使用B的公钥加密数据,然后发给B,B接收到数据后就晕了,因为搞不清楚接收到的数据到底是A发的还是C发的,这是其中一个问题,另一个问题就是,C截获到B发的公钥后,C可以自己生成一对密钥(公钥和私钥),然后发给A,A拿到公钥后就以为是B发给他的,然后就使用公钥加密数据发给B,发送给B的过程中被C截获下来,由于A是用C发给他的公钥加密数据的,而C有私钥,因此就可以解密A加密过后的内容了,而B接收到A发给他的数据后反而解不开了,因为数据是用C的公钥加密的,B没有C的私钥,所以就无法解密。所以,非对称性加密存在一个问题:A想向B发数据,A如何确定拿到的公钥一定是B发的呢?那么如何解决这个问题呢?只能靠一个第三方机构(CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构)来担保。A想向B发数据,B首先将公钥发给CA机构,CA机构拿到B的公钥后跑到B的家里问:这是你发的公钥吗?B确认过后说是:没错,是我发的!那么此时CA机构就会为B的公钥做担保,生成一份数字证书给B,数字证书包含了CA的担保认证签名和B的公钥,B拿到CA的这份数字证书后,就发给A,A拿到数字证书后,看到上面有CA的签名,就可以确定当前拿到的公钥是B发的,那么就可以放心大胆地使用公钥加密数据,然后发给B了。

四、https连接器

  明白了互联网上的加密原理之后,下面来看看浏览器与服务器交互时,浏览器想将数据加密后再发送给服务器,那么该怎么做呢?服务器首先要向浏览器出示一份数字证书,浏览器看到数字证书后,就可以使用数字证书里面的公钥加密数据,所以要想做浏览器和服务器的加密数据传输,那么首先得针对服务器生成一份数字证书。然后再配置一下服务器,让服务器收到浏览器的请求之后,会向浏览器出示它的数字证书。

4.1、生成Tomcat服务器的数字证书

  SUN公司提供了制作证书的工具keytool, 在JDK 1.4以后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe

1 keytool -genkey -alias tomcat -keyalg RSA

使用keytool生成一个名字为tomcat的证书,存放在.keystore这个密钥库中

  

命令执行完之后,操作系统的用户文件夹下面就会生成一个.keystore文件,如下图所示:

  

使用命令:keytool -list -keystore .keystore查看.keystore密钥库里面的所有证书

  

4.2、配置https连接器

  将生成的.keystore密钥库文件拷贝到Tomcat服务器的conf目录下,如下图所示:

  

  修改server.xml文件,配置https连接器,代码如下:

1  <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
2                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
3                clientAuth="false" sslProtocol="TLS"
4                keystoreFile="conf/.keystore" keystorePass="123456"/>

  在server.xml文件中配置了一个端口是8443的加密连接器,浏览器访问8443端口的连接器时,将会以加密的方式来访问web服务器,这个连接器收到浏览器的请求后,将会向浏览器出示一份数字证书,浏览器再用数字证书里面的公钥来加密数据,keystoreFile="conf/.keystore" 用来指明密钥库文件的所在路径,服务器从密钥库中提取证书时需要密码,keystorePass="123456"指明密钥库的访问密码。

  使用"https://localhost:8443/"访问8443的加密连接器

  

  由于密钥库里面的证书是我们手工生成的,没有经过CA的认证,所以使用"https://localhost:8443/"访问8443的加密连接器,浏览器会出现"证书错误,导航已阻止",浏览器认为当前要访问的这个主机是不安全的,不推荐继续访问,点击就可以继续访问了,如下图所示:

  

4.3、安装数字证书

  为了让浏览器信任我们生成的数字证书,需要将数字证书安装到浏览器中,以IE8浏览器为例进行证书安装说明,安装步骤如下:

  

  证书安装成功后,重启IE浏览器,使用"https://localhost:8443/"访问8443的加密连接器,此时浏览器就不再提示证书错误了,如下图所示:

  

4.4、删除数字证书

  以IE8为例进行说明,操作步骤如下:工具----->Internet选项

  

  

  删除之后重启浏览器即可

时间: 2024-10-11 18:29:39

TOMCAT使用帮助(二)的相关文章

Tomcat剖析(二)

Tomcat剖析(二) 目录: Tomcat剖析(一):一个简单的Web服务器 Tomcat剖析(二):一个简单的Servlet服务器 这一节基于 <深度剖析Tomcat>第二章: 一个简单的Servlet服务器 总结而成. 上一节,我们了解了一个简单的Web服务器的总体处理流程是怎样的:这一节,我们开始搭建一个简单的Servlet容器,也就是增加实现了servlet的简单加载执行,而不仅仅是将文件内容输出到浏览器上.当然,这一节的servlet的实现是最简单的,用来了解整个Servlet的大

Tomcat学习之二:tomcat安装、配置及目录文件说明

我们看到tomcat目录/bin文件夹里有个tomcat6w.exe,顾名思义就是tomcat以window方式显示控制台.第1次点击打开它时候,可能会提示:tomcat指定的服务未安装,此时我们可以这样解决它. 打开命令行提示符窗口-> 进入Tomcat安装目录-> 进入bin目录下-> 输入:service.bat install 即可,如图操作,tomcat目录按自己电脑上的来即可 <!--[endif]--> 这样就可以让tomcat以window方式显示控制台.点击

tomcat原理解析(二):整体架构

一 整体结构 前面tomcat实现原理(一)里面描述了整个tomcat接受一个http请求的简单处理,这里面我们讲下整个tomcat的架构,以便对整体结构有宏观的了解.tomat里面由很多个容器结合在一起,主要有server,service,context,host,engine,wrapper,connector这7个容器来组装.当然了tomcat里面还有其它容器这里就不一一列举,因为我只看重点的.这7个容器存着父子关系,即可以通过当前容器找自己的父容器和自己的子容器.说到这我画了一个简单的结

Tomcat 学习笔记二

学习一 java.bean.PropertyChangeListener用来监听bean类的属性值改变.当改变时同时执行对应事件.而且是线程安全的.tomcat用此reload的Boolean值改变是否要重新加载. public class Demo2 implements PropertyChangeListener{ PropertyChangeSupport support = new PropertyChangeSupport(this); private String name; pu

tomcat 解析(二)-消息处理过程

接下来我们应该去了解一下 tomcat 是如何处理jsp和servlet请求的. 1.  我们以一个具体的例子,来跟踪TOMCAT, 看看它是如何把Request一层一层地递交给下一个容器, 并最后交给Wrapper来处理的. 以http://localhost:8080/web/login.jsp为例子 (以下例子, 都是以tomcat4 源码为参考) 这篇心得主要分为3个部分: 前期, 中期, 和末期. 前期:讲解了在浏览器里面输入一个URL,是怎么被tomcat抓住的. 中期:讲解了被to

Tomcat架构解析(二)-----Connector、Tomcat启动过程以及Server的创建过程

Connector用于跟客户端建立连接,获取客户端的Socket,交由Container处理.需要解决的问题有监听.协议以及处理器映射等等. 一.Connector设计   Connector要实现的主要功能如下: 设计图如下: 1.ProtocolHandler Connector中的ProtocolHandler用于处理不同的通信协议,Tomcat主要支持HTTP.AJP协议,并且支持BIO.NIO.APR等I/O方式.ProtocolHandler中使用AbstractEndpoint启动

攻城狮在路上(肆)How tomcat works(二) 一个简单的servlet容器

该节在上一节的基础上增加了所谓对静态资源和动态资源访问的不同控制流程.示例里面采用的是对路径“/servlet/”进行了特殊处理. 一. 主要还是从HttpServer1中的main方法开始,先解析出Request和Response对象,然后如果请求路径中包含/servlet/路径的话, 就进入ServletProcesser1进行处理,否则就进入StaticProcessor进行处理. 在ServletProcessor1中,对Request和Response进行了封装,通过URLClassL

tomcat安装(二)

安装步骤: 1.下载 Tomcat 下载 apache-tomcat-7.0.69.tar.gz(官方网址:http://tomcat.apache.org/) 2.解压 Tomcat 解压 apache-tomcat-7.0.69.tar.gz tar -zxvf apache-tomcat-7.0.69.tar.gz 3.配置 Tomcat 复制解压后的文件到 /opt 目录 cp -r apache-tomcat-7.0.69 /opt 进入 /opt/apache-tomcat-7.0.

JAVA企业级应用TOMCAT实战(二)

使用普通用户运行 使用普通用户来部署服务是比较安全的做法 [[email protected] application]# useradd -u 1001 tomcat [[email protected] application]# passwd tomcat Changing password for user tomcat. New password: Retype new password: passwd: all authentication tokens updated succes

how tomcat works 总结 二

第五章 servlet容器 第 5 章讨论 container 模块.container 指的是 org.apache.catalina.Container 接口,有4 种类型的 container:engine, host, context 和 wrapper.这章提供了两个工作于 context 和wrapper 的程序. 容器共分四类,类图如下: 一个wrapper就是一个servlet; 一个context包含若干个wrapper; 本章分了两个部分,第一部分是wrapper,第二部分是