简单 Servlet HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

Posted

技术标签:

【中文标题】简单 Servlet HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]【英文标题】:Simple Servlet HTTP Status 405 - HTTP method GET is not supported by this URL [duplicate] 【发布时间】:2016-07-18 04:14:52 【问题描述】:

我开始研究 servlet。 代码小服务程序:

package arver;

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

/**
 * Created by 35717 on 30.03.2016.
 */
public class MainServlet extends HttpServlet 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        super.doGet(req, resp);
        PrintWriter out = resp.getWriter();
        out.print("servlet");
    

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        super.doPost(req, resp);
    

文件 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>arver.MainServlet</servlet-class>
        </servlet>

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

    </web-app>

服务器响应: HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET

输入状态报告

此 URL 不支持消息 HTTP 方法 GET

说明 请求的资源不允许使用指定的 HTTP 方法。

Apache Tomcat/9.0.0.M4

为什么我收到 HTTP 状态 405 - 此程序中的此 URL 错误不支持 HTTP 方法 GET。

【问题讨论】:

将您的 jsp/html 文件从您尝试提交到此 servlet 的位置发布。 你是怎么称呼这个servlet的?网址? 为什么使用 url-pattern 作为/,给它一些子路径。 "/" 因为我按照例子做了 不创建jsp.file运行示例。那么已经是如何使用jsp.file运行的示例了。 【参考方案1】:

我们扩展了 HttpServlet@Override doPost,但在我们的实现中我们不调用它的 super,因为调用 super 会给出这个消息。

当您在 Servlet 的 doGet() 方法中执行 super.doGet(request, response); 时,您实际上调用了 HttpServlet 类的 doGet()。所以放弃超级电话。不需要。

只需删除这些行:

super.doGet(req, resp);
super.doPost(req, resp);

【讨论】:

【参考方案2】:

使用 get 或 Post 方法

MainServlet.java

package arver;

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

/**
 * Created by 35717 on 30.03.2016.
 */
public class MainServlet extends HttpServlet 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        
        PrintWriter out = resp.getWriter();
        out.print("servlet");
    

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">
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

        <servlet>
            <servlet-name>MainServlet</servlet-name>
            <servlet-class>arver.MainServlet</servlet-class>
        </servlet>

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

    </web-app>

Url 必须是这样的:http://localhost:8080/Projectname/MainServlet

【讨论】:

是的,我知道通过响应和正确使用jsp来显示所有标签并不好,但是我想了解为什么会出现此错误,我想我可以out.print (""); out.print(""); out.print(""); out.print(""); out.print(""); out.print(""); out.print("servlet"); out.print(""); out.print(""); 你不应该在一个 servlet 中使用 get 和 post 方法。你必须使用 get 或 post 方法 感谢您的帮助,不幸的是,没有足够的声誉作为有用的回应。

以上是关于简单 Servlet HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]的主要内容,如果未能解决你的问题,请参考以下文章

doPost 超级导致 - HTTP 状态 405

更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'”

org.springframework.web.servlet.PageNotFound - 请求方法'POST'不支持http状态405

Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]

eclipse ee servlet tomcat doPost http405