Resin自带一个Servlet Runner和HTTP Server,因此要构建一个简单的Web环境,光有Resin已经足够了,不需要额外的支持软件。Resin不需要安装,解压之后即可使用。
Resin目录下有几个子目录,bin目录存放的是可执行文件,要启动HTTP Server和Servlet Runner只需要分别点击其中的httpd.exe和srun.exe即可,启动后会出现四个窗口,分别对应HTTP
Server的标准输出,启/停控制和Servlet Runner的标准输出,启/停控制。conf目录下存放的是Resin Servlet
Runner的配置文件,这是配置整个Web环境的关键,包括Servlet的配置和后面要用到的JSP的配置。doc目录是默认的发布目录,即Resin自带的HTTP
Server是以这个目录为根目录的。
下面我们以一个最简单的HelloWorld的例子,来讲解如何配置Resin,使其能运行Servlet程序,同时也做为Servlet编写的入门。程序如下:
//HelloServlet.java
import java.io.*;
import java.util.*;
import javax.servlet.http.*;
import javax.servlet.*;
//导入必要的包
public class HelloServlet extends HttpServlet {
//所有Servlet必须从HttpServlet派生
public void doGet (HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException
//doGet()是这个Servlet的核心,真正处理请求的地方
{
res.setContentType("text/html");
//设置相应的类型为text/html
PrintWriter pw = res.getWriter();
//从HttpServletResponse得到输出流
pw.println("<!DOCTYPE HTML
PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
pw.println("<head>");
pw.println("<meta http-equiv=\"Content-Type\"
content=\"text/html; charset=ISO-8859-1\">");
pw.println("<!-- The Servlet expression tags interpolate
script variables into the HTML -->");
pw.println("<title>Hello, world!</title>");
pw.println("</head>");
pw.println("<body bgcolor=#cc99dd>");
pw.println("<h1>Hello, world!</h1>");
pw.println("</body>");
//上面的语句都是向客户端打印HTML文本
pw.close();
//关闭HttpServletResponse,使Web服务器知道相应结束
}
public HelloServlet() {} //构造函数,可以不要
}
这是最简单的一个Servlet程序,整个类从HttpServlet派生,就跟Applet一样,这个派生关系是必须的。这个Servlet必须实现doGet()方法(因为它是作为静态页面通过地址访问的,这种方式在HTTP中称为GET请求,在后面还会有更具体的讲解),这是这个Servlet真正处理请求的地方,是整个Servlet的主体,就跟线程体的run()方法一样。doGet()有两个参数HttpServletRequest
req和 HttpServletResponse res。HttpServletRequest包含了客户请求的各种信息,HttpServletResponse则包装了服务器响应,主要处理对客户机的输出。这个程序是很简单的,如果对网络编程和HTML有一些概念的话,很容易就应该能理解。
通过javac对以上程序进行编译,我们可以得到HelloServlet.class,下面我们就通过配置Resin来运行这个Servlet。前面说过如果你没有修改过Resin的配置文件的话,doc是Resin默认的发布目录。发布目录下的WEB_INF/classes是Resin默认的Classpath,读者只要把自己的Servlet拷贝到该目录下,Resin就能识别,当然只要拷贝的有效的系统的或用户的Classpath下,Resin都是能够找到的。我们把HelloServlet.class拷贝到WEB_INF/classes目录下。接下来就需要修改conf目录下的resin.conf文件,来配置我们的Servlet。读者可以使用任何一种自己所熟悉的文本编辑器来打开该配置文件。找到<web-app
id='/'>,在它和 </web-app>之间任何地方添加以下的配置语句(可以参考已有的语句)
<servlet-mapping url-pattern='Hello' servlet-name='Hello'
/>
<servlet servlet-name='Hello'
servlet-class='HelloServlet' >
</servlet>
这样当客户端产生/Hello请求的时候,Resin就能把这个请求定向到HelloServlet上,该Servlet就能正常运行了,我们也可以采用以下的配置语句
<servlet-mapping url-pattern='Hello' servlet-name='HelloServlet'
/>
这种情况下,没有对Servlet的名字进行映射,系统会默认的使用servlet-name作为servlet-class进行类的查找,所以servlet-name必须填写正确的类名,而不能是随意的名字。关于Resin更多的配置信息,有兴趣的读者可以参考Resin的帮助文档,这里就不再赘述了。
下面我们启动Http Server和Servlet Runner(通过双击bin下的httpd.exe和srun.exe)。这样我们就可以通过浏览器访问这个Servlet了。打开浏览器,比如IE,在地址栏键入http://localhost:8080/Hello,我们可以打开如下的一个网页:

通过查看源码,我们可以得到如下的结果
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<!-- The Servlet expression tags interpolate script variables
into the HTML -->
<title>Hello, world!</title>
</head>
<body bgcolor=#cc99dd>
<h1>Hello, world!</h1>
</body>
很显然这些文本正是我们在Servlet中向客户端所打印的信息,在Http头部content=text/html也是我们在程序中所设置的。
通过这样一个简单的HelloWorld的程序,读者对Servlet的工作原理的基本配置方法应该有了一个大概的了解,如果读者对这个例子还有疑问,务必搞清楚后再继续学习。
|