1、简单的servlet例子
在下面的例子1中,Hello扩展了HttpServlet。
例子1
servlet源文件
Hello.java: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Hello extends HttpServlet{ public void init(ServletConfig config) throws ServletException{ super.init(config); } public void service(HttpServletRequest reqest,HttpServletResponse response) throws IOException{ //获得一个向客户发送数据的输出流: PrintWriter out=response.getWriter(); response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。 out.println("<HTML> <BODY>"); out.println("Simple servlet"); out.println("</body> </html>"); } }
2、编译servlet
为了编译servlet源文件,需要HttpServlet、HttpServletRequest等类,JDK内置包中并不包含这些类文件。为了能编译servlet源文件得到创建servlet用的字节码文件,需要在环境变量中包含servlet.jar,这个jar文件在TOMCAT安装目录的common\lib文件下,如图7.1所示(也可以到sun公司网站下载编译servlet所需要的类)。
对于window2000,用鼠标右键点击“我的电脑”,弹出菜单,然后选择属性,弹出“系统特性”对话筐,再单击该对话框中的高级选项,然后点击按钮“环境变量”,编辑classpath,添加新的环境变量的值:
D:\Tomcat\jakarta-tomcat-4.0\common\lib\servlet.jar;
我们将上述servlet的源文件Hello.java保存到F:\2000,然后编译生成字节码文件Hello.class
3、存放servlet的目录
(1)所有web服务目录可使用的servlet的存放位置 图7.1 编译servlet 所需要的jar文件
如果让所有web服务目录都可以使用该servlet,那么创建这个servlet的字节码文件需存放在Tomcat安装目录的classes目录中,例如,本书所用机器的目录就是:D:tomcat\Jakarta-tomcat-4.0\classes,如图7.1所示。
我们已经知道,servlet第一次被请求加载时,服务器初始化一个servlet,即创建一个servlet对象,这对象调用init方法完成必要的初始化工作。如果你对servlet的源文件进行了修改,并将新的字节码文件存放到classes中,如果服务器没有关闭的话,新的servlet不会被创建,因为,当后续客户请求servlet服务时,已初始化的servlet将调用service方法响应客户。
(2)只对examples服务目录可用的seclet的存放目录
examples是TOMCAT引擎的默认web服务目录之一。
如果想让某个servlet只对examples目录可用,那么创建该servlet的字节码文件只需存放在webapps/example/Web-inf/classes目录中。
存放在该目录中的servlet和存放在上面(1)中所述目录中的servlet有所不同,服务器引擎首先检查webapps/example/Web-inf/classes目录中的创建该servlet的字节码文件是否被修改过,如果重新修改过,就会用消灭servlet,用新的字节码重新初始化servlet。
如果经常调试servlet,可以把servlet放在webapps/example/Web-inf/classes。需要注意的是,当用户请求servlet服务时,由于服务器引擎每次都要检查字节码文件是否被修改过,导致服务器的运行效率降低。
4、运行servlet
如果一个servlet对所有的web服务目录可用,那么只要在服务器引擎启动后,在浏览器地址栏键入:
http://localhost:8080/web服务目录/servlet/创建servlet类的名字
即可,例如,对于用上述Hello创建的servlet,
(1) Root 服务目录
http://localhost:8080/servlet/Hello
(2) friend目录(我们自定义的一个web服务目录)
http://localhost:8080/friend/servlet/Hello
如果是只对examples服务目录可用的servelt,那么只要在服务器引擎启动后,在浏览器地址栏键入:
http://localhost:8080/examples/servlet/创建servlet类的名字
我们将Hello.class文件保存到Tomcat引擎的classes文件夹中。图7.2和7.3是在不同的web目录下运行servlet的效果。
5、带包名的servlet
在写一个servlet的java文件时,可以使用package语句给servlet一个包名。包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成,如:
package gping; package tom.jiafei;
程序如果使用了包语句,例如
package tom.jiafei;
那么在classes目录下需有如下的子目录,例如,在D:\Tomcat\jakarta-tomcat-4.0\classes下再建立如下的目录结构。
\tom\jiafei
并将servlet的字节码文件存在该目录中,如图7.4所示。
如果servlet有包名,比如,Hello的包名是tom.jiafei,那么调用该servlet的URL是:
http://localhost:8080/web服务目录/servlet/tom.jiafei.Hello
因为起了包名,Hello的全名是tom.jiafei.Hello(就好比大连的全名是:中国.辽宁.大连)。