你的位置:首页 > 网页设计

[网页设计]tomcat 服务器全解


①B/S、C/S比较 ⑴C/S  C/S结构即客户端/服务器(Client/Server),例如QQ;  需要编写服务器端程序,以及客户端程序,例如我们安装的就是QQ的客户端程序;  缺点:软件更新时需要同时更新客户端和服务器端两端,比较麻烦;  优点:安全性比较好。  ⑵B/S  B/S结构即浏览器/服务器(Browser/Server);  优点:只需要编写服务器端程序;  缺点:安全性较差。②WEB资源 ⑴Web资源介绍  html:静态资源 ;  JSP/Servlet :动态资源。当然,除了JavaWeb程序,还有其他     Web程序,例如:ASP、PHP等。  ⑵静态资源和静态资源区别   客户端请求的页面如果是静态网页,那么服务器会直接把静态网页的内容响应给客户端,如果客户端请求的是动态网页,服务器需要先把动态网页转换成静态网页,然后再把转化后的静态网页响应给客户端。  ⑶访问Web资源 打开浏览器,输入URL③Web服务器  Web服务器的作用是接收客户端的请求,给客户端作出响应。对于JavaWeb程序而已,还需要有JSP/Servlet容器,JSP/Servlet容器的基本功能是把动态资源转换成静态资源,当然JSP/Servlet容器不只这些功能, 我们需要使用的是Web服务器和JSP/Servlet容器,通常这两者会集于一身。JavaWeb服务器:Tomcat(Apache):当前应用最广的JavaWeb服务器;④Tomcat下载Tomcat可以到http://tomcat.apache.org下载。Tomcat分为安装版和解压版:  安装版:一台电脑上只能安装一个Tomcat;  解压版:无需安装,解压即可用,解压多少份都可以,所以我们选    择解压版 ⑴Tomcat目录结构:把解压版Tomcat解压到一个没有中文,没有空格的路径中即可,建议路径不要太深,因为我们需要经常进入Tomcat安装目录。例如:F:\apache-tomcat-7.0.42 ⑵启动和关闭Tomcat    在启动Tomcat之前,我们必须要配置环境变量:  JAVA_HOME:必须先配置JAVA_HOME,因为Tomcat启动需要使用JDK;  CATALANA_HOME:如果是安装版,那么还需要配置这个变量,这个变量用来指定Tomcat的安装路径,例如:F:\apache-tomcat-7.0.42。  启动:进入%CATALANA_HOME%\bin目录,找到startup.bat ,双击即可;  关闭:进入%CATALANA_HOME%\bin目录,找到shutdown.bat ,双击即可;   startup.bat会调用catalina.bat,而catalina.bat会调用setclasspath.bat,setclasspath.bat会使用JAVA_HOME环境变量,所以我们必须在启动Tomcat之前把JAVA_HOME配置正确。启动问题:  点击startup.bat后窗口一闪即消失:检查JAVA_HOME环境变量配置是否正确⑶进入Tomcat主页  访问:http://localhost:8080⑷配置端口号打开%CATALANA_HOME%\conf\server.<??>  <web-app version="2.5"     ="http://java.sun.com/     ="http://www.w3.org/2001/     xsi:schemaLocation="http://java.sun.com/>  </web-app>  在webapps\hello1\下创建index.html。  打开浏览器访问http://localhost:8080/hello/index.html⑶配置外部应用  原来我们的项目放到webapps下,现在我放到外面,也希望tomcat可以找到它!也可以把应用放到Tomcat之外,这就是外部应用了。例如我们把上面写的hello应用从webapps目录中剪切到C盘下,即C:/hello。现在hello这个Web应用已经不在Tomcat中了,这时我们需要在tomcat中配置外部应用的位置,配置的方式一共有两种: ⒈ conf/server.<Host>元素,在其中添加<Context>元素, 代码如下: <host name="localhost" appBase="webappps">    unpackWARs ="true " autoDeploy="true"     <context psth = "xuexie_hello" docBase="c://hello"/>    </host>    path:指定当前应用的名称;  docBase:指定应用的物理位置;  浏览器访问路径:http://localhost:8080/xuexi_hello/index.html⒉conf/catalana/localhost:在该目录下创建itcast_hello.<Context>元素,⑷理解server.<Server> <Servier>  <Connector>  <Engine>   <Host>    <Context>  <Server>:根元素,表示整个服务器的配置信息;  <Service>:<Server>的子元素,在<Server>中只能有一个<Service>元素,它表示服务;  <Connector>:<Service>的子元素,在<Service>中可以有N个<Connector>元素,它表示连接。  <Engine>:<Service>的子元素,在<Service>中只能有一<Engine>元素,该元素表示引擎,它是<Service>组件的核心。  <Host>:<Engine>的子元素,在<Engine>中可以有N个<Host>元素,每个<Host>元素表示一个虚拟主机。所谓虚拟主机就像是真的主机一样,每个主机都有自己的主机名和项目目录。例如<Host name=”localhost” appBase=”webapps”>表示主机名为localhost,这个主机的项目存放在webapps目录中。访问这个项目下的主机时,需要使用localhost主机名,项目都存放在webapps目录下。  <Context>:<Host>元素的子元素,在<Host>中可以有N个<Context>元素,每个<Context>元素表示一个应用。如果应用在<Host>的appBase指定的目录下,那么可以不配置<Context>元素,如果是外部应用,那么就必须配置<Context>。如果要为应用指定资源,也需要配置<Context>元素。我们可以把<Server>看作是一个大酒店:  <Service>:酒店的服务部门;  <Connector>:服务员;  <Engine>:后厨;  <Host>:后厨中的一个区,例如川菜区是一个<Host>、粤菜区是一个 <Host>;  <Context>:后厨的一个厨师。  用户发出一个请求:http://localhost:8080/hello/index.jsp。发现是http/1.1协议,而且还是8080端口,所以就交给了处理这一请求的“服务员(处理HTTP请求的<Connector>)”,“服务员”再把请求交给了“后厨(<Engine>)”,因为请求是要一盘水煮鱼,所以由“川菜区(<Host>)”负责,因为“大老王师傅<Context>”做水煮鱼最地道,所以由它完成。  <Connector>:关心请求中的http、和8080;  < Host>:关心localhost;  <Context>:关心hello⑸映射虚拟主机(了解)我们的目标是,在浏览器中输出:http://www.xuexi.cn就可以访问我们的项目。完成这一目标,我们需要做三件事:  修改端口号为80,  在本机上可以解析域名为127.0.0.1,这需要修改C:\WINDOWS\system32\drivers\etc\hosts文件,添加对http://www.xuexi.cn和127.0.01的绑定关系;在server.<Host>(主机)。⑦HTTP协议 ⑴协议:协议的甲乙双方,就是客户端(浏览器)和服务器!  理解成双方通信的格式!  请求协议;  响应协议; ⑵ HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。其实我们要学习的就是这个两个格式!客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。 ⑶ 请求协议请求协议的格式如下:请求首行;请求头信息;空行;请求体。  浏览器发送给服务器的内容就这个格式的,如果不是这个格式服务器将无法解读!在HTTP协议中,请求有很多请求方法,其中最为常用的就是GET和POST。不同的请求方法之间的区别,后面会一点一点的介绍。 3.1 安装HttpWatchHttpWatch是专门为IE浏览器提供的,用来查看HTTP请求和响应内容的工具。而FireFox上需要安装FireBug软件。如果你使用的是Chrome,那么就不用自行安装什么工具了,因为它自身就有查看请求和响应内容的功能!3.2 打开IE,在访问hello项目的index.jsp之间打开HttpWatch,并点击“Record”按钮。然后访问index.jsp页面。查看请求内容如下: GET /hello/index.jsp HTTP/1.1 Host: localhostUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0Accept: text/html,application/xht+<form action="" method="post"> 关键字:<input type="text" name="keyword"/> <input type="submit" value="提交"/></form> 3.5 打开HttpWatch,输入hello后点击提交,查看请求内容如下:POST /hello/index.jsp HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head>  <base href="http://localhost:8080/hello/">    <title>My JSP 'index.jsp' starting page</title>  <meta http-equiv="pragma" content="no-cache">  <meta http-equiv="cache-control" content="no-cache">  <meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  <meta http-equiv="description" content="This is my page">  <!--  <link rel="stylesheet" type="text/css" href="styles.css">  --> </head>  <body><form action="" method="post"> 关键字:<input type="text" name="keyword"/> <input type="submit" value="提交"/></form> </body></html>   HTTP/1.1 200 OK:响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释;  Server: Apache-Coyote/1.1:服务器的版本信息;  Content-Type: text/html;charset=UTF-8:响应体使用的编码为UTF-8;  Content-Length: 724:响应体为724字节;  Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:响应给客户端的Cookie;  Date: Wed, 25 Sep 2012 04:15:03 GMT:响应的时间,这可能会有8小时的时区差;⑸ 响应码响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。  200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;  404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;  500:请求资源找到了,但服务器内部出现了错误;  302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;  304:当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了index.html的最后修改时间,浏览器会把index.html内容,以及最后响应时间缓存下来。当用户第二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请求时服务器通过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间,If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个,您看看现在的index.html最后修改时间是不是这个,如果还是,那么您就不用再响应这个index.html内容了,我会把缓存的内容直接显示出来。而服务器端会获取If-Modified-Since值,与index.html的当前最后修改时间比对,如果相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面,如果比对不同,那么说明index.html已经做了修改,服务器会响应200。 响应头:⒈Last-Modified:最后的修改时间;请求头:⒉If-Modified-Since:把上次请求的index.html的最后修改时间还给服务器;状态码:304,比较If-Modified-Since的时间与文件真实的时间一样时,服务器会响应304,而且不会有响正文,表示浏览器缓存的就是最新版本!⒊自动刷新响应头 ?  Refresh: 3;url=http://www.xuexi.cn⒋HTML中指定响应头在HTMl页面中可以使用<meta http-equiv="" content="">来指定响应头,例如在index.html页面中给出<meta http-equiv="Refresh" content="3;url=http://www.itcast.cn">,表示浏览器只会显示index.html页面3秒,然后自动跳转到http://www.itcast.cn。