Servlet_JSP深入详解_基于Tomcat的Web开发(笔记)

来源:互联网 发布:澳洲甲级联赛角球数据 编辑:程序博客网 时间:2024/05/22 02:26

1.5 tomcat 之目录结构

         Tomcat的目录结构及其用途

 

   

/bin

存放启动和关闭Tomcat的脚本文件

/conf

存放Tomcat服务器的各种配置文件,其中包括server.xmlTomcat的主要配置文件)、tomcat-users.xmlweb.xml等配置文件

/lib

存放Tomcat服务器和所有Web应用程序需要访问的JAR文件

/logs

存放Tomcat的日志文件

/temp

存放Tomcat运行时产生的临时文件

/webapps

当发布Web应用程序时,通常把Web应用程序的目录及文件放到这个目录下

/work

TomcatJSP生成的Servlet源文件和字节码文件放到这个目录下

1.5.1 启动tomcat

由于Tomcat 6.x不再需要JDK的支持,所以才新增了JRE_HOME环境变量,对于6.0之前的Tomcat版本,没有JRE_HOME环境变量,只能配置JAVA_HOME环境变量。

下面,我们在Windows XP Service Pack 2操作系统下设置JAVA_HOME环境变量,步骤如下。

① 右键单击“我的电脑”,选择【属性】,出现如图1-10所示的画面。

② 单击“高级”选项卡,选择“环境变量(N)”,如图1-11和图1-12所示。

③ 在“系统变量”下方单击“新建”按钮。在“变量名”中输入“JAVA_HOME”,在变量值中输入JDK所在的目录“D:/Java/jdk1.6.0_05”(读者可以根据自己机器上JDK的安装目录来修改这个值),然后单击“确定”按钮,如图1-13所示。


 (点击查看大图)图1-10 “我的电脑”属性

 (点击查看大图)图1-11 “高级”选项卡
④ 最后在“环境变量”对话框上单击“确定”按钮,结束JAVA_HOME环境变量的设置。

我们再一次转到Tomcat的bin目录下,用鼠标双击startup.bat文件,可以看到如图1-14所示的启动信息。

注意图1-14中圆角矩形框中的文本,可以看到启动的是Tomcat 6.0.16。

 (点击查看大图)图1-12 “环境变量”对话框

 图1-13  新建JAVA_HOME系统变量

 (点击查看大图)图1-14  Tomcat启动信息

然后,打开浏览器,在地址栏中输入http://localhost:8080/(localhost表示本地机器,8080是Tomcat默认监听的端口号),将出现如图1-15所示的Tomcat页面。
 (点击查看大图)图1-15  Tomcat的默认主页

注意图1-15中鼠标(小手形状)指向的链接——“Tomcat Documentation”,单击这个链接将进入Tomcat的文档页面,有关Tomcat的帮助信息可以在文档页面中找到;读者也可以直接访问Tomcat的文档,文档首页的位置是Tomcat安装目录下的webapps/docs/index.html。如果要关闭Tomcat服务器,可以用鼠标双击Tomcat bin目录下的shutdown.bat文件。

 

1.5.3 运行tomcat(2)

Tomcat安装目录下的conf子目录用于存放Tomcat服务器的各种配置文件,其中的server.xml是Tomcat的主要配置文件,这是一个格式良好的XML文档,在这个文件中可以修改Tomcat默认监听的端口号。

 

如果你想将Tomcat安装为Windows的服务,以便在Windows系统启动时即运行Tomcat,那么可以打开“命令提示符”窗口,进入Tomcat安装目录下的bin子目录,然后执行下面的命令:

 service.bat install
这样将会在Windows系统中安装一个Tomcat6服务,要启动这个服务,可以执行下面的命令:
net start Tomcat6
要停止Tomcat6服务,可以执行下面的命令:
net stop Tomcat6
要删除Tomcat6服务,可以执行下面的命令:
 service.bat remove

 

1.5.3  Tomcat启动分析

用文本编辑工具打开用于启动Tomcat的批处理文件startup.bat,仔细阅读。在这个文件中,首先判断CATALINA_HOME环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME的值。接着判断当前目录下是否存在bin/catalina.bat,如果文件不存在,将当前目录的父目录设为CATALINA_HOME的值。根据笔者机器上Tomcat安装目录的层次结构,最后CATALINA_HOME的值被设为Tomcat的安装目录。如果环境变量CATALINA_HOME已经存在,则通过这个环境变量调用bin目录下的“catalina.bat start”命令。通过这段分析,我们了解到两个信息,一是Tomcat启动时,需要查找CATALINA_HOME这个环境变量,如果在Tomcat的bin目录下调用startup.bat,Tomcat会自动并正确设置CATALINA_HOME;二是执行startup.bat命令,实际上执行的是“catalina.bat start”命令。

 

1.5.6 Tomcat体系结构

介绍一下各组件在Tomcat服务器中的作用。

(1)Server

Server表示整个的Catalina Servlet容器。Tomcat提供了Server接口的一个默认实现,这通常不需要用户自己去实现。在Server容器中,可以包含一个或多个Service组件。

(2)Service

Service是存活在Server内部的中间组件,它将一个或多个连接器(Connector)组件绑定到一个单独的引擎(Engine)上。在Server中,可以包含一个或多个Service组件。Service也很少由用户定制,Tomcat提供了Service接口的默认实现,而这种实现既简单又能满足应用。

(3)Connector

连接器(Connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在Tomcat中,有多个连接器可以使用。

(4)Engine

在Tomcat中,每个Service只能包含一个Servlet引擎(Engine)。引擎表示一个特定的Service的请求处理流水线。作为一个Service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。用户允许通过实现Engine接口提供自定义的引擎,但通常不需要这么做。

(5)Host

Host表示一个虚拟主机,一个引擎可以包含多个Host。用户通常不需要创建自定义的Host,因为Tomcat给出的Host接口的实现(类StandardHost)提供了重要的附加功能。

(6)Context

一个Context表示了一个Web应用程序,运行在特定的虚拟主机中。什么是Web应用程序呢?在Sun公司发布的Java Servlet规范中,对Web应用程序做出了如下的定义:“一个Web应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的完整的应用程序。它可以在多个供应商提供的实现了Servlet规范的Web容器中运行”。一个Host可以包含多个Context(代表Web应用程序),每一个Context都有一个唯一的路径。用户通常不需要创建自定义的Context,因为Tomcat给出的Context接口的实现(类StandardContext)提供了重要的附加功能。
下面我们通过图1-21来帮助读者更好地理解Tomcat服务器中各组件的工作流程。

 

1.7   Tomcat的管理程序

 

Tomcat提供了一个管理程序:manager,用于管理部署到Tomcat服务器中的Web应用程序。

manager Web应用程序包含在Tomcat的安装包中。要访问manager Web应用程序,需要添加具有管理员权限的账号,编辑%CATALINA_HOME%/conf/tomcat-users.xml文件,在<tomcat-users>元素中添加manager角色,以及属于该角色的用户名和密码,如例1-1所示。

例1-1  tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<user username="tomcat" password="12345678" roles="manager"/>
</tomcat-users>

以粗体显示的代码是我们添加的。注意,用户名和密码可以根据自己的喜好来设置,但角色名只能是manager。

启动Tomcat服务器,打开浏览器,在地址栏中输入:

http://localhost:8080/

将出现如图1-23所示的页面。

单击“Tomcat Manager”链接,访问manager Web应用,将看到如图1-24所示的登录界面。

 (点击查看大图)图1-23  Tomcat的默认主页 (点击查看大图)输入用户名tomcat,密码12345678,单击“确定”按钮,你将看到如图1-25所示的页面。
 (点击查看大图)图1-25  manager Web应用程序的主页面

在这个页面中,你可以部署、启动、停止、重新加载、卸载Web应用程序。

需要注意图1-25中鼠标(小手形状)指向的链接——“examples”,单击这个链接将进入Tomcat的例子页面,如图1-26所示。

 图1-26  Tomcat的例子页面


单击图1-26所示的两个链接,将看到Tomcat提供的Servlet和JSP的例子程序,这些程序可以作为学习Servlet和JSP的参考。

Tomcat 6.0之前的版本还提供了一个admin Web应用程序,用于管理和配置Tomcat服务器本身,这个Web应用程序需要单独下载。Tomcat 6.x没有提供admin Web应用程序的下载。

 

1.8 小结

所以很多Web应用会结合使用Apache和Tomcat,Apache作为HTTP Web服务器,Tomcat作为Web容器。

 

2. servlet

 

2.1.4  一个简单的Servlet(1)

在Servlet中,主要的方法是service(),当客户端请求到来时,Servlet容器将调用Servlet实例的service()方法对请求进行处理。我们在service()方法中,首先通过ServletResponse类中的getWriter()方法调用得到一个PrintWriter类型的输出流对象out,然后调用out对象的println()方法向客户端发送字符串“Hello World”,最后关闭out对象。

 

Servlet容器调用Servlet实例对请求的处理过程如图2-2所示。

 

  图2-2  Servlet容器调用Servlet实例对请求进行处理的全过程

2.1.4  一个简单的Servlet(2)

Servlet是Web应用程序中的一个组件。一个Web应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的完整的应用程序,以一种结构化的有层次的目录形式存在。组成Web应用程序的这些资源文件要部署在相应的目录层次中,根目录代表了整个Web应用程序的根。我们通常是将Web应用程序的目录放到%CATALINA_HOME%/webapps目录下,在webapps目录下的每一个子目录都是一个独立的Web应用程序,子目录的名字就是Web应用程序的名字,也称为Web应用程序的上下文根。用户通过Web应用程序的上下文根来访问Web应用程序中的资源,如图2-4所示。

如果你要新建一个Web应用程序,可以在webapps目录下先建一个目录,在这个例子中,我们所建的目录是ch02,作为第一个Web应用程序的上下文根。Java开发的Web应用程序需要遵照一定的目录层次结构,在Servlet规范中定义了Web应用程序的目录层次结构,如图2-5所示。

  图2-4  多个Web应用程序和上下文根 图2-5  Web应用程序的目录层次结构

Web应用程序的目录层次结构如表2-1所示。

表2-1  Web应用程序的目录层次结构

   

   

/ch02

Web应用程序的根目录,属于此Web应用程序的所有文件都存放在这个目录下

/ch02/WEB-INF

存放Web应用程序的部署描述符文件web.xml

/ch02/WEB-INF/classes

存放Servlet和其他有用的类文件

/ch02/WEB-INF/lib

存放Web应用程序需要用到的JAR文件,这些JAR文件中可以包含ServletBean和其他有用的类文件

/ch02/WEB-INF/web.xml

web.xml文件包含Web应用程序的配置和部署信息

从表2-1中可以看到,WEB-INF目录下的classes和lib目录都可以存放Java的类文件,在Servlet容器运行时,Web应用程序的类加载器将首先加载classes目录下的,其次才是lib目录下的类。如果这两个目录下存在同名的类,起作用的将是classes目录下的类。

在表2-1中,我们还可以看到一个特殊的目录WEB-INF,注意在书写时不要写错,所有字母都要大写。说这个目录特殊,是因为这个目录并不属于Web应用程序可以访问的上下文路径的一部分,对客户端来说,这个目录是不可见的。如果你将index.html文件放到WEB-INF目录下,对于客户端是无法通过下面的方式访问到这个文件的:

 http://localhost:8080/ch02/WEB-INF/index.html 

不过,WEB-INF目录下的内容对于Servlet代码是可见的,在Servlet代码中可以通过调用ServletContext对象中的getResource()或者getResourceAsStream()方法来访问WEB-INF目录下的资源,也可以使用RequestDispatcher调用(参见第2.6节)将WEB-INF目录下的内容呈现给客户端。

如果我们想要在Servlet代码中访问保存在文件中的配置信息,而又不希望这些配置信息被客户端访问到,就可以把这个文件放到WEB-INF目录下。

在%CATALINA_HOME%/webapps/ch02目录下新建一个目录WEB-INF,进入WEB-INF目录,新建一个classes目录,整个目录结构是:

 %CATALINA_HOME%/webapps/ch02/WEB-INF/classes

将编译生成的HelloWorldServlet.class文件连同所在的包一起放到WEB-INF/classes目录下。

接下来,我们需要部署这个Servlet,Web应用程序的配置和部署是通过web.xml文件来完成的。web.xml文件被称为Web应用程序的部署描述符,
它可以包含如下的配置和部署信息:

ServletContext的初始化参数

Session的配置

Servlet/JSP的定义和映射

应用程序生命周期监听器类

过滤器定义和过滤器映射

MIME类型映射

欢迎文件列表

错误页面

语言环境和编码映射

声明式安全配置

JSP配置

我们所编写的web.xml文件必须是格式良好的XML。用记事本或者UltraEdit等文本编辑工具编写web.xml文件,内容如例2-2所示。

例2-2  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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">

 <servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>
org.sunxin.ch02.servlet.HelloWorldServlet</servlet-class>
</servlet>
    <servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/helloworld</url-pattern>
</servlet-mapping>
</web-app>

 

2.1.4 一个简单的Servlet(3)

 

%CATALINA_HOME%/webapps/ROOT目录是Tomcat默认的Web应用程序的起始路径,当我们输入http://localhost:8080/时,访问的就是该目录下的Web应用程序资源。如果你将本例的Servlet部署在该目录下,访问时只需输入http://localhost:8080/helloworld即可。