Dropwizard
は
Jersey
の
このWicket
との
ハマって、
出力の
素のWicket
での エラーページの 設定方法
こちら
以下の
1. Web.xml
にerror-page
定義を 追加する。
2. 404エラー用のPage
クラスを 作成する。
3. Application
クラス内で 対象ページmountPage
する。
Dropwizard
起動からのWicket
での エラーページの 設定方法
Web.xml
のDropwizard
からだとできず(できたと
以下のように
そもそも、Dropwizard
からWicket
を
1. WicketBundle
内で、ErrorPageErrorHandler
を 設定する。
WicketBundle#(run)
メソッド内でcontext.setErrorHandler()
を実行する。
@Override public void run(WicketConfiguration configuration, Environment environment) throws Exception { MutableServletContextHandler context = environment.getApplicationContext(); context.addEventListener(new GuiceServletConfig()); FilterHolder filterHolder = getFilterHolder(configuration.isDeployment()); context.addFilter(filterHolder, "/*", DISPATCHER_TYPES); // Comment context.addServlet(DefaultServlet.class, "/*"); // Set ErrorHandler ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler(); errorHandler.addErrorPage(404, "/404"); context.setErrorHandler(errorHandler); // Set SessionHandler context.setSessionHandler(new SessionHandler()); environment.jersey().disable(); }
org.eclipse.jetty.servlet.ErrorPageErrorHandler
について
こちらには、以下のような メソッドが 存在します。 - void addErrorPage (Class exception, String uri)
- void addErrorPage (int code, String uri)
- void addErrorPage (int from, int to, String uri)
Web.xml
のerror-page
記述と
デフォルトは、org.eclipse.jetty.servlet.ErrorHandler
が
こちらは、HTML
が
2. 404エラー用のPage
クラスを 作成する。
- エラーPageの
抜粋です。
package xyz.monotalk.xxx; import javax.servlet.http.HttpServletRequest; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.protocol.http.servlet.ErrorAttributes; import org.apache.wicket.protocol.http.servlet.ServletWebRequest; import org.apache.wicket.request.http.WebResponse; import org.apache.wicket.request.mapper.parameter.PageParameters; /** * ErrorPage * * @author Kem */ public class ErrorPage { private static final long serialVersionUID = -5540046731407875758L; @Override protected void initPage(PageParameters parameters) { // Get ErrorAttributes ErrorAttributes errorAttributes = getErrorAttributes(); // Add ErrorMessage add(new Label("errorMessage", errorAttributes.getStatusCode() + " " + errorAttributes.getMessage()) .setRenderBodyOnly(true)); // Add Top page Link BookmarkablePageLink link = new BookmarkablePageLink<>("topLink", getApplication().getHomePage()); link.add(new Label("topLinkText", "Top Page")); add(link); } // getHttpServletRequest private ErrorAttributes getErrorAttributes() { // Get ErrorAttributes ServletWebRequest servletWebRequest = (ServletWebRequest) getRequest(); HttpServletRequest request = servletWebRequest.getContainerRequest(); return ErrorAttributes.of(request, "/"); } @Override protected void configureResponse(WebResponse response) { super.configureResponse(response); response.setStatus(getErrorAttributes().getStatusCode()); } @Override public boolean isVersioned() { return false; } @Override public boolean isErrorPage() { return true; } }
指定されたURL
が
Page
クラス内で、AbortWithHttpErrorCodeException
で
エラーぺjavax.servlet.error.status_code
、javax.servlet.error.message
で、
のorg.apache.wicket.protocol.http.servlet.ErrorAttributes
を
エラー情報を
ただ、
3. Application
クラス内で 対象ページmountPage
する。
3.
で
補足
ソフト404エラーぺ ージ
Error Pages and Feedback Messages - Apache Wicket - Apache Software Foundationの
@Override protected void configureResponse() { super.configureResponse(); getWebRequestCycle().getWebResponse().getHttpServletResponse().setStatus(HttpServletResponse.SC_NOT_FOUND); }
を記載しないと、
Googleウェブマスターツールが
ソフト404エラーページに
ただ、URL
がMount
されていない
Wicket内部で
以上です。
コメント