Java Web学习(一)
一、Web资源
【1】Web资源介绍
1.静态资源:通过浏览器可以解析Web静态资源,例如html。
2.动态资源:他不能够直接展示,需要先转换为静态资源html,然后再由浏览器解析。例如:JSP/Servlet.
【2】静态资源和动态资源的区别
上面的图片展示了静态资源和动态资源的区别,我们如何访问web资源的呢?通常通过浏览器实现的,打开浏览器,输入URL:
协议名://域名:端口/路径,例如:http://www.baidu.com
二、Tomcat介绍
【1】Tomcat的安装和配置
1. 安装Tomcat必须确保你的电脑已经安装了JDK。我们这里只讲解压版安装。把解压版Tomcat解压到一个没有中文,没有空格的路径中即可,建议路径不要太深,因为我们需要经常进入Tomcat安装目录。例如:F:\apache-tomcat-7.0.42
2.在启动Tomcat之前,我们必须要配置环境变量:
(1)JAVA_HOME:必须先配置JAVA_HOME,因为Tomcat启动需要使用JDK
(2)CATALANA_HOME:如果是安装版,那么还需要配置这个变量,这个变量用来指定Tomcat的安装路径,
例如:F:\apache-tomcat-7.0.42
(3)启动,进入%CATALANA_HOME%\bin目录,点击startup.bat;关闭,进入%CATALANA_HOME%\bin目录,点击shutdown.bat
在启动Tomcat后,在浏览器上输入http://localhost:8080即可跳到Tomcat主页,表示安装成功。
【2】Tomcat的目录结构
(1)bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe、tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启动Tomcat;如果是解压版,那么会有startup.bat和shutdown.bat文件,startup.bat用来启动Tomcat,但需要先配置JAVA_HOME环境变量才能启动,shutdawn.bat用来停止Tomcat。
(2)conf:这是一个非常非常重要的目录,这个目录下有四个最为重要的文件:
- 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所有项目都可以共享之,但这样你的应用放到其他Tomcat下时就不能再共享这个目录下的Jar包了,所以建议只把Tomcat需要的Jar包放到这个目录下。
(4)logs:这个目录中都是日志文件,记录了Tomcat启动和关闭的信息,如果启动Tomcat时有错误,那么异常也会记录在日志文件中。
(5)temp:存放Tomcat的临时文件,这个目录下的东西可以在停止Tomcat后删除.
(6)webapps:存放web项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是tomcat自带的项目,例如:docs、examples、host-manager、manager和ROOT。其中ROOT是一个特殊的项目,当我们在浏览器的地址栏中输入的URL没有给出项目目录时,则默认对应的就是ROOT项目。例如:http://localhost:8080/examples,进入示例项目。其中examples就是项目名,即文件夹的名字。
(7)work:运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成work目录。当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件,生成的java和class文件都会存放到这个目录下
【3】Tomcat作为Web服务器的应用
1.创建静态应用
- 在Tomcat的安装目录的webapps目录下创建一个hello目录
- 在webapps\hello\下创建index.html,该html文件的内容可以随意写符合格式要求的内容
- 启动tomcat,打开浏览器访问http://localhost:8080/hello/index.html
2.创建动态应用
- 在webapps下创建hello1目录
- 在webapps\hello1\下创建WEB-INF目录
- 在webapps\hello1\WEB-INF\下创建web.xml 以及 classes 和 lib 目录
- 在webapps\hello1\下创建index.html
- 启动Tomcat,打开浏览器访问http://localhost:8080/hello/index.html
目录结构如下所示:
- java-web:应用目录。java-web就是应用的名称
- index.jsp:应用资源。应用下可以有多个资源,例如css、js、html、jsp等,也可以把资源放到文件夹中,例如:hello\jsp\index.jsp这时访问URL为:http://localhost:8080/hello/html/index.html
- WEB-INF:这个目录名称必须是大写,这个目录下的东西是无法通过浏览器直接访问的,也就是说放到这里的东西是安全的
- web.xml:应用程序的部署描述符文件,可以在该文件中对应用进行配置。后面会详细讲解如何配置该部署描述文件
【四】配置外部应用
部署的项目本来是放在Tomcat安装目录的 webapps 目录下的,现在我们不放到该目录下,我们放到其他目录下面,同时希望Tomcat也可以找到它。
例如我们把上面写的hello应用从webapps目录中剪切到D盘下,即D:/hello。现在hello这个Web应用已经不在Tomcat中了,这时我们需要在tomcat中配置外部应用的位置,配置的方式一共有两种:
- 找到conf/server.xml:打开server.xml文件,找到<Host>元素,在其中添加<Context>元素,代码如下:
(1)path:指定当前应用的名称,这里的path名称可以是hello,也可以是其他任意合法的应用名称。
(2)docBase:指定应用的物理位置,也就是在磁盘上存放的路。
(3)访问的URL是:http://localhost:8080/my/index.html。
- conf/catalana/localhost:在该目录下创建my.xml文件,在该文件中编写<Context>元素,代码如下:
(1)文件名:指定当前应用的名称。
(2)docBase:指定应用的物理位置。
(3)访问的URL是:http://localhost:8080/my/index.html。
【五】映射虚拟主机
我们要实现的就是在浏览器中输入 http://www.flow.jr.com 就可以访问我们的项目。完成这个目标,我们需要做三件事情:
- 在 server.xml 中修改端口号为:80
- 将本地 IP 和域名 www.flow.jr.com 绑定关系,此时只需要修改本机的 host 文件
- 在 server.xml 中添加一个 <Host> 主机
(1)修改端口:
(2)绑定 IP 和域名
(3)server.xml 中添加一个<Host>
- name= " www.flow.jr.com ":指定虚拟主机名称为 www.flow.jr.com
- appBase=”D:/webapps”:指定当前虚拟主机的应用程序存放目录为D:/webapps
- 在webapps目录下创建名为ROOT的应用,因为一个主机只可以有一个名为ROOT的应用,名为ROOT的应用在浏览器中访问是不需要给出应用名称。
【六】了解 server.xml
<Server>
<Service>
<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>看作是一个大酒店:
- <Service>:酒店的服务部门
- <Connector>:服务员
- <Engine>:后厨
- <Host>:后厨中的一个区,例如川菜区是一个<Host>、粤菜区是一个<Host>
- <Context>:后厨的一个厨师
用户发出一个请求:http://localhost:8080/hello/index.jsp。发现是http/1.1协议,而且还是8080端口,所以就交给了处理这一请求的“服务员(处理HTTP请求的<Connector>)”,“服务员”再把请求交给了“后厨(<Engine>)”,因为请求是要一盘水煮鱼,所以由“川菜区(<Host>)”负责,因为“大老王师傅<Context>”做水煮鱼最地道,所以由它完成。
- <Connector>:关心请求中的http、和8080
- < Host>:关心localhost
- <Context>:关心hello