- 前ページ
- 次ページ
最近ゲームばっかやっていたので、久々にコーディングw
先日作成したActionServletクラスを修正した。
実行する業務コントローラクラスを振り分け可能とするため、
クラス名を指定することで実行クラスを変更できるよう修正した。
「リフレクション」とかいう手法らしいです。知らなかった・・・
まだまだ勉強せねば、ですねw
やり方は若干微妙かもしれませんが、一応下記コードで動きました。
ちなみにエラートラップをちゃんと仕掛けないと、コンパイルエラーが出てました。
エラー処理も考えなきゃですね。ま、後でw
■src
-----------------------------------------------------------------------------------------
package jp.ne.hobby.fw.servlet;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.*;
import javax.servlet.http.*;
public class ActionServlet extends HttpServlet {
/** 返却JSP(サンプル) */
private static String RET_JSP = "<%@ page contentType=\"text/html;charset=Shift_JIS\"%>\r\n<html>\r\n<head><titile></title></head>\r\n<body>\r\n<h1>Hobby JSP</h1>\r\n</body>\r\n</html>";
/** 実行クラス名 */
private String execClassName;
/** 実行クラス */
private Class<?> execClass;
/** 実行メソッド名 */
public static final String exeMethodName = "execute";
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(RET_JSP);
// コントローラの実行
executeControl();
}
/**
* 業務コントローラクラスを実行する
*/
public void executeControl(){
try{
// クラス名を取得
// TODO:後ほどプロパティファイルなどから取得するよう修正
execClassName = "jp.ne.hobby.fw.control.HobbyControl";
// クラスを取得
execClass = Class.forName(execClassName);
// 実行クラスのインスタンス生成(コンストラクタの実行)
Object execClassObj = execClass.newInstance();
Class[] types = new Class[] {};
// 実行メソッドのインスタンスを生成
Method execMethod = execClass.getMethod(exeMethodName,types);
// 業務コントローラクラスのメソッドを実行
execMethod.invoke(execClassObj, new Object[0]);
}
// TODO:以下、エラートラップは汚いコードとなっているため後ほど修正
catch (ClassNotFoundException e) {
throw new NoClassDefFoundError(e.getMessage());
} catch (InstantiationException e) {
throw new InstantiationError(e.getMessage());
} catch (IllegalAccessException e) {
throw new IllegalAccessError(e.getMessage());
} catch (NoSuchMethodException e){
} catch(InvocationTargetException e){
}
}
}
-----------------------------------------------------------------------------------------
■



