Tomcat 服务器
一 Tomcat服务器端口的配置
首先看一下Tomcat的目录结构以及每个目录的主要作用
Tomcat的所有配置都放在了conf文件夹中,里面的server.xml是配置的核心文件。
如果想要修改Tomcat的默认启动端口,可以修改server.xml的Connect配置的port属性。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
注意,一旦修改了conf的.xml文件,就要重启tomcat,访问Tomcat服务器时也要以新的访问端口去访问。
bin目录下的这两个负责启动和关闭tomcat服务器
二 Tomcat服务器虚拟目录的映射方式
web应用开发好之后,若想提供给外界访问,需要将web应用所在目录交给web服务器管理,这个过程就叫虚拟目录的映射。Tomcat有以下几种映射方式:
<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 "%r" %s %b" /> </Host>
在Host标签下添加Context标签,如:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/JavaWebApp" docBase="F:\JavaWebDemoProject" /> </Host>
这样就可以将F盘下的JavaWebDemoProject项目映射到JavaWebApp这个虚拟目录上,JavaWebApp这个虚拟目录是由Tomcat服务器管理的,它本身是一个硬盘上不存在的目录,也就是一个虚拟目录。其中,Context表示上下文,代表的就是一个javaWeb应用,context有两个属性:
1.path: 用来配置虚拟目录,必须以"/"开头
2.docBase: 配置此虚拟目录对应着硬盘上Web应用所在目录
这里访问/JavaWebApp/1.jsp就相当于访问F:/JavaWebDemoProject/1.jsp
注意,Tomcat6以后就不在建议通过这种方式来添加虚拟目录的映射,因为每次修改server.xml之后都要重启tomcat服务器来加载server.xml文件。
方式二:Tomcat服务器自动映射
Tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录。也就是说,tomcat服务器的webapps目录下的所有web应用,外界可以直接访问。
因此可以直接将F盘下的JavaWebDemoProject这个应用copy到tomcat服务器的webapps目录下即可。如图:
这时Tomcat服务器就会自动为JavaWebDemoProject这个应用映射一个同名的虚拟目录"/JavaWebDemoProject",然后你就可以用浏览器访问这个资源了,如图:
方式三:添加配置文件
在Tomcat服务器的\conf\Catalina\locahost目录下添加一个xml文件,虚拟目录的名称就是该xml文件名。
之前在方法一中Context元素的path属性跟这里的xml文件名的作用是一样的。如:
在aa.xml文件中添加Context元素映射JavaWeb应用,代码如下:
<Context docBase="F:\JavaWebDemoProject" /> //在aa.xml中就不用path属性了
访问地址:http://localhost:8080/aa/1.jsp
使用这种方式的好处是修改了配置文件之后不用重启Tomcat服务器,Tomcat服务器会自动加载配置文件。
三 Tomcat服务器配置虚拟主机
配置虚拟主机其实就是配置一个网站。只需要修改conf文件下的server.xml,使用Host元素进行配置即可。
<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 "%r" %s %b" /> </Host>
这个配文件中的name="localhost"其实就是定义了一个name为localhost的虚拟主机,这台虚拟主机管理webapps文件夹下的所有web应用,这样我们就可以通过"http://localhost:端口号/JavaWebAppName"来访问了。如果使用如下的方式配置一个虚拟主机:
<Host name="www.gacl.cn" appBase="F:\JavaWebApps"> </Host>
也就是说,配置了一个name为"www.gacl.cn"的虚拟主机,该虚拟主机管理着F:\JavaWebApps下的所有web应用。要想访问"http://www.gacl.cn:端口号/JavaWebAppName",还需要在windows系统中注册"www.gacl.cn"这个域名。
windows系统中注册域名
配置的主机要想通过域名被外部访问,必须在DNS服务器或windows系统中注册访问网站时使用的域名。
找到"C:\Windows\System32\drivers\etc"目录下的hosts文件,如下图所示:
将新添加的网站的域名和IP地址绑定在一起,那么我们在浏览器中使用www.gacl.cn这个域名来访问虚拟主机管理的那些web应用了。
这样就可以访问了。
四 浏览器与服务器交互
当我们在浏览器的地址栏中输入URL地址,如"http://www.gacl.cn:8080/JavaWebDemo1/1.jsp"去访问服务器上的1.jsp事,服务器和浏览器都做了什么呢,我们又是怎样看到1.jsp这个web资源里的内容的呢?
整个交互过程如下:
1. 浏览器根据主机名"www.gacl.cn"去操作系统的hosts文件查找主机名对应的IP地址;
2. 如果没找到,就去互联网上DNS服务器上查找"www.gacl.cn"这台主机对应的IP地址;
3. 找到这台主机对应的IP地址后,就用IP地址连接到Web服务器;
4. 浏览器连接到Web服务器后,就使用http协议向服务器发送请求,发送请求的过程中,浏览器会向Web服务器以stream的形式传输数据,告诉web服务器要访问里面的哪个web应用下的web资源,如下图所示:
这个就是浏览器向web服务器发送请求时传输的数据:
GET /JavaWebDemo1/1.jsp:浏览器以get的方式向服务器发送请求,请求的是avaWebDemo1里的1.jsp这个Web资源。
Host: www.gacl.cn:8080: 访问的是www.gacl.cn对应的IP地址,和8080端口。
5. 浏览器做完上面4步之后,开始等待,等待web服务器把自己想要访问的1.jsp这个资源传输给它;
6. 服务器接收到浏览器传输的数据之后,开始进行解析,将读到的内容再以stream的形式传输给浏览器,如图:
HTTP/1.1 200 OK:使用的HTTP协议1.1的版本,200表示请求成功
这个就是Web服务器传输给浏览器的数据。
7. 浏览器拿到服务器传输给它的数据后,将数据展现出来,如图:
五 Tomcat的体系结构
Tomcat服务器的启动是基于server.xml这个文件的,Tomcat启动时先启动一个Server,Server里就会启动Service,Service里启动多个Conntector(连接器),每一个连接器都在等待客户机的连接,当有用户使用浏览器去访问服务器上的web资源时,首先是连接到Connector,Connector是不处理用户请求的,而是将用户请求直接交给Engine(引擎)去处理,Engine接收到请求后就会解析到用户想要访问的Host,然后将请求交给相应的Host,Host收到请求后就会解析用户想要访问这个Host下面的哪一个web应用,一个web应用对应了一个Context。
整个的过程跟server.xml的配置是对应的:
<?xml version='1.0' encoding='utf-8'?> <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>
六 JavaWeb应用的组成结构
一个JavaWeb项目,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错。
WebRoot:web应用所在目录,一般情况下虚拟目录要配置到此文件夹当中。
WEB-INF:此文件夹必须位于WebRoot文件夹里面,而且必须以这样的形式去命名,字母都要大写。
web.xml:配置文件,有格式要求,此文件必须以这样的形式去命名,并且必须放置到WEB-INF文件夹中。
七 项目打包
JAVA中使用jar命令将项目打包成一个war包,具体的使用方法如下:
如,将JavaWebDemoProject这个JavaWeb应用打包成war包
执行完之后,会得到JavaWebDemoProject.war文件,然后将这个war包放到Tomcat服务器的webapps目录下,当服务器启动时,就会自动将该目录下的war包解压。