无法运行自己目录下的Servlet,十分困惑,求教!

piscean_163 2002-05-09 08:24:22
无法运行自己目录下的Servlet,十分困惑,求教!
环境:Win98+Tomcat4.0
我建了一个自己的项目目录myapp,按书上说的,为它建立了一个子目录WEB-INF,再下面是子目录classes和lib,以及从tomcat的例子目录拷贝过来的web.xml文件(没有改动),
然后把整个myapp拖到Tomcat的Webapps目录下面,于是困惑开始了:
1)如果我把自己的Servlet程序:HelloWWW.class文件放到myapp\WEB-INF\classes目录下,即:
D:\Tomcat4\webapps\myapp\WEB-INF\classes\HelloWWW.class
然后在浏览器中输入:http://localhost:8080/myapp/servlet/HelloWWW
就报错:
--------------------------------------------------------------------------------
type Status report

message /myapp/servlet/HelloWWW

description The requested resource (/myapp/servlet/HelloWWW) is not available.

2)可是如果我把这个HelloWWW.class放到Tomcat的例子目录下,即:
D:\Tomcat4\webapps\examples\WEB-INF\classes\HelloWWW.class
然后在浏览器中输入:http://localhost:8080/examples/servlet/HelloWWW
则运行成功。

我困惑的是,myapp和Tomcat的examples同样都是在webapps目录下,而且它们的web.xml和HelloWWW.class都是一样的,目录结构也是一样的,除了我的myapp目录下没有examples目录下的其他子目录比如images、jsp、servlet(这些都是没有关系的目录吧)以外,我觉得我的myapp目录和examples目录根本没什么不同,真正不同的就是,myapp\WEB-INF\classes\下只有一个HelloWWW.class文件,而examples\WEB-INF\classes\下有好多其他的.class文件。
可是为什么呢!那些.class文件都是我用不上的啊。

为什么在myapp目录下运行HelloWWW就报错,而在examples下就正常?
不明啊!

我也查了一些资料,发觉以前也有人提过类似的问题,我照那些解答做了(无非也就是建立一个有WEB-INF(大写)的目录,servlet要放在classes目录下,这些我都是对的啊),可还是没有用。
我甚至还试着在conf\server.xml文件中增加了myapp的虚拟目录,如下:
<Context path="/myapp" docBase="webapps/myapp" debug="0" reloadable="true" />
仍然不对。
改为:
<Context path="/myapp" docBase="myapp" debug="0" reloadable="true" />
也一样没用。

不明啊!
看在我辛苦敲这么多字的分上,请请请指教!!!

...全文
26 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
piscean_163 2002-05-11
我不明的地方是难道以上我在web.xml的设置有错?
真不明错在哪里。
虽然现在可以用自己的目录,但是没有完全搞明白,还是有点不爽。

关于“对Tomcat什么时候进行web.xml和server.xml配置”“为什么我上面的设置不成功”等问题,如果那位过来人有心得愿意点化我的,麻烦您高抬贵手,贴个帖子出来让偶等菜财共赏之。

PS:我能不能再晚一两天结贴?:)还想等等答复。。。

回复
piscean_163 2002-05-11
嗯,Tomcat文档里说有一个基本的web.xml文件,在webapps\tomcat-docs\appdev\下,我看了看,里面和examples目录下的web.xml文件不大一样,没有那些<filter>标签,相比之下要简单的多。于是我将其中的<servlet>部分修改成我自己的servlet声明(同上)。重起Tomcat,一切都ok了.

虽然我还不清楚从examples目录下拷过来、再进行了同样修改的那个web.xml文件中,是那一部分导致我不能正常使用,但是现在至少明白了:可以用Tomcat提供的基本web.xml.txt作为蓝本,生成自己的有效的web.xml!

谢谢大家的帮助!
回复
bigdog001 2002-05-10
原因并不在这:
可以查看HelloWWW.java的源代码,有:
ResourceBundle rb = ResourceBundle.getBundle("LocalStrings",request.getLocale());
需要将examples\WEB-INF\classes\下的LocalStrings.propertie文件copy至与HelloWWW.class一致的目录;
then 在调用时:
http://localhost:8080/examples/servlet/HelloWWW
ok!

或者在myapp\WEB-INF下的web.xml文件中添加:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>HelloWWW</servlet-name>
<servlet-class>HelloWWW</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWWW</servlet-name>
<url-pattern>/HelloWWW</url-pattern>
</servlet-mapping>
</web-app>

在调用时:
http://localhost:8080/examples/HelloWWW
不用在url中添加servlet
ok!
回复
piscean_163 2002-05-10
我的HelloWWW.class文件中没有ResourceBundle.getBundle语句也,:)

现在,删除了自己目录下的web.xml,一切就ok了。

至此我还是有点困惑,我也曾尝试过自己目录下的web.xml中试过如下操作:
1)从Tomcat的examples目录下拷贝web.xml,
2)在<!-- Define servlets that are included in the example application -->注释语句后的相应servlet都删掉,在按照相同的格式换成我自己的HelloWWW:(这就是注册吧!)
<servlet>
<servlet-name>HelloWWW</servlet-name>
<servlet-class>HelloWWW</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloWWW</servlet-name>
<url-pattern>HelloWWW</url-pattern>
</servlet-mapping>
3)然后在浏览器中输入:http://localhost:8080/myapp/servlet/HelloWWW
却得到一个:The requested resource (/myapp/servlet/HelloWWW) is not available.
的错误信息。

在conf/server.xml文件中,我也加过相应的<context>内容,也不奏效。也重起了Tomcat。
目前的测试结果是,加了web.xml就不行,删除web.xml就行,我对Tomcat什么时候进行web.xml和server.xml配置感到困惑。我需要继续找找资料。

谢谢高手们的指点。:)
回复
piscean_163 2002-05-09
都有的,我整个web.xml就是从Tomcat的examples目录下的那个web.xml文件拷贝过来的,然后把<!-- Define servlets that are included in the example application -->注释语句后的相应servlet都删掉,在按照相同的格式换成我自己的HelloWWW。
您答复的可真快。太好了。
回复
dylanwolf 2002-05-09
还有
<web-app>


</web-app>
回复
dylanwolf 2002-05-09
没有包括这些头语句吗?

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">


加进去, 这些是必须的.
回复
piscean_163 2002-05-09
对不起,<servlet-mapping>中多敲了一个/:应该如下:
<servlet-mapping>
<servlet-name>HelloWWW</servlet-name>
<url-pattern>HelloWWW</url-pattern>
</servlet-mapping>
回复
piscean_163 2002-05-09
谢谢两位答复!!!
我myapp\WEB-INF下的web.xml文件内容中已经包含进了HelloWWW的申明,如下:
<!-- Define servlets that are included in the example application -->
(在这个注释后,也只申明了这么一个servlet)

<servlet>
<servlet-name>HelloWWW</servlet-name>
<servlet-class>HelloWWW</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloWWW</servlet-name>
<url-pattern>/HelloWWW</url-pattern>
</servlet-mapping>
无论加不加servlet-mapping,都是不成功。

觉得该设的,该做的都弄好了,结果还是得到一个:
The requested resource (/myapp/servlet/HelloWWW) is not available.
的错误信息,真的很困惑哦。唉。
回复
dylanwolf 2002-05-09
你的web.xml文件是什么样的?

里面应包含: 放在 WEB-INF目录下.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<servlet>
<servlet-name>HelloWWW</servlet-name>
<servlet-class>HelloWWW</servlet-class>
</servlet>
</web-app>
回复
ewang_365 2002-05-09
你应当在.xml的配置文件里面注册才行的。
不过我用的weblogic6,所以可能和你的方式不同,只是提个思路。
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告