JavaWeb学习总结(三):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 "%r" %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、对称加密
3.2、非对称加密
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。
非对称加密工作原理
发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样,信息就可以安全无误地到达目的地了,即使被第三方截获,由于没有相应的私钥,也无法进行解密。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。
非对称性加密依然没有解决数据传输的安全性问题,比如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选项
JavaWeb学习总结(三):Tomcat服务器学习和使用(二)相关推荐
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下: 范例:将JavaWebDemoProject这个Ja ...
- 强化学习(三)—— 策略学习(Policy-Based)及策略梯度(Policy Gradient)
强化学习(三)-- 策略学习(Policy-Based)及策略梯度(Policy Gradient) 1. 策略学习 2. 策略梯度 3. 案例 1. 策略学习 Policy Network 通过策略 ...
- 独家思维导图!让你秒懂李宏毅2020深度学习(三)——深度学习基础(神经网络和反向传播部分)
独家思维导图!让你秒懂李宏毅2020深度学习(三)--深度学习基础(神经网络和反向传播部分) 长文预警!!!前面两篇文章主要介绍了李宏毅视频中的机器学习部分,从这篇文章开始,我将介绍李宏毅视频中的深度 ...
- JavaWeb学习总结(二):Tomcat服务器学习和使用(一)
一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...
- Tomcat服务器学习和使用(一)
2019独角兽企业重金招聘Python工程师标准>>> 一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文 ...
- JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置. 一.下载D ...
- JavaWeb应用开发环境-Tomcat服务器
2019独角兽企业重金招聘Python工程师标准>>> 1.下载/安装/配置Tomcat服务器Tomcat官方站点:http://jakarta.apache.org 下载Tomca ...
- python学习(三)scrapy爬虫框架(二)——创建一个scrapy爬虫
在创建新的scrapy爬虫之前,我们需要先了解一下创建一个scrapy爬虫的基本步骤 第一步:确定要爬取的数据 以爬取豆瓣电影数据为例: 每部电影所要爬取的信息有: 片名:<头号玩家> 导 ...
- JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
http://www.cnblogs.com/xdp-gacl/p/3734395.html
最新文章
- MyEclipse集成SVN
- php 类定义抽象方法吗,PHP面向对象:接口与抽象方法
- 相对熵与交叉熵_熵、KL散度、交叉熵
- linux下调用python脚本,Linux下QT调用Python脚本的解决方案,Qt,python,一种,解决办法
- 产业链加入爆料行列!2019年新iPhone:外形无变化 后置摄像头升级
- 大一计算机文化基础上机,计算机文化基础上机试题
- 如何设置VSCode中文显示
- Java static、 final修饰符
- 【深度学习】使用预训练模型
- iOS开发之报错:IntxLNK
- for循环的嵌套,for循环的穷举迭代
- 安全提示:勒索病毒漏洞与CPU漏洞务必小心
- 一文道尽Flutter最新最全的学习资料
- yocto之相关class总结
- Windows 2000 单词表
- fri什么意思_fri(fri是什么意思中文翻译)
- MATLAB 线性回归多项式拟合+预测区间、置信区间的绘制
- 使用Python进行自动化测试
- 【Docker 那些事儿】容器监控系统,来自Docker的暴击
- memcached压力测试(附memcached安装方法)
热门文章
- DataInputStream与DataOutputStream类
- bim 模型web页面展示_BIM+装配式建筑工程师2020年必须拿下的技能证书
- python命令行进入帮助模式_python命令行模式直接查看帮助
- 管理服务器一般的作用,管理服务器作用
- dvwa php sql,DVWA phpstudy安装
- java修改title_js修改title
- mysql错误码 1045_MySql 错误代码 1045
- android新闻管理,Android资讯新闻类App(头条、网易等),频道管理集成之数据库存储...
- js aes加密_nodejs中使用Crypto-JS对图片进行加解密
- java lwjgl3_java-LWJGL 3鼠标移动