2012-11-07 120 views
2

我已经编写了servlet.I想测试我的servlet类的功能,所以我为我的servlet写了一个测试用例。但它抛出以下例外。java httpunit.httpexception:HTTP请求错误:405方法不允许[url]

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请帮我...

在此先感谢:)

回答

2

这是因为你已经实现doPost()和accesing GET

+1

Thanks.Just尝试过,它的工作。我必须使用PostMethodWebRequest()而不是GetMethodWebRequest()。 – Nutan

+0

如果能帮到你,你能接受吗? –

1

这是正确的,在堆栈跟踪的第一行:“405不允许的方法”。您正试图从仅实现/允许POST的servlet中的GET

您可以在您的servlet中@OverridedoGet(...)方法,并简单地将其转发到doPost(...)方法 - 然后它会工作。

干杯,

相关问题