Topic: 关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录

  Print this page

1.关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 Copy to clipboard
Posted by: beyondf1
Posted on: 2005-11-17 10:35

我用的是tomcat4.1
在webapps目录下新创建的的目录结构:myweb/WEB-INF/classes/MyServlet,然后从examples/WEB-INF/classes里拷贝SessionExample.class到此MyServlet下。用
http://localhost:8080/examples/servlet/SessionExample 能顺利访问到此示例,但用 http://localhost:8080/myweb/servlet/SessionExample 就是404错误,提示没找到。
修改examples/WEB-INF下的web.xml,例如,把其中这段代码:
<servlet>
<servlet-name>
CompressionFilterTestServlet
</servlet-name>
<servlet-class>
compressionFilters.CompressionFilterTestServlet
</servlet-class>
</servlet>
{<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>}
<servlet-mapping>
<servlet-name>
CompressionFilterTestServlet
</servlet-name>
<url-pattern>
/CompressionTest
</url-pattern>
</servlet-mapping>
改成
<servlet>
<servlet-name>
test
</servlet-name>
<servlet-class>
compressionFilters.CompressionFilterTestServlet
</servlet-class>

</servlet>

{<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>}

<servlet-mapping>
<servlet-name>
test
</servlet-name>
<url-pattern>
/111
</url-pattern>
</servlet-mapping>
然后重新启动tomcat,用
http://localhost:8080/examples/servlet/test
或者 http://localhost:8080/examples/111 都能正常访问。(其中我用{}括起来的是我不明白这代码什么意思,原文中没有{},知道的请帮忙解释一下)
我在myweb/WEB-INF目录下编写web.xml:
<?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>test1</servlet-name>
  <servlet-class>MyServlet.SessionExample</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>test1</servlet-name>
  <url-pattern>/222</url-pattern>
  </servlet-mapping>
  </web-app>
然后重新启动tomcat,之后不论用
http://localhost:8080/myweb/servlet/test1
还是 http://localhost:8080/myweb/222 都提示 无法找到的404错误。
这就是折磨了一个新手很久的问题,觉得tomcat始终无法识别出新建的目录
myweb,是不是还和server.xml有关?我把server.xml中的
<Context path="/examples" docBase="examples" debug="0"
reloadable="true" crossContext="true">
改成
<Context path="/myweb" docBase="myweb" debug="0"
reloadable="true" crossContext="true">
再加重启tomcat,但也无济于事(奇怪的是改成这样了,examples/WEB-INF/classes下的servlet还照样识别不误,http://localhost:8080/examples/servlet/RequestInfoExample 等示例还都能正常显示,-_-!,看来这段代码不是用来识别目录用的)
请知道的网友帮忙解决一下

2.Re:关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 [Re: beyondf1] Copy to clipboard
Posted by: weijiezhang
Posted on: 2005-11-17 11:41

Check if you have MyServlet.SessionExample in you webapp\web-inf\classes.

3.Re:关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 [Re: beyondf1] Copy to clipboard
Posted by: beyondf1
Posted on: 2005-11-17 14:07

of course有SessionExample.class under webapp\myweb\WEB-INF\classes。

4.Re:关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 [Re: beyondf1] Copy to clipboard
Posted by: beyondf1
Posted on: 2005-11-18 15:29

顶一下,这问题困扰很久了,在几个论坛都发过,都没人回答,看网上的文章,又都是千篇一律,都不是我要的答案。
谁来帮下忙?

5.Re:关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 [Re: beyondf1] Copy to clipboard
Posted by: weijiezhang
Posted on: 2005-11-19 03:03

beyondf1 wrote:
of course有SessionExample.class under webapp\myweb\WEB-INF\classes。

SessionExample.class should be in package MyServlet. Did you modify the class to add package info and recompile.

If you do not want go through this trouble, simply copy the class to webapp\myweb\WEB-INF\classes and get rid of MyServlet in your web.xml

6.Re:关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 [Re: beyondf1] Copy to clipboard
Posted by: goodluckwhh
Posted on: 2005-11-19 09:25

同上,你简单拷贝过来到你的classes下的MyServlet里是不对的,因为你拷贝过来的文件本来是直接放在classes文件夹下的可是你多了一层文件夹,这个时候必须在.java文件里加一句package MyServlet;然后重新编译此java文件把新的.class文件放到你的MyServlet文件夹下。
在WEB-INF的XML文件里有如下代码,它的功能就是完成页面映射的
<servlet>
<servlet-name>test1</servlet-name>
这句里的test1可以看成一个中间变量,就象你完成两个数据交换时用的中间变量一样
<servlet-class>MyServlet.SessionExample</servlet-class>
这句里的MyServlet.SessionExample就是servlet要用到的.class文件也就是要映射到的页面(实际上没有这个页面,而是一个.class文件姑且称其为虚页面吧)它的路径从classes开始算起
</servlet>
<servlet-mapping>
<servlet-name>test1</servlet-name>
这里的test1同上,它俩就是一个完成页面映射
<url-pattern>/222</url-pattern>
这里是你在浏览器里输入的地址你甚至可以嵌套N层文件夹,servlet都可以帮你把它映射到你在上边指定到的那个.class
</servlet-mapping>
以上仅是自己的一点小小心得,希望可以起到抛砖引玉的作用。大家都来谈谈自己遇到的问题和解决方法。大家好才是真的好

7.Re:关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 [Re: beyondf1] Copy to clipboard
Posted by: beyondf1
Posted on: 2005-11-19 23:39

先谢谢大家的热心解答
TO weijiezhang :
我先纠正一下我自己的笔误:
“of course有SessionExample.class under webapp\myweb\WEB-INF\classes。 ”
我说错了,SessionExample是在webapp\myweb\WEB-INF\classes\MyServlet下的。
你的第2段我没怎么看懂(抱歉,我的E文实在是烂),是让我直接把类放在myweb\WEB-INF\classes下省掉MyServlet和web.xml?我的目的正是要这个MySevlet和web.xml…

TO goodluckwhh :
"多了一层文件夹,这个时候必须在.java文件里加一句package MyServlet"这个我会去试一下,先谢谢了(我的tomcat时不时会罢工,连http://localhost:8080都显示不出来 -_-!)

8.Re:关于运行servlet的问题:web.xml的编写/新目录的创建/tomcat如何识别新目录 [Re: beyondf1] Copy to clipboard
Posted by: weijiezhang
Posted on: 2005-12-09 05:20

OK, you want to keep MyServlet, please do following:

1. get SessionExample.java
2. Add 'package MyServlet;' to the beginning of SessionExample.java
3. recompile
4. copy the SessionExample.class to myweb\web-inf\classes\MyServlet
5. restart tomcat and test

My suggestion: do NOT use capital letter in your package name per code convention. Use myservlet instead of MyServlet


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923