私はwebappsのフロントコントローラサーブレットクラスを作成しています。サブクラスで親クラスの保護されたメソッドを使用するにはどうすればよいですか?
- ファイル要求(
FileRequestHandler
インスタンスを呼び出す) - データ要求(
DataRequestHandler
インスタンスを呼び出す) - サーブレット要求(
ServletRequestHandler
インスタンスを呼び出す) :フロントコントローラは、3つの基本的なケースを区別するように設計されています
は、テストのために、私は、TomcatのDefaultServlet
(javadoc、source code)奉仕するファイルを使用していたが、私はそれを動作させることはできません。問題は、私のFileRequestHandler
クラスが適切にDefaultServlet
を拡張しなければならないにもかかわらず、私は保護されたメソッド(特にGET要求を扱うためにdoGet
)にアクセスできないということです。クラスは異なるパッケージbtwにあります。
コード:
public class FileRequestHandler extends DefaultServlet {
// fields
private static final long serialVersionUID = 1L;
// methods
public void setResponse(HttpServletRequest request , HttpServletResponse response, URI uri)
throws IOException, ServletException
{
/* DEBUG */try {
System.out.println("(!!) doGet >> " + DefaultServlet.class.getMethod("doGet",new Class[]{HttpServletRequest.class,HttpServletResponse.class})) ;
doGet(request,response) ;
/* DEBUG */}
/* DEBUG */catch(Exception e) { System.out.println("(!) " + this.getClass().getName() + " >> buildResponse >> " + e.toString()) ; }
}
}
スタックトレース:
Oで
(一部がnullpointerに至るまで) org.apache.catalina.servlets.DefaultServlet.servlets.DefaultServlet.serveResource(DefaultServlet.java:741) (org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:398) at org.pulse.web.FileRequestHandler.buildResponse FileRequestHandler.java:39)
更新:
私は多分、フロントコントローラサーブレットは、デフォルトサーブレット効果にすべてHttpRequests、(web.xmlの<url-pattern>/</url-pattern>
)を傍受することを明確にする必要がありサーブレットコンテナによってインスタンス化されても、リクエストは受信されませんsts、私が知る限り。 私は今、明示的にフロントコントローラクラスでDefaultServlet#init
と呼ばれています:
FileRequestHandler fileRequestHandler = new FileRequestHandler() ;
fileRequestHandler.init() ;
は今、私は404サーブレットで終わる使用できません。
Update2:問題は - 実際には、継承の直接の問題ではなく、拡張クラスの不適切な使用によるフォローアップの問題です。
私は問題の根本を検出するために追加のログへの投稿は
。私がそれを省略すると私はNoSuchMethodException
を誘発します。
NullPointerException
を得ます。
これはとても簡単です。まだ私はそれが私がそれを望むように動作するようにすることはできません。任意のアイデア、提案、または洞察力?
TIA、
FK
Class.getMethod
あなたの答えをありがとう。私は私のポストをちょっと更新します。 – FK82
マイ・ポストを更新しました。 'request'も' response'もnull btwではありません。 – FK82
@ FK82:どのバージョンのTomcatを使用していますか? –