按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
我们提供了批处理文件编译这些 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 目录下,可以看到两个文件,