简单 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("以上是关于简单 Servlet HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]的主要内容,如果未能解决你的问题,请参考以下文章
更改 servlet 映射会引发“HTTP 状态 405 - 不支持请求方法 'GET'”
org.springframework.web.servlet.PageNotFound - 请求方法'POST'不支持http状态405
Servlet 错误:HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]