我弄了三个小时未解决,望高手帮我下
前提:我机子里同时装了TOMCAT,和RESIN ,设置TOMCAT的端口为8081,RESIN的端口为8080,可以正常使用TOMCAT和RESIN中正常的做JSP和JAVABEAN的访问。
现在写的是servlet, 其中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> Test </servlet-name>
<servlet-class> moreservlets.TestServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> Test </servlet-name>
<url-pattern> /UrlTest </url-pattern>
</servlet-mapping>
<!-- … -->
</web-app>
各个文件的位置如下:TestServlet.class位于/deployDemo/WEB-INF/classes/moreservlets文件夹下,web.xml位于deployDemo/WEB-INF文件夹下,
TestServlet.java的代码如下:
package moreservlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
/** Simple servlet used to illustrate servlet naming
* and custom URLs.
* <P>
* Taken from More Servlets and JavaServer Pages
* from Prentice Hall and Sun Microsystems Press,
* http://www.moreservlets.com/.
* ? 2002 Marty Hall; may be freely used or adapted.
*/
public class TestServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType( "text/html ");
PrintWriter out = response.getWriter();
String uri = request.getRequestURI();
out.println( " <HTML> " +
" <BODY BGCOLOR=\ "#FDF5E6\ "> \n " +
" <H2> URI: " + uri + " </H2> \n " +
" </BODY> </HTML> ");
}
}
问题如下:
在tomcat下:
我可以使用http://localhost:8081/deployDemo/UrlTest 访问且结果正确
但是不可以使用:http://localhost:8081/deployDemo/servlet/Test 或
http://localhost:8081/deployDemo/moreservlets.TestServlet
则不可访问,请问是为啥?
如果把servlet-mapping去掉,用http://localhost:8081/deployDemo/servlet/Test 或http://localhost:8081/deployDemo/moreservlets.TestServlet仍然不可访问,又是为什么啊?
更重要的是在resin下访问:
web.xml文件同上,但是使用http://localhost:8081/deployDemo/UrlTest或http://localhost:8081/deployDemo/servlet/Test 或http://localhost:8081/deployDemo/moreservlets.TestServlet均不可访问,又是为什么啊?
[解决办法]
在tomcat下访问用:http://localhost:8081/deployDemo/UrlTest
在resin下访问用:http://localhost:8080/deployDemo/UrlTest
[解决办法]
绝对路径的写法是:http://localhost:8081/deployDemo/servlet/moreservlets.TestServlet,不需要在web.xml里面配。
[解决办法]
你 <url-pattern> /UrlTest </url-pattern> 这样配置的当然
http://localhost:8081/deployDemo/UrlTest 访问且结果正确
你这两个算什么路径呢?
http://localhost:8081/deployDemo/servlet/Test
http://localhost:8081/deployDemo/moreservlets.TestServlet
包下面的类访问的时候可以用“.”?
我觉得至少应该这样访问吧?
http://localhost:8081/deployDemo/moreservlets/TestServlet
[解决办法]
想直接通过servlet名字而不是映射访问servlet 得启用 servlet调用器
在 tomcat安装目录 /conf下的web.xml中找到
<!--
<servlet>
<servlet-name> invoker </servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name> debug </param-name>
<param-value> 0 </param-value>
</init-param>
<load-on-startup> 2 </load-on-startup>
</servlet>
-->
这段代码 并把去注释掉。
找到:
<!--
<servlet-mapping>
<servlet-name> default </servlet-name>
<url-pattern> / </url-pattern>
</servlet-mapping>
-->
去掉注释符号-> 保存-> 重启tomcat
就可以通过servlet名字直接访问servlet了
[解决办法]
写servlet最好给它配置servlet-mapping,因为现在那种不需要配置servlet-mapping的都是低版本的应用服务器,现在的流行的服务器都是把这个功能关闭了的,都是必须配置servlet-mapping的。
[解决办法]
你确定resin里项目的web.xml对了么?