サーブレットの初期化時にエラーが発生した場合にエラーページに飛ばすように処理を実装したいのですが良い方法が見つかりません。そもそもこういうやり方で実装している人がいない為、参考になるサイトが見つかりませんでしたので質問を投稿させていただきました。
[実装について]
htmlページからサーブレットを読み込んだ時にinitメソッドが実行される
initメソッドではプロパティファイルを読み込む処理を実装しており、万が一プロパティの読み込み失敗または読み込みんだ後のリソース解放に失敗した場合にエラーページに飛ぶ。
以下のようなオリジナルのエラーページを表示させたい。
HttpServletResponseを使わずにエラーページに飛ばすということは
無理でしょうか?エラー発生時の振る舞いについても勉強中でエラー処理に対しての改善策や別の実装方法、アドバイス等頂けると幸いです。ソースコードは以下のようになっています。
Java
1package registration.servlet; 2 3import java.io.IOException; 4import java.io.InputStream; 5import java.util.Properties; 6 7import javax.servlet.ServletException; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12import org.apache.logging.log4j.LogManager; 13 14import registration.controller.RegistrationController; 15import util.exception.UnexpectedProcessingException; 16import util.servlet.ServletResource; 17import util.util.Logger; 18import util.util.OutputLogger; 19 20public class RegistrationServlet extends HttpServlet implements ServletResource{ 21 private static final long serialVersionUID = 1L; 22 static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Logger.class.getName()); 23 24 private final static String COMMON_URL = "CommonUrl"; 25 private final static String PROPERTY_FILE = "url.properties"; 26 private final static Properties prop = new Properties(); 27 private final static String API_NAME = "RegistrationServlet"; 28 29 // 初期化処理を行います 30 public void init() throws ServletException{ 31 32 InputStream inStream = null; 33 OutputLogger Logger = new OutputLogger(); 34 try { 35 inStream = RegistrationServlet.class.getClassLoader().getResourceAsStream(PROPERTY_FILE); 36 prop.load(inStream); 37 } catch (IOException e) { 38 logger.warn("[プロパティファイル読込エラー],取得ファイル名={}", PROPERTY_FILE); 39 Logger.generateOutputWarnInfo(API_NAME, e); 40 //エラーページに飛ばす 41 gotoErrorPage(); 42 } catch (NullPointerException e) { 43 logger.warn("[プロパティファイル未存在],取得ファイル名={}", PROPERTY_FILE); 44 Logger.generateOutputWarnInfo(API_NAME, e); 45 //エラーページに飛ばす 46 gotoErrorPage(); 47 } finally { 48 try { 49 if (inStream != null) { 50 inStream.close(); 51 } 52 } catch (IOException e) { 53 logger.warn("リソース解放失敗, 対象ファイル={}",PROPERTY_FILE); 54 Logger.generateOutputWarnInfo(API_NAME, e); 55 //エラーページに飛ばす 56 gotoErrorPage(); 57 } 58 } 59 } 60 61 protected void doGet(HttpServletRequest request, HttpServletResponse response) 62 throws ServletException, IOException { 63 64 //TODO 未実装 65 66 } 67 68 protected void doPost(HttpServletRequest request, HttpServletResponse response) 69 throws ServletException, IOException { 70 //TODO 未実装 71 } 72 73 @Override 74 public void gotoErrorPage() { 75 //ここからエラーページにジャンプする 76 } 77 78}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/07 03:59