【问题标题】:ServletContext.getAttributes("Name") returns nullServletContext.getAttributes("Name") 返回 null
【发布时间】:2011-10-14 23:28:19
【问题描述】:

我已经编写了 servlet。我想测试我的 servlet 的 init() 方法的功能。但是当我使用 servletRunnermIt 为我的 servlet 编写测试用例时,会出现以下异常。我也得到了配置和上下文对象。如果我想从这两个对象中获取初始化参数,它会返回 null。

com.meterware.httpunit.HttpException: Error on HTTP request: 405 HTTP method GET is not supported by this URL [http://127.0.0.1:8888/NewsletterServlet]
    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.newscenter.server.NewsletterServletTest.testFetchNews(NewsletterServletTest.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
    at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
    at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
    at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
    at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
    at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
    at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
    at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
    at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    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 代码和 XML 配置。
  • 异常的原因与null 属性完全不同。

标签: java servlets


【解决方案1】:

网址看起来很可疑,http://127.0.0.1:8888/NewsletterServlet

通常,servlet URL 应包含 Web 应用程序名称,例如 http://127.0.0.1:8888/WebAppName/NewsletterServlet。但我看不到你的情况。这可能是问题所在。

【讨论】:

    【解决方案2】:

    错误信息表明你有一个

    super.doGet(request, response);
    

    在您的 servlet 的 doGet() 实现中。去掉它。

    HttpServlet 类基于模板方法模式,其中所有未覆盖的 doXxx() 方法都会发送 HTTP 405 错误,指示该方法不受支持。当您覆盖它时,它不会发送 HTTP 405 错误,而是发送特定覆盖方法生成的任何结果。但无论如何,当您调用 super 方法时,您仍然会得到 405。

    【讨论】:

      猜你喜欢
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多