Tomcat
时间:2016-11-6 23:29
——软件系统体系结构
1、常见的软件系统体系结构
B/S架构和C/S架构。
B/S架构使用的是http协议,C/S架构使用的是TCP/IP协议。
CS架构:
* C/S架构即客户端/服务器(Client/Server),例如QQ。
* 需要编写服务器端程序,以及客户端程序。
* 缺点:软件更新时需要同时更新客户端和服务器两端的程序,比较麻烦。
* 优点:安全性高,即客户端与服务器是一一对应的,内部细节密封性较高,所以安全。
开发成本低,管理维护简单,产品升级方便,对用户的培训费用低,用户使用方便,出现故障的概率比较小
B/S架构:
* B/S架构即浏览器/服务器(Browser/Server)。
* 优点:只需要编写服务器端程序。
* 缺点:安全性较差,客户端不能随意变化,受到浏览器的限制
开发成本低,管理维护简单,产品升级方便,对用户的培训费用低,用户使用方便,出现故障的概率比较小
——Web资源
1、Web资源介绍
静态资源:HTML
动态资源:JSP/Servlet
除了JavaWeb还有其它Web程序,例如:ASP.net和PHP等。
2、静态资源和动态资源的区别
如果客户端请求的是静态网页,那么服务器会直接把静态网页的内容响应给客户端。
指Web页面中供人们浏览数据是由程序产生的,不同时间点访问Web页面看到的内容不同,如果客户端请求的是动态网页,服务器需要先把动态网页转换成静态网页,然后再把转换后的静态网页响应给客户端。
1、常见的软件系统体系结构
B/S架构和C/S架构。
B/S架构使用的是http协议,C/S架构使用的是TCP/IP协议。
CS架构:
* C/S架构即客户端/服务器(Client/Server),例如QQ。
* 需要编写服务器端程序,以及客户端程序。
* 缺点:软件更新时需要同时更新客户端和服务器两端的程序,比较麻烦。
* 优点:安全性高,即客户端与服务器是一一对应的,内部细节密封性较高,所以安全。
开发成本低,管理维护简单,产品升级方便,对用户的培训费用低,用户使用方便,出现故障的概率比较小
B/S架构:
* B/S架构即浏览器/服务器(Browser/Server)。
* 优点:只需要编写服务器端程序。
* 缺点:安全性较差,客户端不能随意变化,受到浏览器的限制
开发成本低,管理维护简单,产品升级方便,对用户的培训费用低,用户使用方便,出现故障的概率比较小
——Web资源
1、Web资源介绍
静态资源:HTML
动态资源:JSP/Servlet
除了JavaWeb还有其它Web程序,例如:ASP.net和PHP等。
2、静态资源和动态资源的区别
如果客户端请求的是静态网页,那么服务器会直接把静态网页的内容响应给客户端。
指Web页面中供人们浏览数据是由程序产生的,不同时间点访问Web页面看到的内容不同,如果客户端请求的是动态网页,服务器需要先把动态网页转换成静态网页,然后再把转换后的静态网页响应给客户端。
3、访问Web资源
打开浏览器,输入URL:
协议名://域名:端口/路径,例如:http://www.baidu.com:80/index.html
4、动态网页技术的发展历程
当互联网初现江湖时,当时主要是html(1993),由于HTML只支持静态的文字和图片,不能与用户进行交互,为弥补这个不足之处,陆续出现了以下网页技术。
(1)CGI(Common Gateway Interface)特点
a:CGI技术是早期动态网页使用最多的技术,发展的比较成熟,功能强大。
b:效率比较低,编程比较困难。
c:CGI可以用不同的语言编写(VB、Delphi、C/C++、Perl)常用的是C/C++和Perl语言。
d:现在使用CGI做动态网页比较少,但是还是有,主要用于Linux/Unix操作系统中。
(2)ASP
ASP是HTML+JavaScript+COM组件的形式,ASP功能的强大不在于能使用相关的脚本语言而是使用COM组件,COM组件的开发是比较困难的。
ASP的优势:
1、简单易学
2、安装使用方便(Windows+IIS)
3、效率比CGI高
ASP的不足:
1、功能扩展比较困难,因为ASP的功能扩展在于COM组件,而开发COM组件是比较困难的。
2、安全性低,因为ASP是与Windows系统和IIS一起工作的,所以WIndows和IIS的安全漏洞会对ASP造成影响。
3、跨平台性弱,只能用于Windows操作系统。
4、实现企业级的功能困难,如集群式服务器,负载均衡。(ASP一般不用于大型网站)
(3)JSP
JSP = HTML + Java + JSP + javascript
JSP优势:
1、一次编写,到处运行。(基于Java)
2、良好的跨平台性。
3、多种开发工具支持JSP。
4、强大的可伸缩性(JSP + JavaBean的方式)。
JSP的不足:
1、JSP的产品复杂度高。(JSP入门比ASP难)
2、JSP要求运行的机器配置要高,因为JSP是用class常驻内存的方式运行的,效率高,但是需要占用更多的内存。
(4)PHP
PHP的优势:
1、良好的跨平台性,多种数据库支持。
2、效率比较高,具有良好的安全性。
3、免费使用LAMP,成本低。
4、开放的源代码,所有的PHP源代码都可以找到。
5、入门快,PHP相对于其他语言,编写简单,实用性强,更适合初学者。
6、面向对象编程,在PHP4和PHP5中,面向对象方面都有了很大的改进,现在PHP完全可以用来开发大型商业程序。
PHP的不足:
1、安装复杂(PHP的很多功能需要安装相应的应用库,如要更好地支持图形就要安装gd库)
2、灵活,对程序员的约数太少,PHP是解释运行机制,所以很多问题在运行阶段才会发现。
——Web服务器
Web服务器的作用是接收客户端的请求,给客户端做出响应。
对于JavaWeb程序而言,需要有JSP/Servlet容器,JSP/Servlet容器的基本功能是能把动态转换成静态资源。
首先应该明白,JSP或者Servlet本身的运行与普通客户端程序是不相同的,客户端程序是我们直接调用的,而JSP或者Servlet的运行需要服务器,通常称为应用服务器,服务器负责创建JSP或者Servlet对象,然后调用JSP对象或者Servlet对象的相应方法。由谁完成JSP或者Servlet对象的创建、方法的调用的呢?由容器完成,或者称为JSP容器。容器是用来容纳其它组件的,这些组件包括JSP或者Servlet,完成这些组件对象的创建、方法的调用以及对象的销毁。容器如何知道创建哪个JSP或者Servlet的对象的呢?对于JSP,是根据文件名字确定的,对于Servlet,是通过web.xml中的配置确定的。容器如何知道调用JSP或者Servlet的哪个方法?对于JSP,JSP页面会被转换成Java类,而页面中的内容会被转换成Java类中的某个方法中的内容,而这个方法的名字是固定的,容器会调用这个方法。对于Servlet,用户需要根据请求的类型编写doGet或者doPost方法,容器会根据请求的方式是get还是post分别调用doGet或者doPost。而事实上,Tomcat在大多数情况下充当servlet的容器,也就是说:在写完JSP代码后进行第一次执行时,tomcat(servlet容器)先将JSP代码翻译成servlet类(java代码),然后实例化该类,再调用该类的init,service,destory等进行生命周期服务。当客户端再进行第二次访问请求时,此时就没有servlet容器的翻译这一步了,因为之前翻译的java代码会一直保存,以便于后面的访问不再进行翻译,可大大提高访问效率。所以,JSP页面在第一次被访问时,其所花费的时间是最长的。
JavaWeb服务器:
Tomcat(Apache):目前应用最广的开源JavaWeb服务器。
JBoss(Redhat):支持JavaEE,应用比较广。
JBoss是全世界开发者共同努力的成果(开源),一个基于JavaEE的开放源代码的应用服务器,因为JBoss代码遵循LGPL许可,所以可以在任何商业应用中免费使用它,而不用支付任何费用。2006年JBoss公司被Redhat公司收购。
GlassFish(Oracle),Oracle开发的JavaWeb服务器,应用不是很广。
Resion(Caucho):支持JavaEE,应用越来越广。
WebLogic(Oracle):收费,支持JavaEE,适合大型项目。
WebLogic是BEA公司的产品,是目前应用最广泛的Web服务器,支持JavaEE规范,并且不断地完善以适应新的开发需求。
WebSphere(IBM):收费,支持JavaEE,适合大型项目。
JavaEE支持EJB(Enterprise JavaBean),而JavaWeb不支持EJB。
Tomcat不支持JavaEE规范,但是支持JavaWeb规范,JavaEE和JavaWeb规范的区别就是使用的容器不同,JavaEE使用的是EJB容器,而JavaWeb使用的是SSH框架。
EJB是重量级,SSH是轻量级。
模拟Web服务器:
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(80);
System.out.println("等待链接...");
Socket s = ss.accept();
System.out.println("连接成功");
OutputStream os = s.getOutputStream();
//返回一句话
os.write("欢迎访问".getBytes());
os.close();
s.close();
}
——Tomcat
1、Tomcat概述
Tomcat服务器由Apache提供,开源免费,由SUN公司和其他公司参与Tomcat的开发,所以最新的JSP/Servlet规范总是能在Tomcat中体现出来。
Tomcat7.0支持Servlet3.0,而Tomcat6.0只支持Servlet2.5.
2、安装、启动、配置Tomcat
下载Tomcat可以到:http://tomcat.apache.org下载。
Tomcat分为安装版和解压版:
* 安装版:一台电脑上只能安装一个Tomcat。
* 解压版:无需安装,解压即可使用。
tar.gz文件是Linux操作系统下的安装版本。
exe文件是Windows操作系统下的安装版本。
zip文件是Windows操作系统下的压缩版本。
3、安装步骤:
1)把解压版Tomcat解压到一个没有中文,没有空格的路径中即可,路径不要太深。
2)配置JAVA_HOME环境变量
内容指向JDK安装路径,例如:C:/java/jdk
为什么要配置JAVA_HOME?
因为Tomcat本身就是用Java编写的程序。
3)启动Tomcat服务器
tomcat/bin/startup.bat
4、常见Tomcat无法启动故障
1)JAVA_HOME环境变量配置错误
2)也可以在startup.bat文件中设置JAVA_HOME环境变量。
在首次使用JAVA_HOME前设置即可
set JAVA_HOME=JDK路径。
3)端口占用问题
如果已经占用了8080端口,则无法启动tomcat服务器。
可以使用:netstat -anb 查看端口占用情况。
可以在任务管理器中通过查看PID(进程标识符)来查看端口占用情况。
可以主动改变tomcat的端口,到conf/server.xml文件中修改。
<Connector connectionTimeout="20000" port="8080"
4)Catalina_home环境变量的设置,用于指定启动哪个tomcat服务器。
5)能够正常启动,但是会导航到另外一个页面
修改浏览器的加载项,把默认的导航禁用即可。
6)在访问tomcat的时候,一定要保证tomcat服务器是启动状态。
5、启动和关闭Tomcat
在启动Tomcat之前,必须要配置JAVA_HOME环境变量:
* JAVA_HOMT:必须先配置JAVA_HOME,因为Tomcat启动需要使用JDK。
* CATALINA_HOME:如果是安装版,那么还需要配置这个变量,这个变量用来指定Tomcat的安装路径,例如:F:\Tomcat
* 启动:进入Tomcat\bin目录,找到startup.bat文件,双击即可。
* 关闭:进入Tomcat\bin目录,找到shutdown.bat文件,双击即可。
startup.bat会调用catalina.bat,而catalina.bat会调用setclasspath.bat,setclasspath.bat会使用JAVA_HOME环境变量,所以必须在启动Tomcat之前正确配置JAVA_HOME。
如果点击startup.bat后窗口一闪而过,检查JAVA_HOME环境变量配置是否正确。
6、访问Tomcat主页
http://localhost:8080
7、配置端口号
打开%CATALINA_HOME%\conf\server.xml文件:
修改port即可,http默认端口号为80,也就是说,在URL中如果不给出端口号时就默认使用80端口。
当把端口号修改为80后,在浏览器中只需要输入:http://localhost就可以访问Tomcat的主页了。
端口号:0 ~ 65535
8、Tomcat目录结构
(1)bin:
该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat7.exe、tomcat7w.exe,前者是在控制台下启动Tomcat,后者是弹出窗口启动Tomcat。如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat服务,但是需要先配置JAVA_HOME环境变量才能成功启动,shutdown.bat用来停止Tomcat。
(2)conf:
存放Tomcat服务器的各种配置文件,这是一个非常重要的目录,这个目录下有四个非常重要的文件:
* server.xml:
配置整个服务器信息,例如修改端口号,添加虚拟主机等。
* tomcat-users.xml:
存储Tomcat用户的文件,这里保存的是Tomcat的用户名及密码,以及用户的角色信息,可以按照该文件中的注释信息添加Tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了。
* web.xml:
不熟描述文件,这个文件中注册了很多mime类型,即文档类型。这些mime类型是客户端与服务器之间说明文档类型的,如果用户请求一个HTML网页,那么服务器还会告诉客户端浏览器相应的文档是text/html类型,这就是mime类型,客户端浏览器通过这个mime类型就知道改如何处理它了,即在浏览器中显示这个HTML文件,但是如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是会弹出一个下载窗口。mime类型就是用来说明文档的内容时什么类型的。
* context.xml:
对所有应用的统一配置,通常不会去配置它。
(3)lib:
Tomcat的类库,里面是用到的jar包,如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar包放到这个目录中,这个目录中的jar包所有项目都可以共享。
(4)logs:
这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
(5)temp:
存放Tomcat的临时文件,这个目录下的文件可以在停止Tomcat之后删除。
(6)webapps:
存放Web项目的目录,其中每一个文件夹都是一个项目,如果这个目录下已经存在了目录,那么都是Tomcat自带的项目,其中Root是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是Root项目。http://localhost:8080/examples,进入示例项目,其中examples就是项目名,即文件夹的名字。(tomcat6.0之后才支持)
(7)work:
运行时生成的文件,最终通过webapps运行的生成的文件都会放在这里。可以把这个目录下的文件都删除,再次运行时会再次生成work目录,当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的Java文件和class文件都会存放在这个目录下。
(8)LICENSE:
许可证。
(9)NOTICE:
说明文件。
9、如何访问一个web应用的某个文件:
http://localhost:8080/webapps/helloworld.html
统一资源定位器(URL):
http://localhost:8080/webapps/helloworld.html
URI:
webapps/helloworld.html
协议:
http
主机(域名)(IP地址):
localhost(127.0.0.1)
端口:
8080
Web应用(WebApplication):
webapps
资源文件:
helloworld.html
什么是URI:
统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。
什么是URL:
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL和URI的区别:
URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
URI是一种语义上的抽象概念,可以是绝对的路径,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的路径。
8、mime类型
——Web应用
什么是Web应用?
Web应用是多个Web资源的集合,简单地说,可以把Web应用理解为是硬盘上的一个目录,这个目录用于管理多个Web资源,例如news,blog。
Web应用通常也称为Web应用程序或Web工程。
一个Web应用由多个Web资源或其他文件组成,包括html文件、css文件、js文件、动态web页面、java程序、支持jar包、配置文件等。开发人员在开发Web应用时,应按照tomcat安装路径下的目录结构存放这些文件,否则,在把Web应用交给Web服务器管理时,不仅可能会使Web应用无法访问,还会导致Web服务器启动时报错。
静态网站:
* 在webapps目录下创建一个目录(命名不能包含中文和空格),这个目录就是项目目录。
* 在项目目录下创建一个HTML文件。
动态网站:
* 在webapps目录下创建一个项目目录。
* 在项目目录下创建如下内容:
* WEB-INF目录
* 在WEB-INF目录下创建web.xml文件(web.xml文件中的内容可以去其他项目中去拷贝。=)
* 创建静态或动态页面。
范例:
webapps
| -- Hello
| -- index.html
| -- WEB-INF
| -- web.xml
| -- classes
| -- lib
* Hello
应用目录,Hello就是项目名称。
* index.html
应用资源,应用下可以有多个资源,例如:HTML、JSP、CSS等,也可以把资源放到文件夹中,例如:Hello\html\index.html,这是访问URL为:http:localhost:8080/Hello/html/index.html。
* WEB-INF:
这个目录名称必须全部大写,这个目录下的文件是无法通过浏览器直接访问的,也就是说放到这个目录下的文件是安全的。
* web.xml:
应用程序的部署描述文件,可以在该文件中对应用进行配置,例如配置应用的首页:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
* classes:
存放class文件的目录。
* lib:
存放jar包的目录。
——MyEclipse创建JavaWeb应用
1、配置Tomcat
使用MyEclipse配置服务器后,就可以使用MyEclipse来启动和停止服务了,当然,首先需要安装好Tomcat服务器才能配置。
MyEclipse自带了一个Tomcat,不建议使用,所以首先需要把MyEclipse自带的Tomcat关闭,然后再配置我们自己的Tomcat。
2、配置外部应用
也可以把应用放到Tomcat之外,这就是外部应用了,例如我们把之前写的Hello应用从webapps目录中复制到C盘下,即C:/Hello,现在Hello这个Web应用已经不在Tomcat中了,这时我们需要在Tomcat中配置外部应用的位置,配置的方式一共有两种:
(1)conf/server.xml:
打开server.xml文件,找到<Host>元素,在其中添加<Context>元素,代码如下:
* Context:上下文(目录)
* path:webapps的名称
* docBase:webapps的路径(虚拟目录的路径,绝对路径)
绝对路径:从根目录开始查找。
相对路径,从文件当前所在目录开始查找。
* 浏览器访问路径:http://localhost:8080/Hello/index.html
* reloadable
如果设置为true,Tomcat服务器在运行时,会监视WEB-INF/classes和WEB-INF/lib目录下类的改变,如果发现有类被更新,Tomcat服务器将自动重启并重新加载Web应用程序。这个特性在应用程序的开发阶段非常有用,但是它需要额外的运行时开销,所以在产品发布时不建议使用。
该属性的默认值是false。
* unpackWAR
如果为true,则Tomcat在运行Web应用程序前将自动展开所有压缩的Web应用程序。
该属性的默认值是true。
webapps打包:jar -cvf xxx.war *
(2)conf/catalina/localhost:
在该目录下创建Hello.html文件,在文件中编写<Context>元素,代码如下:
* 文件名:指定当前应用的名称。
* docBase:指定应用的物理位置。
* 浏览器访问路径:http://localhost:8080/Hello/index.html
3、server.xml文件
<Server>
<servie>
<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>看做是一个大酒店:
<Server>:酒店的服务部门。
<Connector>:服务员。
<Engine>:后厨
<Host>:后厨中的一个区,例如川菜区与鲁菜区。
<Context>:后厨中的一个厨师。
用户发出一个请求:http://localhost:8080/Hello/index.jsp,发现是HTTP/1.1协议,而且还是8080端口,所以就交给了处理这一请求的“服务员(处理HTTP请求的<Connector>)”,“服务员”再把请求交给“后厨(<Engine>)”,因为请求是要一盘水煮鱼,所以由“川菜区(<Host>)”负责,因为“王师傅(<Context>)”会做水煮鱼,所以由他完成。
* <Connector>:关心请求中的http协议和端口号。
* <Host>:关心localhost,每一个主机都对应一个项目目录。
* <Context>:关心Hello,表示上下文,表示一个项目。
4、映射虚拟主机
我们的目标是,在浏览器中输入:http://www.baidu.com就可以访问我们的项目,为了完成这一目标,我们需要做三件事:
* 修改端口号为80
* 在本机上可以解析域名为127.0.0.1,这需要修改C:\WINDOWS\system32\drivers\etc\hosts文件,添加对http://www.baidu.com和127.0.0.1的绑定关系。
* 在server.xml文件中添加一个<Host>主机。
* name="www.baidu.com":指定虚拟主机名为www.baidu.com
* appBase="G:\Host":指定当前虚拟主机的应用程序存放目录为G:\Host
* 在Host目录下创建名为ROOT的应用,因为一个主机只可以有一个名为ROOT的应用,名为ROOT的应用在浏览器中访问可以不给出应用名称。
——web.xml文件
1、web.xml文件为web应用的配置文件,它必须放在web应用目录、WEB-INF目录下。
2、web.xml文件用于对web应用下的web资源进行配置,例如将某个web资源设置为网站首页、将servlet程序映射到
某个URL上地址等等。
举例:通过web.xml文件配置网站首页
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
在一台Web服务器中配置网站:
我们在实际访问网站的过程中,不可能使用(http://localhost:8080/webapps/资源名)的方式去访问网站,而是使
用(http://www.baidu.com)的方式去访问网站,这个又是怎么实现的呢?
实现步骤如下:
1)在C:\WINDOWS\system32\drivers\etc目录下的hosts文件中添加新的主机名和对应IP地址。
2)在tomcat的server.xml文件中添加主机名。
<Host name="www.wangyanchao.com" appBase="d:\webapps" >
<Context path="/" docBase="d:\webapps" />
</Host>
3)在d:\webapps\WEB-INF\目录下的web.xml文件中吧hello设置为首页。
如果想在地址栏中输入地址的时候省略端口号,可以把Tomcat的启动端口设置为80。
4)重启Tomcat服务器。
浏览器访问Web站点的原理:
1)输入http://localhost:8080/webapps/hello.html。
2)解析主机域名:localhost。
3)到本机hosts文件查询localhost对应的IP地址。
4)如果在hosts文件中查询到localhost对应的IP地址,就去访问IP地址对应的机器。
5)如果在hosts文件中没有查询到localhost对应的IP地址,就去查询DNS地址。
6)如果查询不到DNS地址,就报错。
7)如果能查询到DNS地址,就进行尝试性连接服务器。
8)如果能够连接到服务器,就正式发送http请求。
9)解析主机名
10)解析Web应用
11)解析资源名
12)获取资源(HTML文件或JSP文件)
在一台Web服务器中配置多个网站
为了节省IP地址,我们有时需要在同一台Web服务器配置多个网站,即不论是用户访问www.taobao.com.cn还
是www.taobao.com,访问到的都是同一台主机,可以在hosts文件中配置主机IP地址。
——Tomcat体系结构
服务 Service
在Server下还有一个服务:Catalina。
在Service中包含一个引擎。
在Service中包含多个Connector连接器,每个连接器使用的协议也不同。
引擎 Engine
一个引擎可以管理多个主机。
在引擎中可以设置默认主机。
在Tomcat/conf/server.xml文件中设置:
<Engine name="Catalina" defaultHost="主机名" >
主机 Host
一个主机可以管理多个Context,也就是Web应用。
Web应用(也可以称为Context上下文)
配置整个服务器信息,例如修改端口号,添加虚拟主机等。
* tomcat-users.xml:
存储Tomcat用户的文件,这里保存的是Tomcat的用户名及密码,以及用户的角色信息,可以按照该文件中的注释信息添加Tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了。
* web.xml:
不熟描述文件,这个文件中注册了很多mime类型,即文档类型。这些mime类型是客户端与服务器之间说明文档类型的,如果用户请求一个HTML网页,那么服务器还会告诉客户端浏览器相应的文档是text/html类型,这就是mime类型,客户端浏览器通过这个mime类型就知道改如何处理它了,即在浏览器中显示这个HTML文件,但是如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是会弹出一个下载窗口。mime类型就是用来说明文档的内容时什么类型的。
* context.xml:
对所有应用的统一配置,通常不会去配置它。
(3)lib:
Tomcat的类库,里面是用到的jar包,如果需要添加Tomcat依赖的jar文件,可以把它放到这个目录中,当然也可以把应用依赖的jar包放到这个目录中,这个目录中的jar包所有项目都可以共享。
(4)logs:
这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
(5)temp:
存放Tomcat的临时文件,这个目录下的文件可以在停止Tomcat之后删除。
(6)webapps:
存放Web项目的目录,其中每一个文件夹都是一个项目,如果这个目录下已经存在了目录,那么都是Tomcat自带的项目,其中Root是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是Root项目。http://localhost:8080/examples,进入示例项目,其中examples就是项目名,即文件夹的名字。(tomcat6.0之后才支持)
(7)work:
运行时生成的文件,最终通过webapps运行的生成的文件都会放在这里。可以把这个目录下的文件都删除,再次运行时会再次生成work目录,当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的Java文件和class文件都会存放在这个目录下。
(8)LICENSE:
许可证。
(9)NOTICE:
说明文件。
9、如何访问一个web应用的某个文件:
http://localhost:8080/webapps/helloworld.html
统一资源定位器(URL):
http://localhost:8080/webapps/helloworld.html
URI:
webapps/helloworld.html
协议:
http
主机(域名)(IP地址):
localhost(127.0.0.1)
端口:
8080
Web应用(WebApplication):
webapps
资源文件:
helloworld.html
什么是URI:
统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。
什么是URL:
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL和URI的区别:
URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
URI是一种语义上的抽象概念,可以是绝对的路径,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的路径。
8、mime类型
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
它是一个互联网标准,扩展了电子邮件标准,使其能够支持:
非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multiple parts)组成的消息体;包含非ASCII字符的头信息(Header information)。
这个标准被定义在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 MIME改善了由RFC 822转变而来的RFC 2822,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息原本都不能在电子邮件中传输(MIME可以)。MIME规定了用于表示各种各样的数据类型的符号化方法。 此外,在万维网中使用的HTTP协议中也使用了MIME的框架,标准被扩展为互联网媒体类型。
什么是MIME类型:
在把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。
在把输出结果传送到浏览器上的时候,浏览器必须启动适当的应用程序来处理这个输出文档。这可以通过多种类型MIME(多功能网际邮件扩充协议)来完成。在HTTP中,MIME类型被定义在Content-Type header中。
例如,你要传送一个Microsoft Excel文件到客户端,那么这时的MIME类型就是“application/vnd.ms-excel”。在大多数实际情况中,这个文件然后将传送给Execl来处理(假设我们设定Execl为处理特殊MIME类型的应用程序)。在ASP中,设定MIME类型的方法是通过Response对象的ContentType属性。
最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
MIME意为多目Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .ipeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzip,x-tar等。事实上这些类型运用的很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。
由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀和MIME类型之间的对应关系。而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。
Content-type: text/html
注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。
——Web应用
什么是Web应用?
Web应用是多个Web资源的集合,简单地说,可以把Web应用理解为是硬盘上的一个目录,这个目录用于管理多个Web资源,例如news,blog。
Web应用通常也称为Web应用程序或Web工程。
一个Web应用由多个Web资源或其他文件组成,包括html文件、css文件、js文件、动态web页面、java程序、支持jar包、配置文件等。开发人员在开发Web应用时,应按照tomcat安装路径下的目录结构存放这些文件,否则,在把Web应用交给Web服务器管理时,不仅可能会使Web应用无法访问,还会导致Web服务器启动时报错。
静态网站:
* 在webapps目录下创建一个目录(命名不能包含中文和空格),这个目录就是项目目录。
* 在项目目录下创建一个HTML文件。
动态网站:
* 在webapps目录下创建一个项目目录。
* 在项目目录下创建如下内容:
* WEB-INF目录
* 在WEB-INF目录下创建web.xml文件(web.xml文件中的内容可以去其他项目中去拷贝。=)
* 创建静态或动态页面。
范例:
webapps
| -- Hello
| -- index.html
| -- WEB-INF
| -- web.xml
| -- classes
| -- lib
* Hello
应用目录,Hello就是项目名称。
* index.html
应用资源,应用下可以有多个资源,例如:HTML、JSP、CSS等,也可以把资源放到文件夹中,例如:Hello\html\index.html,这是访问URL为:http:localhost:8080/Hello/html/index.html。
* WEB-INF:
这个目录名称必须全部大写,这个目录下的文件是无法通过浏览器直接访问的,也就是说放到这个目录下的文件是安全的。
* web.xml:
应用程序的部署描述文件,可以在该文件中对应用进行配置,例如配置应用的首页:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
* classes:
存放class文件的目录。
* lib:
存放jar包的目录。
——MyEclipse创建JavaWeb应用
1、配置Tomcat
使用MyEclipse配置服务器后,就可以使用MyEclipse来启动和停止服务了,当然,首先需要安装好Tomcat服务器才能配置。
MyEclipse自带了一个Tomcat,不建议使用,所以首先需要把MyEclipse自带的Tomcat关闭,然后再配置我们自己的Tomcat。
2、配置外部应用
也可以把应用放到Tomcat之外,这就是外部应用了,例如我们把之前写的Hello应用从webapps目录中复制到C盘下,即C:/Hello,现在Hello这个Web应用已经不在Tomcat中了,这时我们需要在Tomcat中配置外部应用的位置,配置的方式一共有两种:
(1)conf/server.xml:
打开server.xml文件,找到<Host>元素,在其中添加<Context>元素,代码如下:
* Context:上下文(目录)
* path:webapps的名称
* docBase:webapps的路径(虚拟目录的路径,绝对路径)
绝对路径:从根目录开始查找。
相对路径,从文件当前所在目录开始查找。
* 浏览器访问路径:http://localhost:8080/Hello/index.html
* reloadable
如果设置为true,Tomcat服务器在运行时,会监视WEB-INF/classes和WEB-INF/lib目录下类的改变,如果发现有类被更新,Tomcat服务器将自动重启并重新加载Web应用程序。这个特性在应用程序的开发阶段非常有用,但是它需要额外的运行时开销,所以在产品发布时不建议使用。
该属性的默认值是false。
* unpackWAR
如果为true,则Tomcat在运行Web应用程序前将自动展开所有压缩的Web应用程序。
该属性的默认值是true。
webapps打包:jar -cvf xxx.war *
(2)conf/catalina/localhost:
在该目录下创建Hello.html文件,在文件中编写<Context>元素,代码如下:
* 文件名:指定当前应用的名称。
* docBase:指定应用的物理位置。
* 浏览器访问路径:http://localhost:8080/Hello/index.html
3、server.xml文件
<Server>
<servie>
<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>看做是一个大酒店:
<Server>:酒店的服务部门。
<Connector>:服务员。
<Engine>:后厨
<Host>:后厨中的一个区,例如川菜区与鲁菜区。
<Context>:后厨中的一个厨师。
用户发出一个请求:http://localhost:8080/Hello/index.jsp,发现是HTTP/1.1协议,而且还是8080端口,所以就交给了处理这一请求的“服务员(处理HTTP请求的<Connector>)”,“服务员”再把请求交给“后厨(<Engine>)”,因为请求是要一盘水煮鱼,所以由“川菜区(<Host>)”负责,因为“王师傅(<Context>)”会做水煮鱼,所以由他完成。
* <Connector>:关心请求中的http协议和端口号。
* <Host>:关心localhost,每一个主机都对应一个项目目录。
* <Context>:关心Hello,表示上下文,表示一个项目。
4、映射虚拟主机
我们的目标是,在浏览器中输入:http://www.baidu.com就可以访问我们的项目,为了完成这一目标,我们需要做三件事:
* 修改端口号为80
* 在本机上可以解析域名为127.0.0.1,这需要修改C:\WINDOWS\system32\drivers\etc\hosts文件,添加对http://www.baidu.com和127.0.0.1的绑定关系。
* 在server.xml文件中添加一个<Host>主机。
* name="www.baidu.com":指定虚拟主机名为www.baidu.com
* appBase="G:\Host":指定当前虚拟主机的应用程序存放目录为G:\Host
* 在Host目录下创建名为ROOT的应用,因为一个主机只可以有一个名为ROOT的应用,名为ROOT的应用在浏览器中访问可以不给出应用名称。
——web.xml文件
1、web.xml文件为web应用的配置文件,它必须放在web应用目录、WEB-INF目录下。
2、web.xml文件用于对web应用下的web资源进行配置,例如将某个web资源设置为网站首页、将servlet程序映射到
某个URL上地址等等。
举例:通过web.xml文件配置网站首页
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
在一台Web服务器中配置网站:
我们在实际访问网站的过程中,不可能使用(http://localhost:8080/webapps/资源名)的方式去访问网站,而是使
用(http://www.baidu.com)的方式去访问网站,这个又是怎么实现的呢?
实现步骤如下:
1)在C:\WINDOWS\system32\drivers\etc目录下的hosts文件中添加新的主机名和对应IP地址。
2)在tomcat的server.xml文件中添加主机名。
<Host name="www.wangyanchao.com" appBase="d:\webapps" >
<Context path="/" docBase="d:\webapps" />
</Host>
3)在d:\webapps\WEB-INF\目录下的web.xml文件中吧hello设置为首页。
如果想在地址栏中输入地址的时候省略端口号,可以把Tomcat的启动端口设置为80。
4)重启Tomcat服务器。
浏览器访问Web站点的原理:
1)输入http://localhost:8080/webapps/hello.html。
2)解析主机域名:localhost。
3)到本机hosts文件查询localhost对应的IP地址。
4)如果在hosts文件中查询到localhost对应的IP地址,就去访问IP地址对应的机器。
5)如果在hosts文件中没有查询到localhost对应的IP地址,就去查询DNS地址。
6)如果查询不到DNS地址,就报错。
7)如果能查询到DNS地址,就进行尝试性连接服务器。
8)如果能够连接到服务器,就正式发送http请求。
9)解析主机名
10)解析Web应用
11)解析资源名
12)获取资源(HTML文件或JSP文件)
在一台Web服务器中配置多个网站
为了节省IP地址,我们有时需要在同一台Web服务器配置多个网站,即不论是用户访问www.taobao.com.cn还
是www.taobao.com,访问到的都是同一台主机,可以在hosts文件中配置主机IP地址。
——Tomcat体系结构
服务 Service
在Server下还有一个服务:Catalina。
在Service中包含一个引擎。
在Service中包含多个Connector连接器,每个连接器使用的协议也不同。
引擎 Engine
一个引擎可以管理多个主机。
在引擎中可以设置默认主机。
在Tomcat/conf/server.xml文件中设置:
<Engine name="Catalina" defaultHost="主机名" >
主机 Host
一个主机可以管理多个Context,也就是Web应用。
Web应用(也可以称为Context上下文)