打包Web应用为war文件:
jar -cvf aa.war news
将war文件拷贝到tomcat的webapps目录下,会自动解压。
配context元素的reloadable元素,让tomcat自动加载更新后的web应用:
<Context path="xxx" docBase="c:\news" reloadable="true" />
开发里面不建议用这个元素,一般情况下等全部改完再一起发布。
Tomcat体系架构
- tomcat 的体系结构在 server.xml 文件中就能体现出来:
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <!--启动服务器,占用8005端口--> <Service name="Catalina"> <!--启动一个服务,服务的名称是“Catalina”--> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!--启动一个客户机连接器,连接器收到请求。这个连接器是个没有加密的连接器--> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <!--把请求交给引擎--> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host> <Host name="www.mengmei.com" appBase="c:\mengmei"> <!--引擎会找到客户机要请求的主机--> <Context path="" docBase="c:\mengmei\mail"></Context> <!--并找到客户机要访问的web应用--> </Host> </Engine> </Service> </Server>
配置https连接器
- 公钥、私钥加密
- 原理:A向B发送数据的时候,先向B要一个密钥用来加密数据。B使用算法生成一个公钥和一个私钥,用公钥加密的数据只能用私钥来解密。这样B把公钥发给A,A把数据用公钥加密后发送给B,然后B用私钥解密数据。
- 这种加密方式的风险:可能有C将B发送给A的公钥截获,把自己生成的公钥发给A,然后再将A用此公钥加密的数据截获,用自己的私钥解密,来窃取数据。然后C再另拟一份数据用B的公钥加密后发送给B,进行捣乱。
- 那么公钥、私钥加密就出现了这样一个问题,A怎么确认这个公钥就是B发过来的。
- 总结:密码学讨论到最后,没有安全性可言。只能用一个机构来担保。有CA这么一个机构,CA为B的公钥担保就会发给B一份数字证书,这个证书包括CA的签名和B的公钥。当A收到公钥后看到有CA的担保,就可以放心大胆的用这个公钥了。如果CA这个机构也被第三方攻陷了,那就都完蛋了。
- 原理:A向B发送数据的时候,先向B要一个密钥用来加密数据。B使用算法生成一个公钥和一个私钥,用公钥加密的数据只能用私钥来解密。这样B把公钥发给A,A把数据用公钥加密后发送给B,然后B用私钥解密数据。
- 为服务器生成数字证书:keytool -genkey -alias tomcat -keyalg RSA
- 生成的证书会放在:终端显示的当前目录下,是一个名为.keystore的密钥库文件。并把密钥库文件剪切到Tomcat的conf目录下。
- 配置密钥库路径和密码到Tomcat服务器:在apache-tomcat-7.0.42\conf\server.xml文件中配置
- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
- maxThreads="150" scheme="https" secure="true"
- clientAuth="false" sslProtocol="TLS" keystoreFile="conf\.keystore" keystorePass="123456"/>
- 如果 keystoreFile 和 keystorePass 这两个属性名记不住的话,去【http://localhost:8080 - Documentation - Reference - Configuration - Connectors - HTTP - SSL Support 的 Attribute表格】中查找。
- 配置后保存server.xml文件,重启服务器。
- 浏览器安全访问服务器的方式:https://localhost:8443
Tomcat服务器的管理平台
- http://localhost:8080/ - Manager App - 需要用户名和密码。
- apache-tomcat-7.0.42\conf\tomcat-users.xml 文件 可以配置登录管理平台的用户名密码。
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
- 默认配了三个用户名和密码都是加了注释的,像这样把注释打开。但是这时候这几个用户没有管理员权限,我们定义了管理员权限,并为第一个用户设置了管理员权限:
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
这样配置后,保存 tomcat-users.xml 文件,并重启服务器,就可以使用了。
- 想访问 http://localhost:8080/ - Host Manager 主机管理,再为用户加个 admin-gui 权限:
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
这样 username="tomcat" password="tomcat" 就既能访问 Manager App 又能访问 Host Manager 了。
web应用的开发前景
软件开发的两种架构C/S 和 B/S :
- C/S 架构是 客户机 - 服务器 架构:
- B/S 架构是典型的 浏览器-服务器 架构:
context元素常用属性