JSP编程指南(第二版)中的例子运行错误

nu 2004-08-03 03:23:37
有人看这本书吗,帮俺分析一下

第24章j2EE中的JSP,我从网上下的源码,在浏览器访问:http://127.0.0.1:8080/ch24/index.jsp出错:

org.apache.jasper.JasperException: interface com.wrox.store.ejb.cart.Cart : java.lang.InstantiationException: com.wrox.store.ejb.cart.Cart
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

注:我执行test和upload是正常的
...全文
104 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nu 2004-08-09
  • 打赏
  • 举报
回复
没人理我?是不是问题太简单了?~!!
nu 2004-08-04
  • 打赏
  • 举报
回复
我是按照书上的步骤做的,运行提供的test.java是成功的,说明ejb部署没有问题,下面我详细说一下环境:

平台为:win2000+tomcat4.1.30+jboss2.4.10

index.jsp内容如下:
<%@ include file="header.jsp" %>

<P>
Access the EJBs :
<UL>
<LI>In a <A HREF="catalog.jsp?catalogPage=scriptlet.jsp">scriptlet</A></LI>
<LI>Through a <A HREF="catalog.jsp?catalogPage=bean.jsp">JavaBean wrapper</A></LI>
<LI>Using <A HREF="catalog.jsp?catalogPage=tag.jsp">custom tags (1)</A></LI>
<LI>Using <A HREF="catalog.jsp?catalogPage=jndi.jsp">custom tags (2)</A></LI>
</UL>
</P>

<%@ include file="footer.jsp" %>

我把第一句注释后,页面可以显示,很明显,是第一句引入文件的问题
header.jsp内容如下:
<%-- find the user's cart that is bound to the HTTP sesison --%>
<jsp:useBean id="cart" class="com.wrox.store.ejb.cart.Cart" scope="session"/>

<HTML>
<HEAD>
<TITLE>Wrox on-line store</TITLE>
</HEAD>

<BODY>

<P>
<H1>Wrox on-line store</H1>
</P>

显然是第一句的问题,Cart是session bean的远程接口,内容如下:
package com.wrox.store.ejb.cart;

import java.rmi.RemoteException;
import java.util.*;

import com.wrox.store.ejb.customer.Customer;
import com.wrox.store.ejb.product.Product;
import com.wrox.store.exception.*;

/**
* This represents the business interface for a shopping cart in
* our on-line store.
*
* @author Simon Brown
*/
public interface Cart extends javax.ejb.EJBObject {

/**
* Adds the specified quantity of the supplied product to the cart.
*
* @param product the Product to be added to the cart
* @param newQuantity the quantity of the product to be added
*/
public void add(Product product, int newQuantity)
throws RemoteException;

/**
* Gets a reference to the collection of products in the cart.
*
* @return a Collection of Product instances (or references)
*/
public Collection getProducts() throws RemoteException;

/**
* Determines how many of the specified product are in the cart - if any.
*
* @param product the Product to find
* @return an int representing the quantity in the cart
*/
public int getQuantity(Product product)
throws RemoteException;

/**
* Gets the total price for this order.
*
* @return a double representing the total price
*/
public double getTotal() throws RemoteException;

/**
* Submits the contents of this cart to be purchased. This involves a number
* of steps including :
* <OL>
* <LI>authorising the credit card</LI>
* <LI>sending a message to the fulfillment centre</LI>
* <LI>sending a confirmation e-mail to the customer</LI>
* </OL>
*
* @param customer the Customer that this cart belongs to
* @throws AuthorizationException if the credit card details were
* incorrect or authorization was not given
*/
public void submitOrder(Customer customer)
throws AuthorizationException, RemoteException;

}

还提供了CartBean和home接口CartHome
描述符ejb-jar.xml片段如下:
<session>
<ejb-name>Cart</ejb-name>
<home>com.wrox.store.ejb.cart.CartHome</home>
<remote>com.wrox.store.ejb.cart.Cart</remote>
<ejb-class>com.wrox.store.ejb.cart.CartBean</ejb-class>

<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
</session>

我是EJB初学者,按我的理解,错误提示说明是com.wrox.store.ejb.cart.Cart实例化的时候出问题了,也就是这句<jsp:useBean id="cart" class="com.wrox.store.ejb.cart.Cart" scope="session"/>
我不明白,Cart是个接口,怎么能够被实例化呢,还有这里只提供了home接口没有类,谁来实现它呢?EJB的运作方式是通过home接口调用远程接口,继而调用EJB吗,到底是怎么实现的?

盼赐教!
BillyW 2004-08-03
  • 打赏
  • 举报
回复
很想帮你,不过......

你的环境需要描述一下,布署过程也需要描述。

最好把你的部署描述符贴出来。
hq1305018 2004-08-03
  • 打赏
  • 举报
回复
EJB部属了没?
AlexSunny 2004-08-03
  • 打赏
  • 举报
回复
com.wrox.store.ejb.cart.Cart 这个有问题
JSP程序设计从入门到精通》电子书   第1篇 入门篇 7   第1章 Jsp概述 技术分析 7    1.1 Jsp简介与历史背景 7    1.1.1 日新月异的Web技术 7    1.1.2 什么是JSP 8    1.1.3 JSP技术有以下几个显著的优点 9    1.1.4 JSP和其他类似或相关技术的一个简单比较 10    1.2 JSP环境安装配置 12    1.2.1Tomcat下JSP环境的配置 12    1.2.1建立自己的Jsp工作目录 13    1.3 JSP语法介绍 14    1.3.1 JSP页面的元素 14    1.3.2 JSP语法概要 15    1.3.3关于模板文本(静态HTML) 16    1.4 运行第一个Jsp程序 16    1. 5本章小结 20   第2章Jsp 基础学习 20    2.1 JSP基本语法 20    2.1.1 JSP 语法之声明 21    2.1.2 JSP 语法之表达式 21    2.1.3 JSP 语法之Scriptlet 21    2.2 JSP的指令 22    2.2.1 page指令(Directive) 22    2.2.2 include指令(Directive) 24    2.3 JSP的动作 25    2.3.1 jsp:include动作 25    2.3.2 jsp:useBean动作 27    2.3.3 jsp:setProperty动作 29    2.3.4 jsp:getProperty动作 30    2.3.5 jsp: forward动作 31    2.3.6 jsp: plugin动作 31    2.3.7注释 31    2.4 JSP 9种基本内置组件 31    2.5 JSPSession的使用 34    2.6 JSPforward的使用 36    2.7 JSP运行错误处理与应该注意的六个常见问题 37    2.8 JSP小实例 38    2.8.1实例1(在JSP定义函数) 38    2.8.2实例2(获取各种CGI环境变量) 39    2.8.3实例3(JSP里request变量列表) 42    2. 9本章小结 44   第3章JavaBean组件 44    3.1 什么是JavaBeans 45    3.1.1 JavaBeans 简介 45    3.1.2 JavaBeans 属性 45    3.1.3 JavaBeans 的事件 50    3.2 在Jsp使用JavaBeans 55    3.3 JavaBeans的scope属性 57    3.4 JavaBeans应用实例 59    3.4.1 实例1(HelloWord.java) 59    3.4.2 实例2(People.java) 60    3.4.3实例子3数组应用 (Example2_3.java) 60    3.4.4实例子4运算符、表达式应用 (Example3_1.java) 61    3.5 本章小结 62   第4章Jsp与Servlet 62    4.1 什么是Servlets 63    4.1.1 JavaServlet的解释 63    4.1.2 什么是Jsp 65    4.1.3 得到一个Servlets和JSP运行环境 66    4.1.4 实现第一个JSP和SERVELT 67    4.2 Servlet规范定义的Servlet 生命周期 70    4.3 JSP/Servlet的重定向技术综述 72    4.3.1 RequestDispatcher.forward() 72    4.3.2 response.sendRedirect() 73    4.4 理解会话 74    4.4.1 会话状态跟踪API 75    4.4.2 在会话对象保存数据 76    4.4.3实例:显示会话信息 76    4.5 用Java Servlets代替CGI 78    4.6 JSP/Servlet 的汉字编码问题 80    4.7 图解Eclipse+Tomcat集成开发Servlet 84    4.8 Servlets/JSP开发技术问答 93    4.9 Servlet小实例 97    4.5.1实例1(输出) 98    4.5.2实例2(获取表单参数) 99    4.5.3实例3(获取jsp各种参数) 101    4.1
目录 序: 1 面向Internet的编程 1 Mary的加盟 2 The J2EE Tutorial 2 目录 3 第一部分 介绍 13 准备工作 13 谁应该使用这指南 13 关于例子 13 理解例子的准备工作 13 例子下载 13 如何编译并运行例子 13 相关信息 14 第1章 总 括 14 一.分布式得多层应用程序 14 J2EE组件 15 J2EE客户端 15 网络浏览器 15 小程序 15 应用客户端 15 JavaBean组件结构 15 网络组件 15 业务逻辑组件 16 二.J2EE容器 16 容器服务 16 三.打包J2EE组件 18 四.开发者角色 18 J2EE产品提供商 18 工具提供商 19 应用程序组件开发者 19 企业Bean开发者 19 Web组件开发者 19 J2EE应用程序客户端开发者 19 应用程序组装者 19 应用程序部署者和系统管理员 19 五.本书所用的软件 20 数据库访问 20 J2EE API 20 简化系统集成 20 工具 20 第2章 动手做一个EJB 22 一.准备工作 23 二.创建J2EE应用程序 24 三.创建企业Bean 24 编写企业Bean代码 24 编写Remote接口 24 编写Home接口 24 编写企业Bean类 25 编译源文件 26 打包企业Bean 26 四.创建J2EE应用程序客户端 27 编写J2EE应用程序客户端代码 27 查找Home接口 27 创建一个企业Bean实例 28 调用商业方法 28 打包J2EE应用程序客户端 29 指定应用程序客户端的企业Bean引用 30 五.创建Web客户端 30 编写Web客户端代码 30 编译Web客户端 32 打包Web客户端 32 指定Web客户端的企业Bean引用 32 六.设置企业Bean的JNDI名 32 七.部署J2EE应用程序 33 八.运行J2EE应用程序客户端 34 九.运行Web客户端 34 十.修改J2EE应用程序 35 修改类文件 35 添加文件 36 修改部署设置 36 十一 常见问题和解决方法 36 无法启动J2EE服务器 36 编译出错 37 部署出错 37 J2EE应用程序客户端运行错误 38 Web客户端运行错误 39 用检验工具检查问题 39 比较你的EAR文件和样本EAR文件 39 其它异常 39 第二部分 EJB技术 40 第3章 企业Bean 40 1,企业Bean概述 41 企业Bean的优点 41 何时需要使用企业Bean 41 企业Bean的分类 41 2,会话Bean 42 状态管理模式 42 何时需要会话Bean 42 3,EntityBean 43 EntityBean和会话Bean的不同之处 43 容器管理的持久性(CMP) 44 何时需要EntityBean 45 4,Message-Driven Bean 46 Message-DrivenBean的构造 46 与会话Bean、EntityBean的不同之处 46 何时需要Message-DrivenBean 47 5.定义客户端访问接口 47 远程访问 47 本地接口 48 Local接口和CMR(Container-Managed RelationShips) 49 两种访问方式的抉择 49 性能和访问方式 50 方法参数和访问方式 50 数据访问粒度 50 6,企业Bean的“内容” 51 7,企业Bean的命名约定 51 8,企业Bean的生存周期 52 有状态会话Bean的生命周期: 52 无状态会话Bean的生命周期 54 EntityBean的生命周期 54 Message-DrivenBean的生命周期 56 第4章 有状态会话Bean示例 57 1.购物车会话Bean CartEJB 57 会话Bean类 58 SessionBean接口 60 Home接口 62 Remote接口 63 辅助类 63 运行本例 63 二 其他的企业Bean特性 64 访问环境变量 65 企业Bean的比较 66 访问企业Bean的远程对象引用 67 第5章 BMP的例子 68 一.SavingsAccountEJB 68 实体Bean类(SavingsAccountBean) 69 EntityBean接口 69 ejbCreate方法 70 EjbPostCreate方法 71 ejbRemove方法 72 ejbLoad和ejbStore方法 72 查找方法(Finder) 73 商业方法 74 Home方法 76 数据库访问 77 Home接口 77 定义create方法 78 定义查找方法 78 定义Home方法 79 运行例子 80 二.用deploytool部署BMP实现的实体Bean 80 三.为BMP映射表间关系 81 一对一关系 81 运行StorageBinApp应用程序 83 一对多关系 84 将子表实现为辅助类 84 运行OrderEJB应用程序 87 将子表实现为实体Bean 87 运行SalesRepEJB的例子 90 多对多关系 90 运行EnrollerEJB的例子 91 四.BMP的主键 92 主键类 92 实体Bean类的主键 93 获取主键 94 五.异常处理 94 第6章 CMP的例子 96 一 RosterApp应用概述 97 二 layerEJB代码分析 97 实体Bean类 98 CMP和BMP实现实体Bean的代码比较 98 访问(get和set)方法 98 持久性字段的访问方法 99 关系字段的访问方法 99 select方法 99 商业方法 100 实体Bean方法 100 Local Home接口 101 Local接口 102 三.RosterApp配置说明 102 RosterApp应用程序配置 103 RosterClient客户端配置 104 RosterJAR的设置 104 TeamJAR配置 104 PlayerEJB 107 四 RosterApp的方法调用 110 “新建”一个运动员 110 将运动员加入组 111 “删除”一个运动员 112 从组开除运动员 112 获得一个组里的所有运动员 113 获取组成员的副本 114 根据位置查询运动员 116 查询运动员的运动项目 116 五 运行RosterApp应用程序 118 启动用到的软件 118 部署该应用程序 118 运行客户端 118 六 用deploytool工具部署CMP实现的实体Bean 118 指定企业Bean类型 118 选择持久性字段和抽象模式名 119 为查找方法和Select方法定义EJB QL查询 119 七 CMP的主键 119 主键类 119 实体Bean类的主键 120 产生主键值 121 第7章 一个消息驱动Bean的例子 122 一.例子应用程序介绍 122 二.J2EE应用程序客户端 123 三.消息驱动Bean类 124 OnMessage方法 124 ejbCreate和ejbRemove方法 125 四.运行例子 125 启动J2EE服务器 125 创建消息队列 125 部署该程序 125 运行客户端 125 五.用deploytool部署消息驱动Bean 126 指定Bean类型和事务管理机制 126 设置消息驱动Bean的特有属性 126 六.用deploytool配置JMS客户端 127 配置资源引用 127 配置资源环境引用 128 设置JNDI名 128 第8章 EJB查询语言 129 一.术语 129 二.简单语法 130 三.查询例子 130 简单查找方法的查询 130 跨越实体Bean关系查找方法的查询(关联查询) 131 其它条件查找方法的查询 132 Select方法的查询 133 四.全部语法 133 EJB QL语法的BNF定义 134 FROM子句 137 路径表达式 139 WHERE子句 141 BETWEEN表达式 143 IN表达式 143 LIKE表达式 143 SELECT子句 146 五.EJB QL的限制 147 第三部分 Web技术 148 第9章 网络客户端及组件 148 网络客户端的生命周期 148 网络应用结构 149 创建WAR文件 150 将WAR文件加入到EAR文件 150 增加一个Web组件到WAR文件 150 配置Web客户 151 应用级配置 151 WAR级的配置 151 组件及配置 151 部署网络客户 152 运行网络客户 152 更新网络客户 152 国际化网络客户 152 第10章 Java Servlet技术 153 什么是Servlet? 153 有关Servlets的例子 153 处理错误 155 处理servlet生命周期事件 156 指定事件监听类 157 处理错误 157 共享信息 157 使用域对象 157 控制共享资源的并发入口 158 访问数据库 159 初始化Servlet 160 编写Service方法 160 通过request取得信息 161 构造Responses 162 过滤请求及响应 163 编写Filter 163 编写自定义的请求与响应 165 指定filter映射 166 调用其它网络资源 167 响应包含其它资源 167 转移控制到其它网络组件 168 访问Web Context 168 维持客户端状态 169 访问一个会话 169 将属性与会话绑定 169 与会话相关联的通知对象 170 会话管理 170 会话跟踪 170 结束servlet 171 跟踪服务请求 171 通知方法Shut Down 172 创建长时间运行的方法 173 第11章 JSP技术 175 什么是JSP页面 175 JSP页面的例子 176 JSP页面的生命周期 179 转换与编译 179 异常 179 初始化及结束一个JSP页面 180 生成静态内容 181 生成动态内容 181 在JSP使用对象 181 隐式对象 181 特定应用程序对象 181 共享对象 182 JSP scripting 元素 182 声明 182 脚本(scriptlets) 183 表达式 184 在JSP页面包含内容 185 转换控制到另一网络组件 185 参数元素 185 包含Java小程序(applet) 185 扩展JSP语言 187 第12章 JSP页面的JavaBean组件 189 JavaBean组件设计约定 189 为什么要使用JavaBean组件 190 创建并使用JavaBean组件 190 设置JavaBean组件属性 190 返回JavaBean组件属性 191 第13章 在JSP页面自定义标签 193 什么是自定义标签? 193 JSP页面的例子 193 使用标签 196 声明标签 196 标签种类 196 简单标签 196 带有属性的标签 196 带体的标签 197 在传递信息时选择属性还是体 197 定义脚本变量的标签 197 标签的相互协作 197 定义标签 198 标签处理器 198 标签库描述符 198 简单标签 200 标签属性 200 标签体 202 定义脚本变量的标签 203 与标签协作 205 例子 207 迭代标签 207 标签处理器 208 模板标签库 208 JSP页面 208 标签处理器是如何被调用的? 211 第14章 事务 213 一.什么是事务 213 二.容器管理事务 214 事务的属性 214 容器管理事务的回滚 217 同步会话Bean的实例变量 218 容器管理事务不允许使用的方法 219 三.Bean管理事务 219 JDBC 事务 220 JTA 事务 221 非提交返回事务 222 在Bean管理事务不允许使用的方法 222 四.企业Bean事务摘要 222 五.事务超时 222 六.隔离级别 223 七.更新多个数据库 223 八.Web 组件事务 225 第15章 安全 226 一.纵览 226 二.安全角色 227 声明和连接角色引用 227 映射角色到J2EE用户和组 228 三.Web层安全 228 保护Web资源 228 控制Web资源访问 229 Web资源访问的用户验证 229 使用编程安全机制 230 不受保护的Web资源 230 四.EJB层安全 230 声明方法许可 230 使用编程安全机制 231 不受保护的EJB层资源 231 五.应用程序客户端层安全 231 确定应用程序客户端的回调处理机制 232 六.EIS(Enterprise Information System)层安全 232 配置契约 232 容器管理的契约 232 组件管理的契约 233 配置资源适配器安全 233 七.传递安全身份 234 配置组件使用的传递安全身份 234 配置客户端验证机制 235 容器间的信任机制 235 八.J2EE用户、域和组 235 管理J2EE用户和组 236 九.安装服务器证书 236 第16章 资源连接 238 一.JNDI名和资源引用 238 在deploytool配置资源引用 239 二.数据库连接 241 获得连接 241 用deploytool指定数据库用户名和密码 242 连接池 243 三.邮件服务连接 243 运行ConfirmerEJB例子 244 四.URL资源连接 245 运行HTMLReaderEJB例子 246 第17章 DUKE的银行应用程序 247 EJB 248 会话BEAN 248 实体BEAN 250 帮助类 251 数据库表 251 保护EJB 252 应用程序客户端 253 账号管理 254 类和他们之间的关系 254 Web客户端的生命循环 261 国际化 265 编译,打包,部署,运行应用程序: 266 启动j2ee 服务器,部署工具和数据库 268 给企业归档(archive)文件打包 269 打开企业归档文件 269

67,543

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧