从索引JSP调用实用程序JSP中的servlet,405错误找不到servlet

时间:2013-02-04 19:52:09

标签: jsp servlets

我在这个主题上搜索了很多,但似乎没有任何问题/答案提供我想要的东西。如果答案在某个地方浮动,我道歉。

我所拥有的是我编写的一系列实用程序JSP,我通过索引类型JSP访问,其中我有一个按钮表单以转到相应的JSP。每个人看起来像这样:

<form method="POST" action="delete.jsp">
<input type="submit" value="Delete" name="B2">
</form>

在我的delete.jsp中,我有另一个按下按钮后调用我的servlet的表单,如下所示:

<form method="post" action="ModelServlet">
Select file to delete: <input type="file" name="dataFile" id="fileChooser" /><br />
<br /> <input type="submit" name="DELETE" value="Delete" />
</form>

当我按下“删除”按钮时,我收到“HTTP状态405 - 此URL不支持HTTP方法POST”错误。这让我相信存在某种映射错误或某些东西,阻止了实用程序JSP找到我的servlet。有什么想法吗?我的servlet代码如下:

我正在调用的servlet:

package com.model;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;

public class ModelServlet extends HttpServlet {
        protected void init(){}

    protected void doPost(Model ourModel, HttpServletRequest   request, HttpServletResponse response) throws ServletException, IOException {
        //check for which case we have: upload, delete, move, or copy
        if (ServletFileUpload.isMultipartContent(request)){
        //do upload stuff
        performUpload(request,response);            
    }
    else if (request.getParameter("DELETE") != null){
        //do delete stuff
        performDelete(request,response);
    }
    else if (request.getParameter("MOVE") != null){
        //do move stuff
        performMove(request,response);

    }
    else if (request.getParameter("COPY")!= null){
        //do copy stuff
        performCopy(request,response);
    }

}

使用为其下面的函数定义的方法。

干杯, 乔

1 个答案:

答案 0 :(得分:2)

您没有正确解释错误。它找到了servlet,但不是所需的方法。当您使用<form method="post">时,它显然正在寻找doPost()方法。所以你只需要确保你提供了一个(and that you don't incorrectly delegate to super.doPost())。在方法上使用@Override注释,以确保您确实覆盖了正确的方法,因此没有错误地使方法签名错误,这使得它成为一个重载(但实际上没有使用)的方法。

如果它没有找到整个servlet,那么你会得到404错误。


更新:根据您的问题更新,您的servlet根本不会过度使用the real doPost() method。有一个未知的第三个参数,它使它实际上是一个未被servlet API指定的重载方法。

protected void doPost(Model ourModel, HttpServletRequest   request, HttpServletResponse response) throws ServletException, IOException {

如果在方法上放置@Override注释,则会看到由于Model ourModel参数无效而根本无法编译。相应地修复它:

@Override
protected void doPost(HttpServletRequest  request, HttpServletResponse response) throws ServletException, IOException {