Java web开发(2)——Tomcat服务器

一、Tomcat服务器端口配置
Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件。如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改。例如,将Tomcat服务器的启动端口由默认的8080改成8081端口。
Tomcat服务器启动端口默认配置如下

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
将Tomcat服务器启动端口修改成8081端口
<Connector port="8081" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />

这样就把原来默认Tomcat默认的的8080端口改成了8081端口了,需要注意的是,一旦服务器中的*.xml文件改变了,则Tomcat服务器就必须重新启动,重新启动之后将重新读取新的配置信息。因为已经在server.xml文件中将Tomcat的启动端口修改成了8081,所以Tomcat服务器启动时就以8081端口启动了。

二、Tomcat服务器虚拟目录的映射方式

  Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射。那么在Tomcat服务器中,如何进行虚拟目录的映射呢?总共有如下的几种方式:
 
2.1、虚拟目录的映射方式一:在server.xml文件的host元素中配置
找到server.xml文件的host元素,如下图所示:
Java web开发(2)——Tomcat服务器_第1张图片

在这对标签加上即可将在F盘下的JavaWebDemoProject这个JavaWeb应用映射到JavaWebApp这个虚拟目录上,JavaWebApp这个虚拟目录是由Tomcat服务器管理的,JavaWebApp是一个硬盘上不存在的目录,是我们自己随便写的一个目录,也就是虚拟的一个目录,所以称之为”虚拟目录“,代码如下:

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

          <Context path="/JavaWebApp" docBase="F:\JavaWebDemoProject" />
  Host>

其中,Context表示上下文,代表的就是一个JavaWeb应用,Context元素有两个属性。path:用来配置虚似目录,必须以”/”开头,若是省略则是,默认首页目录。docBase:配置此虚似目录对应着硬盘上的Web应用所在目录。

使用浏览器访问”/JavaWebApp”这个虚拟目录下的1.jsp这个web资源,访问结果如下:
Java web开发(2)——Tomcat服务器_第2张图片

1.jsp可以正常访问,这说明我们已经成功地将将在F盘下的JavaWebDemoProject这个JavaWeb应用映射到JavaWebApp这个虚拟目录上了,访问”/JavaWebApp/1.jsp“就相当于访问”F:\JavaWebDemoProject\1.jsp”

  注意:在Tomcat6之后中,不再建议在server.xml文件中使用配置context元素的方式来添加虚拟目录的映射,因为每次修改server.xml文件后,Tomcat服务器就必须要重新启动后才能重新加载server.xml文件。

2.2、虚拟目录的映射方式二:让tomcat服务器自动映射
  tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问。
  例如:把F盘下的JavaWebDemoProject这个JavaWeb应用直接copy到tomcat服务器webapps目录中,如下图所示:
  Java web开发(2)——Tomcat服务器_第3张图片
 此时Tomcat服务器就会自动为JavaWebDemoProject这个JavaWeb应用映射一个同名的虚拟目录”/JavaWebDemoProject”,然后就可以使用浏览器访问这个JavaWeb应用的资源了。

2.3、虚拟目录的映射方式三
在tomcat服务器的\conf\Catalina\localhost目录下添加一个以xml作为扩展名的文件,xml文件的名字可以任意取,比如下面的aa.xml。
Context元素的path属性是用来配置虚似目录的名称的,所以虚似目录的名称就是这个xml文件的名称。
Java web开发(2)——Tomcat服务器_第4张图片

在aa.xml文件中添加Context元素映射JavaWeb应用,代码如下:

注意:在Context元素中并没有指明path属性来设置虚拟目录的名称,那么”F:\JavaWebDemoProject”映射的虚拟目录名称是神马呢,就是当前正在编辑的这个xml文件的名称aa。
Java web开发(2)——Tomcat服务器_第5张图片

使用这种方式映射虚拟目录的最大好处是修改了配置文件后不用重启Tomcat服务器,比如将aa.xml修改成bb.xml,Tomcat服务器会自动Undeploying context [/aa],然后自动信息: Deploying configuration descriptor D:\apache-tomcat-7.0.53\conf\Catalina\localhost\bb.xml

三、Tomcat服务器配置虚拟主机

3.1、配置虚拟主机
配置虚似主机就是配置一个网站。在Tomcat服务器配置一个虚拟主机(网站),需要修改conf文件夹下的server.xml这个配置文件,使用Host元素进行配置,打开server.xml,可以看到Tomcat服务器自带的一个名称为localhost的虚拟主机(网站),如下图所示:
Java web开发(2)——Tomcat服务器_第6张图片

平时我们将开发好的JavaWeb应用放到webapps文件夹下,然后就可以使用 “http://localhost:端口号/JavaWebAppName”的方式去访问了,其实访问的就是name是”localhost”的那台虚拟主机(Host),这台虚拟主机管理webapps文件夹下的所有web应用。

 例如:http://localhost:8080/JavaWebDemoProject/1.jsp,这个URL地址访问的就是名称是localhost的那台虚拟主机下的JavaWebDemoProject这个应用里面的1.jsp这个web资源。

我们可以使用如下的方式配置一个虚拟主机,例如:  

<Host name="www.gacl.cn" appBase="F:\JavaWebApps">      
Host>

这里我们新配置一个虚拟主机,虚拟主机的name是”www.gacl.cn”,虚拟主机”www.gacl.cn”现在管理着JavaWebApps文件夹下的所有web应用,平时我们在互联网上使用域名”www.baidu.com”访问百度的网站时,其实就是在访问一个名称是”www.baidu.com”的虚拟主机,所以当我们要访问name是”www.gacl.cn”的这个虚拟主机时,就可以使用”域名(www.gacl.cn)”去访问,注意一下appBase=”F:\JavaWebApps”,这里的JavaWebApps文件夹代表的不是一个项目的根目录,而是一个存放了一个或者多个JavaWeb应用的文件夹,如下图所示:

Java web开发(2)——Tomcat服务器_第7张图片

就好像是Tomcat服务器的webapps文件夹一样,里面存放了很多的JavaWeb应用
Java web开发(2)——Tomcat服务器_第8张图片

3.2、windows系统中注册域名
  配置的主机(网站)要想通过域名被外部访问,必须在DNS服务器或windows系统中注册访问网站时使用的域名,找到”C:\Windows\System32\drivers\etc“目录下的hosts文件,如下图所示:
  Java web开发(2)——Tomcat服务器_第9张图片
编辑这个文件,将新添加的网站的域名和IP地址绑定在一起,这样我们就可以在浏览器中使用www.gacl.cn这个域名去访问name是www.gacl.cn那个虚拟主机里面管理的那些web应用了

Java web开发(2)——Tomcat服务器_第10张图片

使用浏览器通过域名”www.gacl.cn“访问”www.gacl.cn“这个虚拟主机下的JavaWebDemo1这个web应用下的1.jsp这个web资源,”www.gacl.cn”这个虚拟主机开放了一个8080端口,用户只能通过这个8080端口去访问JavaWebDemo1这个web应用下的1.jsp这个web资源:
Java web开发(2)——Tomcat服务器_第11张图片

四、浏览器与服务器交互的过程

当我们打开浏览器,在浏览器的地址栏中输入URL地址”http://www.gacl.cn:8080/JavaWebDemo1/1.jsp“去访问服务器上的1.jsp这个web资源的过程中,浏览器和服务器都做了神马操作呢,我们是怎么在浏览器里面看到1.jsp这个web资源里面的内容的呢?

浏览器和服务器做了以下几个操作:
(1)浏览器根据主机名”www.gacl.cn”去操作系统的Hosts文件中查找主机名对应的IP地址。
(2)浏览器如果在操作系统的Hosts文件中没有找到对应的IP地址,就去互联网上的DNS服务器上查找”www.gacl.cn”这台主机对应的IP地址。
(3)浏览器查找到”www.gacl.cn”这台主机对应的IP地址后,就使用IP地址连接到Web服务器。
(4)浏览器连接到web服务器后,就使用http协议向服务器发送请求,发送请求的过程中,浏览器会向Web服务器以Stream(流)的形式传输数据,告诉Web服务器要访问服务器里面的哪个Web应用下的Web资源,如下图所示:
Java web开发(2)——Tomcat服务器_第12张图片
这就是浏览器向Web服务器发请求时向服务器传输的数据,解释一下”GET /JavaWebDemo1/1.jsp HTTP/1.1”这里面的内容,

GET——告诉Web服务器,浏览器是以GET的方式向服务器发请求。

/JavaWebDemo1/1.jsp——告诉Web服务器,浏览器要访问JavaWebDemo1应用里面的1.jsp这个Web资源。

HTTP/1.1——告诉Web服务器,浏览器是以HTTP协议请求的,使用的是1.1的版本。

(5)浏览器做完上面4步工作后,就开始等待,等待Web服务器把自己想要访问的1.jsp这个Web资源传输给它。
(6)服务器接收到浏览器传输的数据后,开始解析接收到的数据,服务器解析”GET /JavaWebDemo1/1.jsp HTTP/1.1“里面的内容时知道客户端浏览器要访问的是JavaWebDemo1应用里面的1.jsp这个Web资源,然后服务器就去读取1.jsp这个Web资源里面的内容,将读到的内容再以Stream(流)的形式传输给浏览器,如下图所示:
Java web开发(2)——Tomcat服务器_第13张图片
这个就是Web服务器传输给浏览器的数据。

(7)浏览器拿到服务器传输给它的数据之后,就可以把数据展现给用户看了,如下图所示:
Java web开发(2)——Tomcat服务器_第14张图片
看到的这个”JavaWebDemo1”就是浏览器解析服务器发送回来的数据后的效果。

五、JavaWeb应用的组成结构

开发JavaWeb应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错. JavaWeb项目标准的组成结构:
Java web开发(2)——Tomcat服务器_第15张图片

WebRoot →Web应用所在目录,一般情况下虚拟目录要配置到此文件夹当中。

  ┝—WEB-INF:此文件夹必须位于WebRoot文件夹里面,而且必须以这样的形式去命名,字母都要大写。

    ┝—web.xml:配置文件,有格式要求,此文件必须以这样的形式去命名,并且必须放置到WEB-INF文件夹中。

  web.xml的格式可以直接从Tomcat中参考得到:找到Tomcat目录下的webapps\ROOT\WEB-INF这个目录下的web.xml文件,把这个文件拷贝到我们新建的WEB-INF文件夹中,并修改这个web.xml文件,把里面的注释删除掉,只留下如下所示的代码即可:
  


<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <display-name>Welcome to Tomcatdisplay-name>
  <description>
     Welcome to Tomcat
  description>

web-app>

六、打包JavaWeb应用
在Java中,使用”jar”命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:
Java web开发(2)——Tomcat服务器_第16张图片

范例:将JavaWebDemoProject这个JavaWeb应用打包成war包
Java web开发(2)——Tomcat服务器_第17张图片
执行完之后,就可以得到一个文件这里写图片描述,平时开发完JavaWeb应用后,一般都会将JavaWeb应用打包成一个war包,然后将这个war包放到Tomcat服务器的webapps目录下,当Tomcat服务器启动时,就会自动将webapps目录下的war包解压。

比如现在将其放到Tomcat服务器的webapps目录下:
Java web开发(2)——Tomcat服务器_第18张图片

Tomcat服务器启动后会自动”Deploying web application“,将这个war文件解压缩,如下图所示:
这里写图片描述

七、Tomcat的体系结构
Java web开发(2)——Tomcat服务器_第19张图片

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


<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="conf/.keystore" keystorePass="123456"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
      Host>
      <Host name="www.gacl.cn" appBase="F:\JavaWebApps">
        <Context path="" docBase="F:\JavaWebApps\JavaWebDemo1"/>
      Host>

    Engine>
  Service>
Server>

八、互联网上的加密原理

Tomcat服务器启动时候会启动多个Connector(连接器),而Tomcat服务器的连接器又分为加密连接器和非加密连接器,比如:
Java web开发(2)——Tomcat服务器_第20张图片

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

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

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

(1)对称加密

  采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
  需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
  所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
  加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。
  常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等

(2)非对称加密

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

九、https连接器

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

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

keytool -genkey -alias tomcat -keyalg RSA

使用keytool生成一个名字为tomcat的证书,存放在.keystore这个密钥库中
Java web开发(2)——Tomcat服务器_第21张图片

命令执行完之后,操作系统的用户文件夹下面就会生成一个.keystore文件,如下图所示:
Java web开发(2)——Tomcat服务器_第22张图片

使用命令:keytool -list -keystore .keystore查看.keystore密钥库里面的所有证书
Java web开发(2)——Tomcat服务器_第23张图片

(2)配置https连接器

  将生成的.keystore密钥库文件拷贝到Tomcat服务器的conf目录下,如下图所示:
  Java web开发(2)——Tomcat服务器_第24张图片

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

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

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

使用”https://localhost:8443/“访问8443的加密连接器
Java web开发(2)——Tomcat服务器_第25张图片

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

(3)安装数字证书

  为了让浏览器信任我们生成的数字证书,需要将数字证书安装到浏览器中,以IE8浏览器为例进行证书安装说明,安装步骤如下:
  Java web开发(2)——Tomcat服务器_第26张图片

Java web开发(2)——Tomcat服务器_第27张图片

Java web开发(2)——Tomcat服务器_第28张图片

Java web开发(2)——Tomcat服务器_第29张图片

Java web开发(2)——Tomcat服务器_第30张图片

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

(4)删除数字证书

  以IE8为例进行说明,操作步骤如下:工具—–>Internet选项:
  Java web开发(2)——Tomcat服务器_第31张图片

Java web开发(2)——Tomcat服务器_第32张图片

删除之后重启浏览器即可

你可能感兴趣的:(JAVA,tomcat,java,web)