没有合适的资源?快使用搜索试试~ 我知道了~
Java_Servlet技术概述和实例
2星 需积分: 15 30 下载量 62 浏览量
2012-03-02
15:36:14
上传
评论 1
收藏 352KB DOC 举报
温馨提示
试读
22页
Java_Servlet技术概述和实例,Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。
资源推荐
资源详情
资源评论
Java Servlet 技术概述和实例
网络一开始提供服务,服务供应者们就意识到动态内容的需要。 Applets——是最早的用于
动态内容的 java 类,主要通过使用客户平台传送动态用户经验。与此同时,开发者们也研
究使用服务方平台以达到这个目的。最初,公共网关接口(CGI)脚本是产生动态内容的主要
的技术。
尽管被广泛的应用,CGI 脚本有着许多缺点,如平台相关性,缺乏可升级性。为克服这些
缺点,Java servlet 技术作为一种以简单的方式提供动态的,面向用户的技术诞生了。
什么是
Servlet?
Servlet 是 java 语言类,用来拓展通过请求响应模式的服务端的能力。尽管 servlets 可以
响应任何类型的响应,它们通常用于拓展基于 Web 的应用程序。在这中应用程序中,Java
servlet 技术定义了特定的 HTTP servlet 类。
包 javax.servlet 和 javax.servlet.http 提供了写 servlets 的接口和类。所有的 servlets 都必
须实现 servlet 借口,它定义了生命周期方法。
当实现一个一般的服务时,你能使用或拓展 GenericServlet 类,该类提供了 Java Servlet
API,HttpServlet 类提供了一些方法,如 doGet 及 doPost,用来处理特定的 http 服务。
本章主要集中在编写产生响应 HTTP 请求的 servlets。这里假设你以了解一些 HTTP 协
议的知识;如果你不熟悉该协议,你可以参考附录 A。
有关
Servlets
的例子
这一章使用了 Duke’s Bookstore 程序来演示编写 servlets 的任务。下面的表格列出了所
有的处理书店功能的 servlets。每一任务都通过 servlet 展示。例如,BookDetailsServlet 展示
了如何处理 HTTP GET 请求,BookDetailsServlet 及 CatalogServlet 显示了如何构造响应 ,
CatalogServlet 显示了如何跟踪会话信息。
Function Servlet
进入书店
BookStoreServlet
创建书店标语
BannerServlet
浏览书店目录
CatalogServlet
放书到购物车中
CatalogServlet,BookDetailsServlet
取得特定书籍的详细信息
BookDetailsServlet
显示购物车的情况
ShowCartServlet
从购物车中去掉一本或多本书籍
ShowCartServlet
购买书籍
CashierServlet
图书程序的数据保存在数据库中,数据库包也包含类 BookDetails。购物车及购物车中
的具体的项目由类 Cart.ShopingCart 及 Cart.ShoppingCartItem 来分别表示。
书店应用程序的源代码位于 j2eetutorial/examples/src/web/bookstore1 目录中,可以通过
一下步骤来编译、部署、运行例子:
1、 到 j2eetutorial/examples 目录编译例子并运行 ant bookstore1
2、 启动 j2ee 服务器
3、 打开部署工具
4、 启动 Cloudscape 数据库服务器
5、 通过运行 ant create-web-db 来装载数据到数据库
6、 创建名为 Bookstore1App 的 J2EE 应用程序
a. 选择 FileNewApplication.
b. 在文件选择中选择 j2eetutorial/examples/src/web/bookstore1.
c. 在文件名域中,输入 Bookstore1App.
d. 单击 New Application
e. 单击 OK.
7、 创 建 WAR 并 将 BannerServlet Web 组 件 及 所 有 的 Duke’s 书 店 内 容 加 入 到
Bookstore1App 程序中
a. 选择 FileNewWeb 组件
b. 在 应 用 程 序 单 选 按 钮 中 单 击 创 建 新 的 WAR 文 件 并 从 复 选 框 中 选 择
Bookstore1App.
c. 单击 Edit 以增加文件内容
d. 在 编 辑 对 话 框 中 浏 览 到 j2eetutorial/examples/build/web/bookstore1. 选 择
BeanerServlet.class,CatalogServlet.class,ShowCartServlet.class,CashierServlet.clas
s 及 ReceiptServlet.class. 点 击 Add 。 增 加 errorpage.html,duke.books.gif, 增 加
cart,database,exception,filters,listeners,messages 和工具包,单击 OK.
e. 单击 Next
f. 选择 servlet 单选按钮
g. 单击 Next
h. 选择 BannerServlet
i. 连续单击 Next 两次
j. 在复选框别名栏中,单击 Add,接着在别名域中输入/banner
k. 单击 Finish.
8、增加下表列出的网络组件,对于每个 Servlet,单击 Add to Existing WAR File 单选按
钮并从复选框中选择 Bookstore1WAR。
Web Component Name Servlet Class Component Alias
BookStoreServlet BookStoreServlet /enter
CatalogServlet CatalogServlet /catalog
BookDetailsServlet BookDetailsServlet /bookdetails
ShowCartServlet ShowCartServlet /showCart
CashierServlet CashierServlet /cashier
ReceiptServlet ReceiptServlet /receipt
9、 Cloudscape 数据库增加资源引用。
a. 选择 Bookstore1WAR.
b. 选择资源引用标签
c. 单击 Add
d. 从类型栏里选择 javax.sql.DataSource
e. 在代码名称域中输入 jdbc/BookDB
f. 在 JNDI 域中输入 jdbc/Cloudscape.
10、 增加监听类 listeners.ContextListener
a. 选择事件监听标签
b. 单击 Add
c. 在事件监听类栏的下拉框中选择 listeners.ContextListener 类
11、增加一个错误页面
a. 选择文件引用标签
b. 在错误映射栏中,单击 Add
c. 在错误/异常域中输入 exception.BookNotFoundException
d. 在资源调用域中输入/errorpage.html
12、 增加 filters filters.HitCounterFilter 及 filters.OrderFilter
a. 选择 Filter Mapping
b. 单击 Edit Filter List
c. 单击 Add
d. 从 Filter 类栏中选择 filters.HitCounterFilter
e. 单击 Add
f. 从 Filter 类栏中选择 filters.OrderFilter.部署工具会自动的在现实名称栏中输入
OrderFilter.
g. 单击 OK
h. 单击 Add
i. 从 Filter 名称栏中选择 HitCounterFilter
j. 从目标类型栏中选择 servlet
k. 选择 BookStoreServlet.
l. 对于 OrderFilter 也重复上面的步骤,目标类型是 Servlet,目标是 ReciptServlet
13、 输入上下文的根
a. 选择 Bookstore1App
b. 选择网络上下文标签
c. 输入 bookstore1
14、 部署应用程序
a. 选择工具部署
b. 单击完成
15、 打开 bookstore 的 URL http://<host>:8000/booktore1/enter
处理错误
这部分介绍常见错误及解决方法(尤指网络客户运行错误),并列出了一些为什么网
络客户连接失败的原因。此外,Duke’s Bookstore 返回下面的异常:
1、 BookNotFoundException:如果图书不在书店数据库中将产生这个异常,
2、 BooksNotFoundException:如果书店数据不能返回将产生这个异常。
3、 UnavailableException:如果一个 servlet 不能返回代表书店的网络上下文属性信息。
由于 我们已经指 定了 一个错 误页 面,你将会 看到这样的 信息 : The application is
unavailable.Please try later。如果没有指定错误页面,网络容器将产生一个默认的页面
产 生 这 样 的 信 息 : A ServletException Has Occurred and a stack trace that can help
diagnose the cause of the exception.如果使用 errorpage.html,你不得不堪网络容器的日志
来判断产生异常的原因。网络日志在下面的目录中:$J2EE_HOME/logs/<host>/web,并
以 catalina.<date>.log 命名。
Servlet
的生命周期
部署了的 Servlet 的生命周期是由容器控制的。当一个请求映射到相应的 servlet 时,容
器产生下面的步骤:
1.如果 servlet 的实例不存在,容器会
a. 载入 servlet 类
b. 创建一个 servlet 实例
c. 通过调用 init 方法初始化 servlet 实例
2.调用 service 方法,
如果容器需要删除 servlet,可以通过调用 destroy 方法。
处理
servlet
生命周期事件
在 servlet 生命周期中,你可以通过定义一个监听对象来监听它的生命周期,当生命周
期事件发生时,该监听对象就会被调用。要使用这些监听对象,你必须定义监听类并指定
监听类。
定义监听类
定义一个监听类并实现监听接口。下面的表列出了能够被监听并必须实现的相应的接
口:
Object Event Listener Interface and Event Class
Web context Initialization and destruction Javax.servlet.ServletContextListener and
ServletContextEvent
Attribute
added,remove,replace
javax.servlet.ServletContextAttributeListener
and ServletContextAttributeEvent
Session Creation,invalidation,timeout Javax.servlet.http.HttpSessionListener and
HttpSessionEvent
Attribute
added,remove,replace
Javax.servlet.http.HttpSessionAttributeListener
and HttpSessionBindingEvent
当 一 个 监 听 方 法 被 调 用 时 , 它 恰 当 的 传 递 一 个 包 含 信 息 的 事 件 。 例 如 , 在
HttpSessionListener 接口中的方法传递一个包含 HttpSession 的 HttpSessionEvent。
在 Duke’s Bookstore 应用程序中,类 listeners.ContextListener 创建及删除一个数据库帮
助和计数对象。这个方法重新从 ServletContextEvent 返回网络上下文对象,接着吧该对象
做为 servlet 的上下文属性保存起来。
Import database.BookDB;
Import javax.servlet.*;
Import util.Counter;
Public final class ContextListener implements ServletContextListener
{
private ServletContext context=null;
try
{
BookDB bookDB=new BookDB();
Context.setAttribute(“bookDB”,bookDB);
}catch(Exception ex){System.out.println(“Couldn’t create
database:”+ex.getMessage());}
Counter counter=new Counter();
Context.setAttribute(“hitCounter”,counter);
Context.log(“Created hitCounter”+counter.getCounter());
Context.setAttribute(“orderCounter”,counter);
Context.log(“Created orderCounter”+counter.getCounter());
}
public void contextDestroyed(ServletContextEvent event)
{
context=event.getServletContext();
BookDB bookDB=context.getAttribute(“bookDB”);
Context.removeAttribute(“bookDB”);
Context.removeAttribute(“hitCounter”);
Context.removeAttribute(“orderCounter”);
}
}
指定事件监听类
处理错误
当 Servlet 执行时任何数量的异常都有可能发生。网络容器将会产生一个默认的页面包
含这样的信息:A Servlet Exception Has Occurred when an exception occurs,你也可以指定容
器返回一个特定的异常到指定的错误页面中。
共享信息
网络组件像其它的对象一样,通常同其它的对象协调工作。它们通过这样一些方法实
现。可以使用私有帮助对象,可以共享作为公共域属性的对象,可以使用数据库,也可以
调用其它资源。Java Servlet 技术机制是的网络组件可以调用其它网络资源。
使用域对象
共享信息通过做为 4 类域对象属性的对象来协调网络组件,这些属性通过类的 get/set
属性方法来展示域。下表列出了域对象:
Scope Object Class Accessible From
Web context Javax.servlet.ServletContext Web components within a Web context
Session Javax.servlet.http.HttpSession Web components handling a request
that belongs to the session
Request Subtype of
javax.servlet.ServletRequest
Web components handling the request
Page Javax.servlet.jsp.PageContext The JSP page that creates the object
下图展示了由 Duke’s Bookstore 应用维护的域属性:
剩余21页未读,继续阅读
资源评论
- thundersung2012-04-25东西有点杂乱。
- LCT13257337272014-02-12东西还是可以的,只得学习。
cjl97893
- 粉丝: 1
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功