Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java httpunit.httpexception:HTTP请求错误:不允许使用405方法[url]_Java_Servlets - Fatal编程技术网

java httpunit.httpexception:HTTP请求错误:不允许使用405方法[url]

java httpunit.httpexception:HTTP请求错误:不允许使用405方法[url],java,servlets,Java,Servlets,我已经编写了servlet。我想测试我的servlet类的功能,所以我已经为我的servlet编写了一个测试用例。但是它抛出以下异常 com.meterware.httpunit.HttpException: Error on HTTP request: 405 Method Not Allowed [http://localhost:8090/getPrintSettings] at com.meterware.httpunit.WebClient.validateHeaders(We

我已经编写了servlet。我想测试我的servlet类的功能,所以我已经为我的servlet编写了一个测试用例。但是它抛出以下异常

com.meterware.httpunit.HttpException: Error on HTTP request: 405 Method Not Allowed [http://localhost:8090/getPrintSettings]
    at com.meterware.httpunit.WebClient.validateHeaders(WebClient.java:623)
    at com.meterware.httpunit.WebClient.updateClient(WebClient.java:500)
    at com.meterware.httpunit.WebWindow.updateWindow(WebWindow.java:192)
    at com.meterware.httpunit.WebWindow.getSubframeResponse(WebWindow.java:183)
    at com.meterware.httpunit.WebWindow.getResponse(WebWindow.java:158)
    at com.meterware.httpunit.WebClient.getResponse(WebClient.java:122)
    at com.vxoom.qit.basic.GetPrintSettingsTest.testGetForm(GetPrintSettingsTest.java:22)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
这是我的Servlet类:

public class GetPrintSettings extends HttpServlet {

private Logger log;
DB db;
Connection connection;


public void init() throws ServletException { //initialise servlet
    log = Logger.getRootLogger();
    db = new DB();
    connection = db.connect();
    super.init();
}

public void destroy() {  //destroy servlet
    try {
        connection.close();
    } 
    catch (SQLException e) {
        log.error("AddAddress: SQL Exception: "+e.getMessage());
        e.printStackTrace();
    }
    super.destroy();
}


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

    int userType = Integer.parseInt(request.getParameter("user"));
    response.setContentType("application/json");        
    PrintWriter out = response.getWriter();

    //Get print settings from JavaClient
    String json = getPrintSettings();

    if(json == null) {
        out.print("{success:false, msg:'Could not send request. Please try again'}");
        out.close();
        return;
    }

    //Send the reply to the web client
    out.print(json);
    out.close();
}
}

这是我的servelt测试用例

  public class GetPrintSettingsTest extends TestCase {

       public static void main( String args[] ) {

    junit.textui.TestRunner.run(GetPrintSettingsTest.class );
   }

public void testGetForm() throws Exception {
    WebConversation web = new WebConversation();
    WebRequest  request = new GetMethodWebRequest("http://localhost:8090/getPrintSettings" );
    WebResponse response = web.getResponse(request);
    request.setParameter("user", "1");
    response = web.getResponse( request );

}
}

我已经使用了httpunit1.7请帮助我


提前感谢:)

它就在堆栈跟踪的第一行:“405方法不允许”。您试图从一个只实现/允许
POST
的servlet中
获取

您可以
@覆盖servlet中的
doGet(…)
方法,并将其转发到
doPost(…)
方法,然后它就可以工作了


干杯,

这是因为您已经实现了
doPost()
并访问了
GET

谢谢。刚刚试过,效果不错。我必须使用PostMethodWebRequest()而不是GetMethodWebRequest()。