《JSP入门教程(DOC格式)》第15章


我们提供了批处理文件编译这些 java 代码,双击 WEB…INF/src/pile。bat 即 
可对这三个 java 文件进行编译,编译后的 class 文件自动输出到 
WEB…INF/classes/对应的目录下。
注意
hsqldb 的数据库文件我们已经准备妥当,但我们也提供为数据库重新导入数据 
的脚本,执行WEB…INF/sql/run。bat 会执行 import。sql 中的 sql 脚本, 
sqltool。rc 中是连接数据库的配置。
。java; 。sql; 。bat; 。rc 文件都可以用记事本打开查看,修改内容后直接保存 
即可。
57 / 148
…………………………………………………………Page 58……………………………………………………………
第 6 章 贴近 servlet
注意
仅仅使用 jsp 做项目是难以想像的。难以维护,难以调试,难以分层设计,难以 
统一管理。现在我们要从 jsp 跨入 servlet 领域,从而得到更多的功能。因为从 
这里开始将进入中级部分,只想随便玩玩 jsp 的朋友可以到此为止了,期望以此 
为生的朋友请继续。
如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章: 
第 7 章 使用 filter 过滤请求。
1。 了解 servlet。
2。 了解 servlet 与 jsp 的关系。
6。1。 servlet 是什么
sun 公司给自己产品定的名称都十分诡异,最早听说有 applet,是Application
let (小应用程序)的意思。在jsp 中写的 java 代码叫做 scriptlet,Script let 
(小脚本程序)。现在又有servlet,Server let (小服务程序)。
简单来说,servlet 就是运行在服务器上的小程序。
让我们通过一个简单示例来了解 servlet 是如何开发和运作的,把 
lingo…sample/06…01 目录复制到tomcat 的webapps 目录下,启动服务器并访问 
http://localhost:8080/06…01/,会看到如下效果。
页面效果非常简单,只是显示“hello”这个单词。为了让 servlet 实现这个效 
果,我们需要进行以下步骤。
1。 写一个名叫 HelloServlet。java 的类,编译成 class 放到 
WEB…INF/classes 下。
记得要建立与包名对应的目录结构,比如 package anni;就对应着 
WEB…INF/classes/anni/,因为需要引用 javax。servlet 包下的类,编译 
58 / 148
…………………………………………………………Page 59……………………………………………………………
时要将tomcat 的mon/lib 目录下的servlet…api。jar 加入 classpath, 
具体编译命令可参考 lingo…sample/06…01/WEB…INF/src/pile。bat。
package anni;
import java。io。IOException;
import java。io。PrintWriter;
import javax。servlet。ServletException;
import javax。servlet。http。HttpServlet;
import javax。servlet。http。HttpServletRequest;
import javax。servlet。http。HttpServletResponse;
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request;
HttpServletResponse response)
throws ServletException; IOException {
PrintWriter out = response。getWriter();
out。println(〃hello〃);


HelloServlet 中实现的功能很简单,在 doGet()方法中先取得 response 
(响应)的输出流,再向里面写入“hello”。
2。 修改 WEB…INF 目录下web。xml,添加HelloServlet 的配置,让它负责处 
理路径是 http://localhost:8080/06…01/的请求。
HelloServlet
anni。HelloServlet
59 / 148
…………………………………………………………Page 60……………………………………………………………
HelloServlet
/
只要注意 servlet 和 servlet…mapping 两部分就可以了。
a。 servlet 标签中定义一个了名字叫做 HelloServlet 的 servlet。
这个 HelloServlet 对应的 class 是 anni。HelloServlet,请注意 
这里的 class 要写全名。
b。 servlet…mapping 标签则是把刚刚定义的HelloServlet 映射到“/” 
这个请求路径上。
请回忆我们之前讲过的 第 3。4。1 节 “绝对路径与相对路径” 中 
的部分,这里的“/”就代表当前应用的根路径,既 
http://localhost:8080/06…01/,凡是有客户对此路径发出请求, 
就会交由 HelloServlet 处理。
例子在 lingo…sample/06…01 目录下,将整个目录放入tomcat 的webapps 即可使 
用。对应的源代码放在 lingo…sample/06…01/WEB…INF/src 目录下,要放到tomcat 
的webapps 目录下,才能使用pile。bat 脚本进行编译。
6。2。 jsp 与 servlet 的关系
通过上面的例子,我们可以看到 servlet 与 jsp 的功能差不多,都是处理请求并 
返回响应。甚至在操作时使用到的变量都极为相似,request,response,out 
这些在我们使用 jsp 的时候也遇到过。不同的时是,jsp 中这些变量拿来即用, 
servlet 中还要通过参数来获得。
jsp 和 servlet 如此相似,它们之间难道有什么联系吗?为什么 sun 创造了两种 
功能相似的东西呢?
其实 jsp 就是 servlet,你所写的 jsp 页面最终都会被服务器转换成 servlet。 
为了验证这一说法,我们编写一个效果与 HelloServlet 完全一样的 hello。jsp, 
它的内容就只有这么点儿。
hello
访问 http://localhost:8080/06…01/hello。jsp,会看到与刚刚一样的效果。
60 / 148
…………………………………………………………Page 61……………………………………………………………
现在打开 tomcat 的work 目录。
在 Catalina/localhost/06…01/org/apache/jsp 目录下,可以看到两个文件,
小说推荐
返回首页返回目录