1. ホーム
  2. servlets

[解決済み] HTTPステータス 405 - HTTPメソッドGETは、このURLではサポートされていません [重複].

2022-03-02 03:42:18

質問

しかし、私はこの下のエラーを解決する方法がわからない。doGet()メソッドを削除すると、同じエラーが発生します。

HTTP ステータス 405 - HTTP メソッド GET はこの URL ではサポートされていません"

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 エントリとサーブレット呼び出し用 URL を指定します。

このエラーが発生する主な原因は2つあります。

1) 有効なdoGet()メソッドを持っていない。サーブレットのパスをアドレスバーに直接入力すると、TomcatなどのWebコンテナはdoGet()メソッドを呼び出そうとする。

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException{
....
}

2) HTML フォームから HTTP post リクエストを行ったが、それを処理する doPost() メソッドを持っていない。doGet() は "Post" リクエストを処理することができません。

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException{
....
}

詳しくは @BalusC さんの回答をお読みください。 サーブレットにおけるdoGetとdoPost