1

リフレクションを使用してメソッドを呼び出そうとしています。メソッド パラメーターは HttpServletRequest タイプですが、実行中のパラメーターは RequestFacade を取得し、メソッドを呼び出すことができません。これが私のコードです。

サーブレット コード:

 /**
 * Handles the HTTP
 * <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //processRequest(request, response);
    String test = (String)request.getParameter("testingText");
    String methodToCall = (String)request.getParameter("method");
    Method method;
    try {
        method = this.getClass().getMethod(methodToCall, HttpServletRequest.class, HttpServletResponse.class);
        method.invoke((HttpServletRequest)request, (HttpServletResponse)response);
        //test(request, response);
    } catch (Exception e) {
        System.out.println("Exception: " + e.getMessage());
    }
}

public void test(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
    processRequest(request, response, "test");
}

public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
    processRequest(request, response, "handleRequest");
}

そして、ここにJSPがあります

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <form method="POST" action="Controller">
        <input type="hidden" name="method" value="test"/>
        <input type="text" placeholder="Testing text" name="testingText" />
        <input type="submit" value="Click me!" />
    </form>
    <form method="POST" action="Controller">
        <input type="hidden" name="method" value="handleRequest"/>
        <input type="text" placeholder="Testing text" name="testingText" />
        <input type="submit" value="Click me!" />
    </form>
</body>

doPostが呼び出され、メソッドが見つかりましたが、型が異なるために呼び出しが失敗しました。メソッドを使用しようとするとmethod = this.getClass().getMethod(methodToCall, request.class, response.class);、見つかりません。

タイプの新しい変数を作成しようとしましHttpServletRequestたが、変数はタイプのままRequestFacadeで、メソッドの呼び出しでパラメーターをキャストすると、パラメーターが同じタイプのままであるため、メソッドは呼び出されません。

RequestFacadeパラメーターがパッケージから型を取得したことがわかりました。org.apache.catalina.. 最終的に、そのパッケージを使用できないため、メソッドパラメーターの型を変更できません。

PD:簡単にするために投稿ではRequestFacadeand型を使用しましたが、 and型があることは理解しています。HttpServletRequestResponseFacadeHttpServletResponse

4

1 に答える 1