JavaWeb开发入门(二)

web应用程序

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 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 &quot;%r&quot; %s %b" />

      </Host>

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

<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 &quot;%r&quot; %s %b" />

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

      </Host>

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

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

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

1.html可以正常访问,这说明我们已经成功地将在c盘下的mail这个JavaWeb应用映射到JavaWebApp这个虚拟目录上了,访问”/JavaWebApp/1.html”就相当于访问”c:\mail\1.html”。

注意:在Tomcat6之后中,不再建议在server.xml文件中使用配置context元素的方式来添加虚拟目录的映射,因为每次修改server.xml文件后,Tomcat服务器就必须要重新启动后才能重新加载server.xml文件。在Tomcat服务器的文档http://localhost:8080/docs/config/context.html#Defining_a_context中有这样的说明:

It is NOT recommended to place <Context> elements directly in the server.xml file. This is because it makes modifying the Context configuration more invasive since the main conf/server.xml file cannot be reloaded without restarting Tomcat.

借助有道翻译为:

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

除了第一句话,翻译的真是狗屁不通。

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

tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问。

例如:把c盘下的mail这个JavaWeb应用直接copy到tomcat服务器webapps目录中,如下图所示:

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

虚拟目录的映射方式三

参考Tomcat服务器文档:

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

In the $CATALINA_BASE/conf/context.xml file: the Context element information will be loaded by all web applications.

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

In the $CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default file: the Context element information will be loaded by all web applications of that host.

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

In individual files (with a “.xml” extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. The context path and version will be derived from the base name of the file (the file name less the .xml extension). This file will always take precedence over any context.xml file packaged in the web application’s META-INF directory.

解释:在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:\mail" />

注意:在Context元素中并没有指明path属性来设置虚拟目录的名称,那么”c:\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:\mail。当创建“ROOT.xml”文件后,需要重启tomcat服务器,因为要覆盖掉原来的默认web应用。需要重启tomcat服务器,就可这样访问了:

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

    <Context path="" docBase="C:\mail" />

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

WEB应用的组成结构

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

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

  • WebRoot→Web应用所在目录,一般情况下虚拟目录要配置到此文件夹当中,不是很明白这句话的意思。

    • WEB-INF→此文件夹必须位于WebRoot文件夹里面,而且必须以这样的形式去命名,字母都要大写。
    • web.xml→配置文件,有格式要求,此文件必须以这样的形式去命名,并且必须放置到WEB-INF文件夹中。

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="ISO-8859-1"?>
<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/javaee
                      http://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的虚拟主机(网站)。

<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 &quot;%r&quot; %s %b" />

</Host>

平时我们将开发好的JavaWeb应用放到webapps文件夹下,然后就可以使用http://localhost:端口号/JavaWebAppName的方式去访问了,其实访问的就是name是”localhost”的那台虚拟主机(Host),这台虚拟主机管理webapps文件夹下的所有web应用。

例如:http://localhost:8080/mail/1.html,这个URL地址访问的就是名称是localhost的那台虚拟主机下的mail这个应用里面的1.htm这个web资源。

我们可以使用如下的方式配置一个虚拟主机,例如:

<Host name="www.sina.com.cn" appBase="C:\sian">      

</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应用了。

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a ‘#‘ symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
    127.0.0.1       localhost
    127.0.0.1       www.sina.com.cn

将设置的网站的域名www.sian.com.cn和本机的IP地址绑定在一起。

使用浏览器通过域名”www.sian.com.cn”访问”www.sian.com.cn”这个虚拟主机下的mail这个web应用下的1.html这个web资源,”www.sian.com.cn”这个虚拟主机开放了一个8080端口,用户只能通过这个8080端口去访问mail这个web应用下的1.html这个web资源。

时间: 2024-10-07 17:27:14

JavaWeb开发入门(二)的相关文章

JavaWeb学习总结(一)JavaWeb开发入门

静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以JavaWeb开发需要懂HTML. Servlet和Servlet容器 Servlet:是一些实现了特定接口的Java类的集合. Servlet容器是JSP/Servlet代码运行的地方,是管理JSP/Servlet的地方. 其实Servlet容器就是一个服务器软件,比如Tomcat. HTTP协议 浏览器

JavaWeb学习总结(一)——JavaWeb开发入门

一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术:Html 常用动态web资源开发技术:JSP/Servlet.ASP.PHP等 在Java中,动态web

JavaWeb学习总结(一)——JavaWeb开发入门(转载)

一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术:Html 常用动态web资源开发技术:JSP/Servlet.ASP.PHP等 在Java中,动态web

JavaWeb学习(一)---JavaWeb开发入门

本文整理自孤傲苍狼大大的博客,,, 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术:Html 常用动态web资源开发技术:JSP/Servlet.ASP

JavaWeb学习总结-01 JavaWeb开发入门

一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术:HTML 常用动态web资源开发技术:JSP/Servlet.ASP.PHP等 在Java中,动态web资源开发技术统称为J

JavaWeb学习总结(一)——JavaWeb开发入门(转载)

转载自http://www.cnblogs.com/xdp-gacl/p/3729033.html感谢孤傲苍狼的分享. 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态we

2015年4月2日 i-jetty 下的JavaWeb开发(二)

上一篇博文中,主要简单介绍了下i-jetty中的hello例子,有了这个hello例子,我们可以仿照他写出一个属于我们自己的程序.为了省事,我直接在example-webapps-parent下,新建一个maven module,建立好之后,需要注意,maven工程下的java文件会丢失,很奇怪为什么,但是新建个文件夹,又出来了,无力吐槽了- -. 好了,java文件夹出来了,我们就可以在这个目录下放我们的逻辑代码,在src中的webapps中添加我们需要的jsp页面以及修改web.xml文件,

JavaWeb学习总结(一)—JavaWeb开发入门及环境搭建

一.基本概念 1.1.软件体系结构 1.C/S:Client/Servlet,例如QQ就是CS结构需要编写服务器端程序和客户端程序.缺点:更新需要两端,总要求客户下载新的客户端程序优点:安全性比较好 2. B/S:Browser/Server缺点:安全性较差优点:只需要编写服务器端程序 1.2.WEB资源 1.静态资源:html.css.javascript.图片等:2.动态资源:javaweb的动态资源有jsp/servlet,其他web程序动态资源有asp.php等. 区别: * 客户端访问

JavaWEB开发入门

WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术 Html.CSS.javaScript 常用动态web资源开发技术: JSP/Servlet.ASP.PHP等 在Java中,动态web资源开发技术