一、Web开发概述
1.1 Web开发中常见的概念
【B/S系统和C/S系统】
- Brower/Server:浏览器 服务器 系统 ----- 网站
- Client/Server:客户端 服务器 系统 ----- QQ、飞秋、大型游戏
【web应用服务器】
向外部发布web资源的服务器软件
【web资源】
存在于web应用服务器可供外界访问的资源就是web资源。例如:存在于web应用服务器内部的Html、Css、js、图片、视频等。
- 静态资源:指web页面中供人们浏览的数据始终是不变。比如:HTML、CSS、 JS、图片、多媒体。
- 动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问 web页面看到的内容各不相同。比如:JSP/Servlet、ASP、PHP
【请求和响应】
【请求的URL地址】
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的目录结构
- 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
在浏览器的地址栏中输入http://localhost:8080,看到如下页面证明启动成功
【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
2.4 Tomcat服务器虚拟目录的映射
Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射。那么在Tomcat服务器中,如何进行虚拟目录的映射呢?
tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问。
例如:把F盘下的JavaWebDemoProject这个JavaWeb应用直接copy到tomcat服务器webapps目录中,如下图所示:
此时Tomcat服务器就会自动为JavaWebDemoProject这个JavaWeb应用映射一个同名的虚拟目录"/JavaWebDemoProject",然后就可以使用浏览器访问这个JavaWeb应用的资源了,如下图所示:
2.5 Tomcat服务器配置虚似主机
【配置虚拟主机】
配置虚似主机就是配置一个网站。
在Tomcat服务器配置一个虚拟主机(网站),需要修改conf文件夹下的server.xml这个配置文件,使用Host元素进行配置,打开server.xml,可以看到Tomcat服务器自带的一个名称为localhost的虚拟主机(网站),如下图所示:
平时我们将开发好的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应用的文件夹,如下图所示:
就好像是Tomcat服务器的webapps文件夹一样,里面存放了很多的JavaWeb应用
【windows系统中注册域名】
配置的主机(网站)要想通过域名被外部访问,必须在DNS服务器或windows系统中注册访问网站时使用的域名,找到"C:\Windows\System32\drivers\etc"目录下的hosts文件,如下图所示:
编辑这个文件,将新添加的网站的域名和IP地址绑定在一起,这样我们就可以在浏览器中使用www.gacl.cn这个域名去访问name是www.gacl.cn那个虚拟主机里面管理的那些web应用了
使用浏览器通过域名"www.gacl.cn"访问"www.gacl.cn"这个虚拟主机下的JavaWebDemo1这个web应用下的1.jsp这个web资源,"www.gacl.cn"这个虚拟主机开放了一个8080端口,用户只能通过这个8080端口去访问JavaWebDemo1这个web应用下的1.jsp这个web资源
2.6 Tomcat的体系结构
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>
三、浏览器与服务器交互的过程
当我们打开浏览器,在浏览器的地址栏中输入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资源,如下图所示:
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(流)的形式传输给浏览器,如下图所示:
这个就是Web服务器传输给浏览器的数据。
7、浏览器拿到服务器传输给它的数据之后,就可以把数据展现给用户看了,如下图所示:
看到的这个"JavaWebDemo1"就是浏览器解析服务器发送回来的数据后的效果。
四、JavaWeb应用的组成结构
开发JavaWeb应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错
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>