web应用程序

web应用程序指供浏览器访问的程序,通常也简称为web应用。例如有a.html、b.html……多个web资源,这多个web资源用于对外提供邮件服务,此时应把这多个web资源放在一个目录中,以组成一个web应用(或web应用程序)。
一个web应用由多个静态web资源和动态web资源组成,如

  • html、css、js文件
  • jsp文件、java程序、支持jar包
  • 配置文件

组成web应用的这些文件通常我们会使用一个目录组织,这个目录称之为web应用所在目录。

Tomcat服务器虚拟目录的映射方式

web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚拟目录的映射。那么在Tomcat服务器中,如何进行虚拟目录的映射呢?总共有如下的几种方式。

虚拟目录的映射方式一:在server.xml文件的host元素中配置

找到server.xml文件的Host元素,如下:

<Host></Host>这对标签加上<Context path="/JavaWebApp" docBase="c:\sina\mail" />,即可将在C盘sina目录中的mail这个JavaWeb应用映射到JavaWebApp这个虚拟目录上,JavaWebApp这个虚拟目录是由Tomcat服务器管理的,JavaWebApp是一个硬盘上不存在的目录,是我们自己随便写的一个目录,也就是虚拟的一个目录,所以称之为”虚拟目录”,代码如下:

其中,Context表示上下文,代表的就是一个JavaWeb应用,Context元素有两个属性:

  • path:用来配置虚拟目录,必须以”/”开头;
  • docBase:配置此虚拟目录对应着硬盘上的Web应用所在目录。

使用浏览器访问”/JavaWebApp”这个虚拟目录下的1.html这个web资源,访问结果如下:

1.html可以正常访问,这说明我们已经成功地将在C盘sina目录下的mail这个JavaWeb应用映射到JavaWebApp这个虚拟目录上了,访问”/JavaWebApp/1.html”就相当于访问”c:\sina\mail\1.html”。注意:在Tomcat6之后中,不再建议在server.xml文件中使用配置Context元素的方式来添加虚拟目录的映射,因为每次修改server.xml文件后,Tomcat服务器就必须要重新启动后才能重新加载server.xml文件。在Tomcat服务器的文档中有这样的说明,如下。

如果初学者不太懂英文,可以借助有道翻译,可能翻译为:

不建议直接在server.xml文件中放置<Context>元素。这是因为修改Context配置会带来更多的攻击性,因为若不重启Tomcat,主要的conf/server.xml文件不能被重新加载。

虚拟目录的映射方式二:让tomcat服务器自动映射

Tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录。换句话说,Tomcat服务器webapps目录中的web应用,外界可以直接访问。例如:把C盘sina目录下的mail这个JavaWeb应用直接copy到Tomcat服务器webapps目录中,如下图所示:

此时Tomcat服务器就会自动为mail这个JavaWeb应用映射成一个同名的虚拟目录”/mail”,然后就可以使用浏览器访问这个JavaWeb应用的资源了,如下图所示:

虚拟目录的映射方式三

参考Tomcat服务器文档:

我们主要关注下面这几句话:

解释:$CATALINA_BASE指的就是Tomcat服务器根目录。以上这句话的意思是说,在conf/context.xml文件中,Context元素信息被所有的web应用加载。即Context元素的配置信息会被所有web应用程序所共享。故这不是我们所要的!!!
再来看下面这句话:

解释:[enginename]指的是Tomcat服务器使用的引擎名称,Tomcat使用的引擎是Catalina;[hostname]指的是主机名。以上这句话的意思是说,在conf/Catalina/localhost/context.xml.default文件(没有就新建)中,Context元素信息将被这台主机上的所有web应用加载。同理,这也不是我们所想要的!!!
最后,我们再来看下面这句话:

解释:在Tomcat服务器的/conf/Catalina/localhost目录下添加一个以xml作为扩展名的文件,xml文件的名字可以任意取,比如下面的aa.xml,注意这一句话"The context path and version will be derived from the base name of the file",这一句话的意思翻译过来就是"context元素的path属性源自于这个xml文件的名字",上面提到过,Context元素的path属性是用来配置虚拟目录的名称的,所以虚拟目录的名称就是这个xml文件的名称。

在aa.xml文件中添加Context元素映射JavaWeb应用,代码如下:

<Context docBase="c:\sina\mail" />

注意:在Context元素中并没有指明path属性来设置虚拟目录的名称,那么"c:\sina\mail"映射的虚拟目录名称是神马呢,就是当前正在编辑的这个xml文件的名称aa。

使用这种方式映射虚拟目录的最大好处是修改了配置文件后不用重启Tomcat服务器,比如再复制一份aa.xml文件并重名为bb.xml文件。

此时有多条context path映射到JavaWeb应用。

注意:

  • 在Tomcat服务器的/conf/Catalina/localhost目录下添加的xml文件的名字还可以是这样的,如“aa#bb#cc.xml”

    这时,可通过多级目录来访问,如:

  • 在Tomcat服务器的/conf/Catalina/localhost目录下添加的xml文件的名字还可以是这样的,如“ROOT.xml”

    此时默认的web应用就是c:\sina\mail。当创建“ROOT.xml”文件后,需要重启Tomcat服务器,因为要覆盖掉原来的默认web应用。如果重启了Tomcat服务器,就可这样访问了:

    除了这种方法之外,还可在server.xml文件中配置:

    <Context path="" docBase="c:\sina\mail" />
    

    只不过每次修改server.xml文件后,Tomcat服务器就必须要重新启动后才能重新加载server.xml文件。

WEB应用的组成结构

开发web应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错。

web应用中,web.xml文件是其中最重要的一个文件,它用于对web应用中的web资源进行配置。

web.xml文件

通过web.xml文件,可以将web应用中的:

  • 某个web资源配置为网站首页;
  • 将servlet程序映射到某个url地址上;
  • 但凡涉及到对web资源进行配置,都需要通过web.xml文件。

web.xml的格式可以直接从Tomcat中参考得到:找到Tomcat目录下的webapps\ROOT\WEB-INF这个目录下的web.xml文件,把这个文件拷贝到我们新建的WEB-INF文件夹中,并修改这个web.xml文件,把里面的注释删除掉,只留下如下所示的代码即可:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!-- 通过web.xml文件配置网站首页为1.html --><welcome-file-list><welcome-file>1.html</welcome-file></welcome-file-list></web-app>

Tomcat服务器配置虚似主机

配置虚拟主机

配置虚拟主机就是配置一个网站。Tomcat服务器配置一个虚拟主机(网站),需要修改conf文件夹下的server.xml这个配置文件,使用Host元素进行配置,打开server.xml,可以看到Tomcat服务器自带的一个名称为localhost的虚拟主机(网站)。

平时我们将开发好的JavaWeb应用放到webapps文件夹下,然后就可以使用http://localhost:端口号/JavaWebAppName的方式去访问了,其实访问的就是name是"localhost"的那台虚拟主机(Host),这台虚拟主机管理webapps文件夹下的所有web应用。例如,http://localhost:8080/mail/1.html,这个URL地址访问的就是名称是localhost的那台虚拟主机下的mail这个应用里面的1.html这个web资源。我们可以使用如下的方式配置一个虚拟主机,例如:

<Host name="www.sina.com.cn" appBase="c:\sian">      <Context path="/mail" docBase="c:\sina\mail" />
</Host>

这里我们新配置了一个虚拟主机,虚拟主机的name是"www.sina.com.cn",虚拟主机"www.sina.com.cn"现在管理着sina文件夹下的所有web应用,平时我们在互联网上使用域名"www.baidu.com"访问百度的网站时,其实就是在访问一个名称是"www.baidu.com"的虚拟主机,所以当我们要访问name是"www.sina.com.cn"的这个虚拟主机时,就可以使用"域名(www.sina.com.cn)"去访问了,注意一下appBase=“C:\sian”,这里的sina文件夹代表的不是一个项目的根目录,而是一个存放了一个或者多个JavaWeb应用的文件夹,如下图所示:

这就好像是Tomcat服务器的webapps文件夹一样,里面存放了很多的JavaWeb应用。

windows系统中注册域名

配置的主机(网站)要想通过域名被外部访问,必须在DNS服务器或Windows系统中注册访问网站时使用的域名,找到"C:\Windows\System32\drivers\etc"目录下的hosts文件,如下图所示:

编辑这个文件,将新添加的网站的域名和IP地址绑定在一起,这样我们就可以在浏览器中使用www.sina.com.cn这个域名去访问name是www.sina.com.cn那个虚拟主机里面管理的那些web应用了。

将设置的网站的域名www.sina.com.cn和本机的IP地址绑定在一起,然后使用浏览器通过域名"www.sina.com.cn"访问"www.sina.com.cn"这个虚拟主机下的mail这个web应用下的1.html这个web资源。将Tomcat服务器的默认端口号8080修改为80,然后通过此端口去访问mail这个web应用下的1.html这个web资源。

一台主机还可配置多个网站。首先在conf/server.xml中添加如下代码:

接着编辑C:\Windows\System32\drivers\etc目录下的文件hosts:

并将1.html的web资源设置为c:\google\mail下mail这个web应用的首页,怎么设置,可以查看上面的笔记,在此不赘述了。最后通过浏览器去访问mail这个web应用下的1.html这个web资源。

浏览器与服务器交互的过程

下图演示web资源的访问过程。

打包JavaWeb应用

在Java中,使用"jar"命令来将JavaWeb应用打包成一个war包,jar命令的用法如下:

例:将C:\google目录下news这个JavaWeb应用打包成war包。

执行完之后,就可以得到一个news.war文件,平时开发完JavaWeb应用后,一般都会将JavaWeb应用打包成一个war包,然后将这个war包放到Tomcat服务器的webapps目录下,当Tomcat服务器启动时,就会自动将webapps目录下的war包解压。比如现在将news.war放到Tomcat服务器的webapps目录下。

Tomcat服务器启动后会自动"Deploying web application",将news.war这个war文件解压缩,如下图所示:

context元素常用属性

属性 描述
docBase 指定web应用程序的文档基目录或者WAR文件的路径。可以指定目录的或WAR文件的绝对路径名,也可以指定相对于Host元素的appBase目录的路径名。该属性是必须的
path 指定web应用程序的上下文路径。在一个特定的虚拟主机中,所有的上下文路径都必须是唯一的。如果指定一个上下文路径为空字符串(""),则定义了这个虚拟主机的默认web应用程序,负责处理所有的没有分配给其他web应用程序的请求
reloadable 如果设置为true,Tomcat服务器在运行时,会监视WEB-INF/classes和WEB-INF/lib目录下类的改变,如果发现有类被更新,Tomcat服务器将自动重新加载该web应用程序。这个特性在应用程序的开发阶段非常有用,但是它需要额外的运行时开销,所以在产品发布时不建议使用。该属性的默认值是false
unpackWAR 如果为true,Tomcat在运行web应用程序前将展开所有压缩的web应用程序。默认值是true

提示:可查看tomcat关于context元素的文档。

context元素的reloadable属性

配置context元素的reloadable属性为true,会让Tomcat自动加载更新后的web应用。代码形式如下:

<Host name="www.google.com"  appBase="c:\google"><Context path="" docBase="c:\google\mail" reloadable="true" />
</Host>

如果reloadable="true",会让Tomcat自动加载更新后的web应用,意思是web应用里面的java程序更改之后,不需要重新发布,服务器会自动加载。在实际开发中,建议不要配置,配置之后有一个弊病,即服务器只要发现程序改动,就会加载,web应用程序一旦很大,服务器不停地加载,就会很容易导致内存溢出,包括一些莫名其妙的问题发生。若web应用比较小,则建议配置。注意:如上配置context元素的reloadable属性为true,只是指定的web应用会被自动加载。若在conf/context.xml里面配置,配置形式如下:

意味着服务器里所有的web应用都会自动加载,意思是将来服务器里面的所有web应用改动java程序,都不需要重新发布,由服务器自动加载。这称之为全局性的配置

Tomcat体系架构

以下Tomcat体系架构图是根据server.xml文件画出来的。

Tomcat服务器的启动是基于一个server.xml文件的,Tomcat启动的时候首先会启动一个Server,Server里面就会启动Service,Service里面就会启动多个"Connector(连接器)",每一个连接器都在等待客户机的连接,当有用户使用浏览器去访问服务器上面的web资源时,首先是连接到Connector(连接器),Connector(连接器)是不处理用户的请求的,而是将用户的请求交给一个Engine(引擎)去处理,Engine(引擎)接收到请求后就会解析用户想要访问的Host,然后将请求交给相应的Host,Host收到请求后就会解析出用户想要访问这个Host下面的哪一个Web应用,一个Web应用对应一个Context。

Tomcat服务器的管理平台

Tomcat服务器的管理平台用来管理Tomcat服务器下的所有web应用。那么如何进入Tomcat服务器的管理平台呢?我们先启动Tomcat服务器,向浏览器敲入URL地址http://localhost:8080,进入如下界面。

点击Manager App,会弹出如下对话框。

要求我们输入用户名和密码,那么用户名和密码从哪儿去找呢?很显然我们应该去Tomcat服务器配置文件conf里面去找,可以在conf文件夹中找到tomcat-users.xml文件,有关键内容如下:

打开以上注释,并修改为:

很显然可得到一个用户,用户名为tomcat,密码为tomcat。修改完tomcat-users.xml文件,必须重启Tomcat服务器,然后去登录Tomcat Manager Application。

点击确定,会出现如下错误界面:

为什么访问时被拒绝呢?是因为登录的用户权限不够大,所以应该创建一个管理员的角色,并为tomcat用户设置一个管理员的角色。修改tomcat-users.xml文件为:

注意:rolename=“manager-gui”。此时重启Tomcat服务器,然后去登录Tomcat Manager Application。点击Manager App可直接进入Tomcat服务器管理平台。

Tomcat服务器管理平台的简单使用

若在webapps目录下新建一个web应用,比如aa文件夹。

此时刷新Tomcat服务器管理平台,会看到aa这个web应用。

将打包成war的web应用部署到服务器上:

WEB开发的前景

说到这个地方,很多人就没劲了,为什么呢?搞半天就是做网站哟,没点意思。所以这里特意讲下web开发的前景,免得有些人像菜鸟一样,以为自己很懂,其实啥都不懂,说些傻话。要讲web开发前景,首先要强调一点,你学JavaWeb,开发的是程序,别人通过浏览器,访问的是你写的程序,程序为用户完成服务后,再把结果通过http响应写到浏览器中显示,思想不要停留在90年代,以为通过浏览器看到的都是网页。要注意,将来网站都是用来提供服务的,像你们思想中的网页,只是网站提供的一种服务而已。
再者,要讲web开发前景,就不得不提软件开发的两种架构之争了,一种是c/s架构,一种是b/s架构。软件开发的两种架构:

  • c/s架构

    何为c/s架构呢?就是指程序运行在客户机上,数据在服务器上。这种架构有一个很大的毛病,就是程序一旦修改,需要更新所有的客户机程序,客户机多,维护的工作量相当恐怖。这种架构的优点是:由于数据的计算在客户机上,服务器的压力小,并且由于数据的显示也由程序员自己编写gui程序完成,显示不受限制。所以c/s架构适合用于开发像游戏这样的程序。
  • b/s架构

    何为b/s架构呢?(浏览器/服务器架构)就是指数据和程序都在服务器端,客户端通过浏览器访问程序并获取数据。这种架构的最大好处就是服务器端程序一旦修改,所有客户端访问的都是最新的程序,开发人员只管维护服务器就行了,不用管客户端维护的事。这种架构的最大缺点就是,由于客户端都是使用浏览器来访问服务器程序的,数据最终显示在浏览器中,浏览器有多强,数据就能显示成什么样式,数据的显示样式最终由浏览器决定。由于这种特性,所以b/s架构很少用来开发一些对显示有特殊要求的程序,例如游戏,现在的浏览器很难做到把数据显示成一个人,拿着一把刀,到处找人PK,并且还不卡。
    但是,随着网络带宽的不断提升,云计算概念的提出,浏览器只要足够强大,c/s架构立马就会被淘汰,不仅c/s架构会被淘汰,软件最终都会消失、操作系统都可以没有,最终将会是b/s架构的天下,也就是浏览器+搜索引擎的天下。所有现在桌面软件提供的功能,最后都由网站提供,也就是说,将来打开电脑就是一个浏览器,想要什么服务,通过搜索引擎一找,就可以在网上找到相应的服务,用就是了。所以web开发人员是现在最流行的岗位。

Java Web基础入门第九讲 Java Web开发入门——再探Tomcat服务器相关推荐

  1. 适合Java零基础小白学习的Java零基础教程

    很多Java零基础小白,在刚刚快入门的时候玩命的学习,玩命的记住Java原理,天天早上五点起床背Java的一些英文词汇,然后遇见一些未知的困难,让自己打到癫狂状态,逐渐迷失自我放弃Java,为了解决这 ...

  2. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

    Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...

  3. Java SE 基础(十)Java中的异常

    Java SE 基础(十)Java中的异常 什么是异常 异常的处理 异常类 throw和throws 自定义异常 什么是异常 Java 中处理错误的一种机制,Java 中的错误大致分为两类,一类是编译 ...

  4. Java零基础好学吗?Java该怎么学?

    Java零基础好学吗?Java该怎么学?在IT行业中,Java开发工程师是一个很吃香的职业,薪资水平也是几乎过万,许多人想转行Java开发,但又担心零基础能不能学会,学起来有多难,如果是零基础自学Ja ...

  5. 视频教程-2020最新微信小程序基础+实战精讲视频-微信开发

    2020最新微信小程序基础+实战精讲视频 负责过多个软件项目的研发.设计和管理工作,拥有项目管理师认证.项目监理师中级认证.出版过的图书有<微信小程序开发图解案例教程><Axure ...

  6. 视频教程-Python入门精讲视频,从入门到精通-Python

    Python入门精讲视频,从入门到精通 10年Linux使用及管理经验,7年IT在线教育培训经验.拥有RHCA高级架构师及Openstack证书.精通Linux.Python.思科.C++.安全渗透等 ...

  7. 第二部分_搭建Java Web开发环境与配置Tomcat服务器JSP详解

    MyEclipse集成Tomcat 首先配置Tomcat,即配置环境变量Java_HOME.path,在第一讲中已经完成了,不再赘述. Eclipse代码风格导入MyEclipse: 每个项目都要配置 ...

  8. Java SE 基础篇大全(Java 入门必看)

    第一章 java由来.环境搭建 一.Java历史[了解] ​ 1. 1995.5.23 sun推出的一款面向对象的编程语言. ​ 2. Java的发展方向:JavaSE(Java的语言基础).Java ...

  9. Java的基础重要吗?Java入门应该学习那些?

    Java的基础重要吗? 很明确 肯定重要且异常重要,用一个简单的比喻基础就是地基,有多深厚的地基就会有多高的建筑:相反地基建造的没有那么深厚,所建造出的建筑肯定受到地基的影响: 当然也有很多人觉得学习 ...

最新文章

  1. Python3.6.4 安装
  2. TongJI Online Judge预赛(2): LOVE LETTER
  3. SDN的实现思路—Vecloud微云
  4. JAVA面向对象为啥return实参,Java面向对象编程(OOP)
  5. [云炬创业基础笔记]第十一章创业计划书测试5
  6. 提示缺少Qedit.h问题
  7. github上的优秀项目和开发环境配置【转http://www.cnblogs.com/2018/archive/2012/11/09/2763119.html】...
  8. 零基础快速入门python教程,结合新手练习的5大项目
  9. Python--Json数据简单解析(11.18)
  10. 查看、启动、关闭防火墙
  11. MATLAB对表达式进行降幂排列,MATLAB上机答案.doc
  12. 1、position用法技巧,2、CSS 属性 选择器,3、CSS 选择器
  13. 《Word 排版艺术》一书的人到此交流
  14. 扫盲:什么是steam令牌验证器?哪些行为会触发steam交易限制
  15. 传输线阻抗方程的推导
  16. 虚拟现实的伦理问题----陈教授讲座听后感
  17. Character与char的区别
  18. 什么是电脑pe系统?
  19. 史玉柱: 我的成功不是偶然
  20. C语言中getchar()函数的详解

热门文章

  1. 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange
  2. 取代C++?谷歌开源编程语言Carbon,网友评价太真实了
  3. 基金评价专题1:绩效指标
  4. 棚户区改造房和商品房的区别
  5. 电脑在IDE模式下能正常启动,改成AHCI后蓝屏——解决方法
  6. Web从入门到放弃-HTML的学习(三)
  7. windows实现远程关机
  8. ChatGPT的朋友们:大语言模型经典论文一次读到吐
  9. 图(Graph)-最短路径
  10. 【Windows】虚拟串口工具VSPD6.9安装