2017-03-22 47 views
0

我试图创建一个简单的servlet应用程序,但是当我将它部署到我的Tomcat服务器(8.5)中时,localhost:8080给了我405方法不允许错误。 我不知道要处理此错误如何处理servlet?

enter image description here

我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.devcolibri</groupId> 
    <artifactId>com.devcolibri.servlet</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 
    </dependencies> 

</project> 

我MainServlet.java

package com.devcolibri.servlet; 

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

    public class MainServlet extends HttpServlet { 


    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 

     PrintWriter out = resp.getWriter(); 
     out.print("<h1>Hello Servlet</h1>"); 

    } 
} 

我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     version="3.0"> 

    <servlet> 
     <servlet-name>mainServlet</servlet-name> 
     <servlet-class>com.devcolibri.servlet.MainServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>mainServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 
+0

你如何访问你的servlet?只需在您的浏览器中访问它的网址?或者你是否试图发布表单数据? –

+0

@JonSampson是的,只是通过访问它的网址 –

+0

我没有看到你发布的内容有问题,除了你可以尝试在你的'pom.xml中的'javax.servlet'依赖项中添加'提供的' '。当您尝试访问未实现的servlet资源以返回您的请求时,会返回405。所以如果你做了一个POST/PUT/HEAD到你的URL,你会看到。你实现了doGet,你的浏览器应该做一个GET,所以。 。 。 。 –

回答

-2

它看起来像访问该servlet的方式不适用于doGet方法的受保护类型。请尝试doGet公开。

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 

    PrintWriter out = resp.getWriter(); 
    out.print("<h1>Hello Servlet</h1>"); 

} 

你可以参考这里了解保护和公众的更多信息:what is the difference between public service() method and protected service() method of httpservlet

+0

这可能不是正确的途径。 'doGet'受到保护,在'HttpServlet'中只有一个版本。在这种情况下,我们没有处理“服务”方法。请参阅[用于POST请求的Java Servlet返回错误405(方法不允许)](http://stackoverflow.com/questions/19965253/java-servlet-return-error-405-method-not-allowed-for-post-request ) –

+0

@Jon Sampson,如果您看到可以清楚看到的公共和受保护的注释,则该问题仅适用于IllegalStateException,并且一旦删除此异常,两者都可以正常工作。如果我错了,请纠正我。 – Arindam

+0

由于我使用'protected'部署了servlet,所以我很犹豫。但是,您在这种情况下可能是正确的。我们将看到@socm_说什么。 –