Servlet 没有 main() 方法,不能独立运行,但它可以作为 JavaWeb 应用的一个组件被部署到 Servlet 容器中,由容器来实例化和调用 Servlet 的方法,例如:doGet() 、doPost() 等。
那么,JavaWeb 应用是什么呢?Servlet 是如何部署和访问的呢?本节我们将针对这些问题进行讲解。
JavaWeb 应用
JavaWeb 应用由一组 Servlet/JSP、HTML 文件、相关 Java 类、以及其他的资源组成,它可以在由各种供应商提供的 Servlet 容器中运行。由 JavaWeb 应用的定义可知, Servlet 是 JavaWeb 应用的一个组件。
为了让 Servlet 容器顺利地找到 JavaWeb 应用的各个组件,Servlet 规范规定,JavaWeb 应用必须采用固定的目录结构,即每种组件在 JavaWeb 应用中都有固定的存放目录。
以 Tomcat 为例,通常将 JavaWeb 应用存放到 Tomcat 的 webapps 目录下。在 webapps 下,每一个子目录都是一个独立的 Web 应用,子目录的名字就是 Web 应用的名字,也被称为 Web 应用的上下文根。用户可以通过这个上下文根来访问 JavaWeb 应用中的资源。
webapps 的目录结构如下图。
下表中对 webapps 下各个目录进行了介绍。
目录 |
描述 |
是否必需 |
\servletDemo |
Web 应用的根目录,属于该 Web 应用的所有资源都存放在这个目录下。 |
是 |
\servletDemo\WEB-INF |
存放 web.xml、lib 目录以及 classes 目录等。 |
是 |
\servletDemo\WEB-INF\classes |
存放各种 .class 文件或者包含 .class 文件的目录,Servlet 类的 .class 文件也存放在此。 |
否 |
\servletDemo\WEB-INF\lib |
存放应用所需的各种 jar 包,例如 JDBC 驱动程序的 jar 包。 |
否 |
\servletDemo\WEB-INF\web.xml |
web.xml 中包含应用程序的配置和部署信息。 |
是 |
部署
在 Tomcat 中部署 JavaWeb 应用最快捷的方式,就是直接将 JavaWeb 应用的所有文件复制到 Tomcat 的 /webapps 目录下。在默认情况下,Tomcat 会自动加载 webapps 目录下的 JavaWeb 应用,并把它发布到名为 localhost 的虚拟主机中。
Tomcat 既可以运行采用开放式目录结构(只编译不打包)的 Web 应用,也可以运行 Web 应用的打包文件(WAR 文件)。在开发阶段,为了方便程序调试,通常采用开放式的目录结构部署 JavaWeb 应用。在开发完成,进入产品发布阶段时,就应该将整个应用打包成 WAR 文件,再进行部署。
在本案例中,我们将采用开放式的目录结构进行部署,具体操作步骤如下。
1. 进入 Windows DOS 命令行窗口
我们知道,编译 Java 源代码一般可以通过两种方式完成:DOS 命令行 和 IDE(集成开发环境)。使用 IDE 可以一键完成编译工作,十分的方便,但 IDE 给我们带来方便的同时,也隐藏了编译过程中的许多细节,我们无法了解其中的原理和机制。
对于初学者来说,为了更加深刻地理解 Servlet 的运行原理和机制,最好的办法就是使用 DOS 命令行进行编译。
使用快捷键 “Windows + R”,打开运行对话框,在对话框输入
cmd
,点击“确定”,进入 Windows 系统命令行窗口,如图。
2. 引入 javax.servlet 包
由于 Servlet 是 JavaEE 下的技术标准,不是 JDK 的组成部分,所以在编译 Servlet 前,需要先引入 servlet-api.jar 包(在 Apache Tomcat 安装目录下的 lib 文件夹中提供了此 jar 包)。
使用命令
set classpath
可以将 servlet-api.jar 引入,该命令的语法如下,其中 path 表示引入 jar 包的路径。
set classpath = path
为了方便操作,可以先在命令行中输入
set classpath=
,然后将 servlet-api.jar 文件拖进命令行内,回车执行。
注:
set classpath
命令用来为当前窗口设置临时环境变量,只在当前窗口下有效。
3. 编译 Servlet
1)在命令提示符中使用
cd
命令进入 MyServlet.java 所在的目录。
2)使用
javac -encoding UTF-8 -d . MyServlet.java
命令进行编译,若没有报错,则编译成功。
其中:
-
javac
:编译命令;
-
-encoding UTF-8
:用于指定编译源文件时的字符编码,这里指定为 UTF-8;
-
javac -d
:带包编译 ;
-
.
:表示当前位置。
3)进入 MyServlet.java 文件所在的目录,可发现新增了编译后的目录和 .classes 字节码文件,自此我们就完成了对 Servlet 的编译工作。
4. 创建目录结构
在完成对 Servlet 的编译后,下一步依照 JavaWeb 应用的固定目录结构,在 Tomcat 中为该 Servlet 创建目录。
-
在 Tomcat 的 webapps 目录中创建 servletDemo(web 应用的名字,由自己定义)文件夹;
-
在 servletDemo 文件夹内创建 WEB-INF 文件夹;
-
在 WEB-INF 内创建 classes 文件夹;
-
在 WEB-INF 内创建配置文件 web.xml(可以复制 \webapps\ROOT\WEB-INF 中的 web.xml 使用)。
5. 将 Servlet 移动到 Tomcat 目录中
将编译好的字节码和目录移动到 Tomcat\webapps\servletDemo\WEB-INF\classes 目录下。
6. 配置 web.xml
对 webapps\servletDemo\WEB-INF 目录的 web.xml 中进行配置,具体配置代码如下。
<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
version="3.0" metadata-complete="true">
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>net.biancheng.www.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>
web.xml 中各元素含义及用法如下:
-
<web-app>: 根元素。
-
<servlet> :用于注册 Servlet,即给 Servlet 起一个独一无二的名字。
-
<servlet> 包含两个主要的子元素 <servlet-name> 和 <servlet-class>,分别用于指定 Servlet 的名称和 Servlet 的完整限定名(包名+类名)。
-
<servlet-mapping> :用于定义 Servlet 与 URL 之间的映射。
-
<servlet-mapping> 包含两个子元素 <servlet-name> 和 <url-pattern>,分别用于指定 Servlet 的名称和虚拟路径。
访问
进入 Tomcat\bin 目录下双击 startup.bat,启动 Tomcat。
Tomcat 启动成功后,在地址栏中输入“http://localhost:8080/servletDemo/MyServlet”,访问 MyServlet,结果如下图。
访问路径 http://localhost:8080/servletDemo/MyServlet 中,各部分含义如下:
-
http:// 表示 HTTP 协议;
-
localhost: 表示服务器 IP;
-
8080 表示端口号;
-
/servletDemo 表示 Web 应用的上下文根路径;
-
/MyServlet 表示资源路径,即 web.xml 中 <url-pattern> 元素的取值。
本文链接:http://task.lmcjl.com/news/13431.html