1.3 编写基础的Servlet应用程序
其实,编写Servlet
应用程序出奇简单。只需要创建一个目录结构,并把Servlet
类放在某个目录下。本节将教你如何编写一个名为app01a
的Servlet
应用程序。最初,它会包含一个Servlet
,即MyServlet
,其效果是向用户发出一条问候。 要运行Servlet
,还需要一个Servlet
容器。Tomcat
是一个开源的Servlet
容器,它是免费的,并且可以在任何能跑Java
的平台上运行。如果你到现在都还没有安装 Tomcat
,先安装Tomcat
.
1.3.1编写和编译Servlet类
确定你的机器上有了Servlet
容器后,下一步就要编写和编译一个Servlet
类。本例中的Servlet
类是MyServlet
,按照惯例,Servlet
类的名称要以Servlet
作为后缀。
MyServlet类
1 | package app01a; |
代码详解
WebServlet注解
1 | ( |
WebServlet
注解用来声明一个Servlet
。命名Servlet
时,还可以告诉容器,是哪个URL
调用这个Servlet
。name
属性是可选的,如有,通常用Servlet
类的名称。重要的是urlPatterns
属性,它也是可选的,但是一般都是有的。在MyServlet
中,urlPatterns
告诉容器,当URL
样式为:/my
时应该调用MyServlet
。
注意,URL
样式必须用一个正斜杠开头。
init方法
Servlet
的init
方法只被调用一次,并将private transient
变量ServletConfig
设为传给该方法的ServletConfig
对象:
1 | private transient ServletConfig servletConfig; |
如果想通过Servlet
内部使用ServletConfig
,只需要将被传入的ServletConfig
赋给一个类变量。
service方法
service
方法发送字符串“Hello from MyServlet
”给浏览器。对于每一个针对Servlet
进来的HTTP
请求,都会调用service
方法
Servlet程序目录结构
Servlet
应用程序必须在某一个目录结构下部署。图1.2展示了app01a
的应用程序目录。
这个目录结构最上面的 app01a
目录就是应用程序目录。在应用程序目录下,是WEB-INF
目录。它有两个子目录:
classes
。Servlet
类及其他Java
类必须放在这里面。类以下的目录反映了类包的结构。在图1.2中,只部署了一个类:app01a.MyServlet
。lib
。Servlet
应用程序所需的JAR
文件要在这里部署。但Servlet API
的JAR
文件不需要在这里部署,因为Servlet
容器已经有它的备份。在这个应用程序中,lib
目录是空的。空的lib
目录可以删除。
Servlet/JSP
应用程序一般都有JSP
页面、HTML
文件、图片文件以及其他资料。这些应该放在应用程序目录下,并且经常放在子目录下。例如,所有的图片文件可以放在一个image
目录下,所有的JSP
页面可以放在jsp
目录下,等等。
放在应用程序目录下的任何资源,用户只要输入资源URL
,都可以直接访问到。
WEB-INF目录
如果想让某一个资源可以被Servlet
访问,但不可以被用户访问,那么就要把它放在WEB-INF
目录下。
手动部署
现在,准备将应用程序部署到Tomcat
。使用Tomcat
时,一种部署方法是将应用程序目录复制到Tomcat
安装目录下的webapps
目录中。也可以通过在Tomcat
的conf
目录中编辑server.xml
文件实现部署,或者单独部署一个XML
文件,这样就不需要编辑server.xml
了。其他的Servlet
容器可能会有不同的部署规则。
部署为WAR文件
部署Servlet/JSP
应用程序时,建议将它部署成一个WAR
文件。WAR
文件其实就是以.war
作为扩展名的JAR
文件。利用带有JDK
或者类似WinZip
工具的JAR
软件,都可以创建WAR
文件。然后,将WAR
文件复制到Tomcat
的webapps
目录下。当开始启动Tomcat
时,Tomcat
就会自动解压这个war
文件。部署成WAR
文件在所有Servlet
容器中都适用。我们将在第13章讨论更多关于部署的细节。
1.3.3调用Servlet
要测试这个Servlet
,需要启动或者重启Tomcat
,并在浏览器中打开下面的URL
(假设Tomcat
配置为监听端口8080,这是它的默认端口):
http://localhost:8080/app01a/my
浏览器显示效果如下:
原文链接: 1.3 编写基础的Servlet应用程序