【问题标题】:How do i get rid of: HTTP Status 405 - HTTP method GET is not supported by this URL?如何摆脱:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET?
【发布时间】:2013-06-18 23:11:48
【问题描述】:

在过去的几个小时里,我一直在为这个问题头疼。这是我第一次尝试编写 Web 应用程序并将其部署到 apache tomcat Web 容器。我遵循here 的一个简单教程,然后最终收到此错误。尝试了其他帖子中出现的关于同一问题的一些解决方案,但到目前为止似乎都没有奏效。我分别粘贴sn-ps 和web.xml、website.xml 和我的代码文件。请看看我是否做错了什么。提前致谢。

web.xml:

<?xml version="1.0"?>
<web-app
     xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
   <servlet>
      <servlet-name>home</servlet-name>
      <servlet-class>website.web.TestServlet</servlet-class>
   </servlet>
   <servlet-mapping>
      <servlet-name>home</servlet-name>
      <url-pattern>/home</url-pattern>
   </servlet-mapping>
</web-app>

website.xml:

<Context path="/website" docBase="C:\Users\Priyankar\workspace\website\web" />

HomeServlet.java

package website.web;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HomeServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
               throws ServletException, IOException {
                  PrintWriter writer = resp.getWriter();
                  writer.println("<h1>Hello, World!</h1>");
               }        
}

以下是我在 localhost_access_log 中看到的内容:

0:0:0:0:0:0:0:1 - admin [21/Jun/2013:13:25:40 -0500] "POST /manager/html/deploy?org.apache.catalina.filters.CSRF_NONCE=435C56002971030D163AA1C798F91722 HTTP/1.1" 200 14076
0:0:0:0:0:0:0:1 - - [21/Jun/2013:13:28:50 -0500] "GET /website/home HTTP/1.1" 405 1065

ma​​nager_log

Jun 21, 2013 1:25:40 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: init: Associated with Deployer 'Catalina:type=Deployer,host=localhost'
Jun 21, 2013 1:25:40 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: init: Global resources are available
Jun 21, 2013 1:25:40 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: install: Installing context configuration at 'C:\Users\Priyankar\workspace\website\website.xml'
Jun 21, 2013 1:25:40 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'

除非您想查看任何特定的日志文件,否则其余部分对我来说似乎很正常。

错误信息:

HTTP Status 500 - Error instantiating servlet class website.web.TestServlet

type Exception report

message Error instantiating servlet class website.web.TestServlet

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class website.web.TestServlet
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

root cause

java.lang.ClassNotFoundException: website.web.TestServlet
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.41 logs.
Apache Tomcat/7.0.41

这是来自包资源管理器的项目树的屏幕截图:

【问题讨论】:

  • 发布您发出此 GET 请求的部分。
  • 我想我希望看到作者被关闭....
  • localhost:8080/website/home
  • @DaveHowes 现在尝试这样做。也没有用。
  • 您在 Tomcat 日志中看到什么有趣的东西吗?

标签: java web-services http web-applications servlets


【解决方案1】:

您的屏幕截图中的代码适用于名为 website.web.TestServlet 的 Java 类,但您的 web.xml 和发布的代码显示为 website.web.HomeServlet

【讨论】:

  • 您好,我已在 web.xml 文件中将名称更改为 TestServlet,但忘记在此处进行编辑。现在也编辑了 xml 文件以反映更改。
【解决方案2】:

您提供的类名是 TestServlet,而您的 web.xml 是 HomeServlet。因此,当您点击 URL 时,它找不到任何称为 HomeServlet 的内容。

有点离题但相关:如果你有

<load-on-startup>0</load-on-startup>

标签。

这基本上是在部署期间加载 Servlet,如果它没有找到任何它就会抛出。如果您不提供该标签,则服务器会随时加载。

【讨论】:

  • 谢谢。现在就试试看。
  • 已经编辑了实际的 xml 文件,当我部署 Web 应用程序时,它说 TestServlet 不是 HomeServlet。只是忘了在这里编辑它。对不起。
猜你喜欢
  • 2012-12-14
  • 2015-03-10
  • 2016-02-13
  • 2016-10-30
  • 1970-01-01
  • 2011-07-19
  • 2014-01-16
  • 2015-02-14
相关资源
最近更新 更多