我编写了一个servlet Dispatch.java,通过index.jsp调用,index.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=gb2312"%><html>
<head>
<title>MyStore</title>
</head>
<body>
<h1>Welcome to MyStore</h1>
<p>Click here to <a href="<%=response.encodeURL("dispatch?operation=browse") %>">browse the catalog</a>
</body>
</html>我用的是eclipse开发,Dispatch.java位于\WEB-INF\src\mystore.servlet包内web.xml中servlet设置如下:
<servlet>
 <servlet-name>dispatcher</servlet-name>
 <servlet-class>mystore.servlet.Dispatcher</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>dispatcher</servlet-name>
 <url-pattern>/dispatch</url-pattern>
</servlet-mapping>运行后点击browse the catalog链接提示如下:
HTTP Status 404 - /dispatch--------------------------------------------------------------------------------type Status reportmessage /dispatchdescription The requested resource (/dispatch) is not available.是不是servlet设置错了??或者是请求错误?请高手帮忙解决下,谢谢

解决方案 »

  1.   

    看看有没有\WEB-INF\classes\mystore\servlet\Dispatcher.class文件?
      

  2.   

    找了,存在Dsipatcher.class文件。到底是什么原因呢,在线等。。
      

  3.   

    如果可以的话,把你的应用打个包发给我[email protected]
    我试试
      

  4.   

    Dispatcher.java代码如下:
    package mystore.servlet;import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import mystore.javabeans.*;
    public class Dispatcher extends HttpServlet{
      
    private ServletContext sc;
    public void init(ServletConfig config)throws ServletException{
    super.init(config);
    sc=this.getServletContext();
    }

    protected void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    response.setContentType("text/html");
    String operation=request.getParameter("operation");
    if(operation==null){
    operation="";
    }

    if(operation.equalsIgnoreCase("browse")){
    this.doBrowse(request,response);
    return;
    }
    if(operation.equalsIgnoreCase("addItem")){
    this.doAdd(request,response);
    return;
    }
    if(operation.equalsIgnoreCase("removeItem")){
    this.doRemove(request, response);
    return;
    }
    if(operation.equalsIgnoreCase("removeAll")){
    this.doRemoveAll(request, response);
    return;
    }
    if(operation.equalsIgnoreCase("doUnKnown")){
    this.doUnknown(request, response);
    return;
    } }
    private void doBrowse(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
         RequestDispatcher rd=sc.getRequestDispatcher("/browse.jsp");
          rd.forward(request, response);
        }
    private void doAdd(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    HttpSession session=request.getSession();
    Hashtable cart=(Hashtable)session.getAttribute("shoppingcart");
    if(cart==null){
    cart=new Hashtable();
    session.setAttribute("shoppingcart", cart);
    }
    String itemSku=request.getParameter("sku");
    Catalog cat=new Catalog();
    ItemInfo item=cat.getItem(itemSku);
    cart.put(itemSku, item);
    doBrowse(request,response);
    }
    private void doRemove(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    HttpSession session=request.getSession();
    Hashtable cart=(Hashtable)session.getAttribute("shoppingcart");

    if(cart==null){
    cart=new Hashtable();
    session.setAttribute("shoppingcart", cart);
    }
    String itemSku=request.getParameter("sku");
    cart.remove(itemSku);
    doBrowse(request,response);
    }
    private void doRemoveAll(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    HttpSession session=request.getSession();
    session.setAttribute("shoppingcart", new Hashtable());
    doBrowse(request,response);
    }
    private void doUnknown(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
    Exception e=new Exception("The operation is invalid!");
    RequestDispatcher rd=sc.getRequestDispatcher("/error.jsp");
    request.setAttribute("javax.servlet.jsp.jspException",e);
    rd.forward(request, response);
    }
    }
      

  5.   

    反编译他是没有用的 你可以试试把他放到Root目录下 看是否能找到 (笨方法 )因为找不到文件 就应该是设置的错 不可能是程序的错
      

  6.   

    谢谢楼上的兄弟,昨天给的代码里,web.xml中<web-app>写错- -b!!低级错误,改正了 还是提示同样的错误
      

  7.   

    刚看了,还是web.xml里粗心打错了,
    一个是web-app打成了web-add
    另一个是url-pattern里那个dispatch打成了disptch.
    下面是这段的正确代码.
    我试了,运行没问题了.<web-app>
     <servlet>
       <servlet-name>dispatcher</servlet-name>
       <servlet-class>mystore.servlet.Dispatcher</servlet-class>
     </servlet>
     <servlet-mapping>
       <servlet-name>dispatcher</servlet-name>
       <url-pattern>/dispatch</url-pattern>
     </servlet-mapping>
       
    </web-app>
      

  8.   

    谢谢楼上的兄弟,刚把那个改了 试下可以,我用的是eclipse3.2+Tomcat5.5.17,最先Mystore是放在我建立的一个工程Tomtest下的,结果每次运行都提示我说的那个错误,后直接把你刚给贴的web.xml粘贴进去,还是运行不了。后面把Mystore移出来建一个单独的工程放置,才可以运行真不知是什么问题。郁闷
      

  9.   


    我没有用eclipse,我是在Tomcat中做的测试,把你的应用放到webapps目录下.对了,还把目录名改了一下,Mystore改成mystore,这样就和包名大小写一致了.
      

  10.   

    解决了,谢谢楼上的兄弟, 我把index.jsp 放在工程主目录下,把Dispatcher.java中“/browse.jsp”改成"/Mystore/browse.jsp" 就可以了,呵