一、Web开发概述

1.1 Web开发中常见的概念

【B/S系统和C/S系统】

  • Brower/Server:浏览器 服务器 系统 ----- 网站
  • Client/Server:客户端 服务器 系统 ----- QQ、飞秋、大型游戏

【web应用服务器】

  向外部发布web资源的服务器软件

  

java 静态资源路径static java静态资源服务器_java 静态资源路径static

【web资源】

  存在于web应用服务器可供外界访问的资源就是web资源。例如:存在于web应用服务器内部的Html、Css、js、图片、视频等。

  • 静态资源:指web页面中供人们浏览的数据始终是不变。比如:HTML、CSS、   JS、图片、多媒体。
  • 动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问 web页面看到的内容各不相同。比如:JSP/Servlet、ASP、PHP

【请求和响应】

  

java 静态资源路径static java静态资源服务器_Web_02

【请求的URL地址】

  

java 静态资源路径static java静态资源服务器_xml_03

1.2 常用的web应用服务器

  • weblogic:oracle公司的大型收费web服务器 支持全部javaEE规范
  • websphere:IBM公司的大型收费web服务器 支持全部的javaEE规范
  • Tomcat:Apache开源组织下的 开源免费的中小型的web应用服务器 支持     javaEE  中的 servlet 和 jsp规范

二、Tomcat介绍

2.1 Tomcat的下载与安装

【下载Tomcat】

  官网地址:http://tomcat.apache.org/whichversion.html

【安装Tomcat】

  Tomcat有安装版和解压版(绿色版)

  安装版以.exe形式的安装包,双击安装到我们的电脑上,用的比较少

  解压版,即绿色版,解压后直接使用,用的比较多

2.2 Tomcat的目录结构

  

java 静态资源路径static java静态资源服务器_xml_04

  • bin:脚本目录
  • 启动脚本:startup.bat
  • 停止脚本:shutdown.bat
  • conf:配置文件目录 (config /configuration)
  • 核心配置文件:server.xml
  • 用户权限配置文件:tomcat-users.xml
  • 所有web项目默认配置文件:web.xml
  • lib:依赖库,tomcat和web项目中需要使用的jar包
  • logs:日志文件.
  • localhost_access_log.*.txt tomcat记录用户访问信息,星*表示时间。例如:localhost_access_log.2016-02-28.txt
  • temp:临时文件目录,文件夹内内容可以任意删除。
  • webapps:默认情况下发布WEB项目所存放的目录。
  • work:tomcat处理JSP的工作目录。

2.3 Tomcat的启动与运行

  双击Tomcat下的bin下的startup.bat启动Tomcat

  

java 静态资源路径static java静态资源服务器_服务器_05

  在浏览器的地址栏中输入http://localhost:8080,看到如下页面证明启动成功

  

java 静态资源路径static java静态资源服务器_服务器_06

【Tomcat启动不成功的原因分析】

  1)如果没有配置JAVA_HOME环境变量,在双击“startup.bat”文件运行tomcat时,将一闪立即关闭。且必须配置正确,及JAVA_HOME指向JDK的安装目录

  2)端口冲突:java.net.BindException: Address already in use: JVM_Bind <null>:8080。关闭占用8080端口的程序,或者修改Tomcat/conf/server.xml

  

java 静态资源路径static java静态资源服务器_Web_07

2.4 Tomcat服务器虚拟目录的映射

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

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

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

  

java 静态资源路径static java静态资源服务器_Web_08

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

  

java 静态资源路径static java静态资源服务器_xml_09

2.5 Tomcat服务器配置虚似主机

 【配置虚拟主机】

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

  

java 静态资源路径static java静态资源服务器_Web_10

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

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

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

<Host name="www.gacl.cn" appBase="F:\JavaWebApps">
      
</Host>

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

   

java 静态资源路径static java静态资源服务器_服务器_11

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

   

java 静态资源路径static java静态资源服务器_xml_12

【windows系统中注册域名】

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

  

java 静态资源路径static java静态资源服务器_服务器_13

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

  

java 静态资源路径static java静态资源服务器_服务器_14

  使用浏览器通过域名"www.gacl.cn"访问"www.gacl.cn"这个虚拟主机下的JavaWebDemo1这个web应用下的1.jsp这个web资源,"www.gacl.cn"这个虚拟主机开放了一个8080端口,用户只能通过这个8080端口去访问JavaWebDemo1这个web应用下的1.jsp这个web资源

   

java 静态资源路径static java静态资源服务器_Web_15

2.6 Tomcat的体系结构

  

java 静态资源路径static java静态资源服务器_Web_16

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

<?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>

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

  

java 静态资源路径static java静态资源服务器_xml_17

  当我们打开浏览器,在浏览器的地址栏中输入URL地址"http://www.gacl.cn:8080/JavaWebDemo1/1.jsp"去访问服务器上的1.jsp这个web资源的过程中,浏览器和服务器都做了神马操作呢,我们是怎么在浏览器里面看到1.jsp这个web资源里面的内容的呢?

  浏览器和服务器做了以下几个操作:

  1、浏览器根据主机名"www.gacl.cn"去操作系统的Hosts文件中查找主机名对应的IP地址。

  2、浏览器如果在操作系统的Hosts文件中没有找到对应的IP地址,就去互联网上的DNS服务器上查找"www.gacl.cn"这台主机对应的IP地址。

  3、浏览器查找到"www.gacl.cn"这台主机对应的IP地址后,就使用IP地址连接到Web服务器。

  4、浏览器连接到web服务器后,就使用http协议向服务器发送请求,发送请求的过程中,浏览器会向Web服务器以Stream(流)的形式传输数据,告诉Web服务器要访问服务器里面的哪个Web应用下的Web资源,如下图所示:

  

java 静态资源路径static java静态资源服务器_java 静态资源路径static_18

GET /JavaWebDemo1/1.jsp HTTP/1.1"这里面的内容,

GET:告诉Web服务器,浏览器是以GET的方式向服务器发请求。

/JavaWebDemo1/1.jsp:告诉Web服务器,浏览器要访问JavaWebDemo1应用里面的1.jsp这个Web资源。

 HTTP/1.1:告诉Web服务器,浏览器是以HTTP协议请求的,使用的是1.1的版本。

1.jsp这个Web资源传输给它。

GET /JavaWebDemo1/1.jsp HTTP/1.1"里面的内容时知道客户端浏览器要访问的是JavaWebDemo1应用里面的1.jsp这个Web资源,然后服务器就去读取1.jsp这个Web资源里面的内容,将读到的内容再以Stream(流)的形式传输给浏览器,如下图所示:

  

java 静态资源路径static java静态资源服务器_Web_19

  这个就是Web服务器传输给浏览器的数据。

  7、浏览器拿到服务器传输给它的数据之后,就可以把数据展现给用户看了,如下图所示:

  

java 静态资源路径static java静态资源服务器_java 静态资源路径static_20

  看到的这个"JavaWebDemo1"就是浏览器解析服务器发送回来的数据后的效果。

四、JavaWeb应用的组成结构

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

  

java 静态资源路径static java静态资源服务器_Web_21

  WebRoot →Web应用所在目录,一般情况下虚拟目录要配置到此文件夹当中。

    ┝WEB-INF:此文件夹必须位于WebRoot文件夹里面,而且必须以这样的形式去命名,字母都要大写。

      ┝web.xml:配置文件,有格式要求,此文件必须以这样的形式去命名,并且必须放置到WEB-INF文件夹中。

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

  web.xml :

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>