HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
Posted
技术标签:
【中文标题】HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]【英文标题】:HTTP Status 405 - HTTP method GET is not supported by this URL [duplicate] 【发布时间】:2012-08-19 19:01:26 【问题描述】:下面的代码来自一本书,所以不会出错。但是我不知道如何解决下面的错误。删除方法doGet()时,同样的错误!
“HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET”
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PDFServlet extends HttpServlet
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
this.doPost(request,response);
@Override
protected void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException,ServletException
response.setContentType("application/pdf");
ServletOutputStream out=response.getOutputStream();
File pdf=null;
BufferedInputStream buf=null;
try
pdf=new File("C:\\Users\\lk\\Desktop\\Desktop\\ example.pdf");
response.setContentLength((int)pdf.length());
FileInputStream input=new FileInputStream(pdf);
buf=new BufferedInputStream(input);
int readBytes=0;
while((readBytes=buf.read())!=-1) out.write(readBytes);
catch(IOException e)
System.out.println("file not found!");
finally
if(out!=null) out.close();
if(buf!=null) buf.close();
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
-<web-app xsi:.........." version="2.5">
-<servlet>
<description>This is the description of my Java EE component</description>
<display-name>This is the display name of my Java EE component</display-name>
<servlet-name>PDFServlet</servlet-name>
<servlet-class>PDFServlet</servlet-class>
</servlet>
-<servlet-mapping>
<servlet-name>PDFServlet</servlet-name>
<url-pattern>/PDFServlet</url-pattern>
</servlet-mapping>
-<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
-<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
【问题讨论】:
你能提供你的 web.xml 文件吗? 【参考方案1】:我刚才也遇到了同样的问题。 “HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET”。我的解决方案如下:
public abstract class Servlet extends HttpServlet
protected HttpServletRequest req;
protected HttpServletResponse resp;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
this.req = req;
this.resp = resp;
this.requestManager();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
this.req = req;
this.resp = resp;
this.requestManager();
protected abstract void requestManager() throws IOException;
我的构造函数有问题,因为我正在调用超级的“doGet”
【讨论】:
这个让我着迷——我认为在重写方法时调用父方法是标准做法。调用 super.doGet(req, resp) 导致了这个错误。 (让我发疯,因为我的 doGet 中的断点被击中......然后服务器将响应 405.. 尽管我明确设置了状态)【参考方案2】:Servlet 代码似乎正确。
提供web.xml
入口和Servlet调用URL。
导致此错误的主要原因有两个:
1) 你没有有效的doGet()方法,当你直接在地址栏中输入servlet的路径时,像Tomcat这样的web容器会尝试调用doGet()方法。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException
....
2) 您从 html 表单发出 HTTP 发布请求,但您没有 doPost() 方法来处理它。 doGet() 无法处理“发布”请求。
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException
....
阅读@BalusC 的回答了解更多详情。 :doGet and doPost in Servlets
【讨论】:
Servlet 调用 URL:"localhost:8080/Test/PDFServlet" (测试:项目名称) 现在我不知道,但是出现了一个新问题:在myeclipse窗口中,输出总是:“找不到文件!”,为什么?我的文件路径是正确的。 我解决了这个问题,非常感谢!最后,是服务器的问题,我会处理的。 很高兴听到问题已解决。你很受欢迎 @itzyjr 那么问题出在哪里?【参考方案3】:换行
pdf=new File("C:\\Users\\lk\\Desktop\\Desktop\\ example.pdf");
与
pdf=new File("C:/Users/lk/Desktop/Desktop/example.pdf");
然后再继续。
【讨论】:
【参考方案4】:你需要做的
<form action="servlet name " method="post">
在您的 index.jsp 文件中
【讨论】:
【参考方案5】:当出现上述错误时,覆盖doGet()
方法。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
processRequest(req, resp); //To change body of generated methods, choose Tools | Templates.
【讨论】:
【参考方案6】:我使用的是 html 文件。创建网页。 所以当我遇到这个错误时。我的解决方案是: 只是为了删除我的 web.xml 文件中的“index.html”路径。 因为我的 html 文件名与“index.html”相同
【讨论】:
【参考方案7】:每个 servlet 必须包含一个 doGet() 方法,该方法默认由服务器执行。 所以看到你有 doGet 方法。
【讨论】:
不,他们没有。如果您计划使用标准 servlet 接口支持 GET 请求,那么可以,但您不必这样做。以上是关于HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 POST
Apache Tomcat HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET [重复]
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET
HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET - RequestDispatcher 出现错误