下面的代码来自一本书,所以它不会出错。但我不知道如何解决这个错误。当删除方法doGet()时,同样的错误!
“HTTP状态405 - 此网址不支持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>
答案 0 :(得分:13)
我刚才遇到同样的问题。 “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”我正在调用超级
答案 1 :(得分:9)
Servlet代码似乎是正确的。
提供web.xml
条目和Servlet调用URL。
导致此错误的主要原因有两个:
1)您没有有效的doGet()方法,当您直接在地址栏中键入servlet的路径时,像Tomcat这样的Web容器将尝试调用doGet()方法。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException{
....
}
2)您从HTML表单发出了HTTP post请求,但是没有doPost()方法来处理它。 doGet()无法处理“发布”请求。
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException{
....
}
阅读@ BalusC的答案以获取更多详细信息。 :doGet and doPost in Servlets
答案 2 :(得分:-1)
替换
行pdf=new File("C:\\Users\\lk\\Desktop\\Desktop\\ example.pdf");
带
pdf=new File("C:/Users/lk/Desktop/Desktop/example.pdf");
然后再继续。
答案 3 :(得分:-1)
你需要做
<form action="servlet name " method="post">
index.jsp文件中的
答案 4 :(得分:-1)
出现上述错误后,请覆盖doGet()
方法。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
processRequest(req, resp); //To change body of generated methods, choose Tools | Templates.
}
答案 5 :(得分:-1)
我使用的是html文件。创建网页。 所以当我遇到这个错误。我的解决方案是: 只是删除我的web.xml文件中的“index.html”路径。 因为我的html文件名与“index.html”相同
答案 6 :(得分:-3)
每个servlet必须包含一个doGet()方法,该方法默认由服务器执行。 所以看看你有doGet方法。