My開発メモ

サーブレットで@WebServlet(“/”)とするとうまくいかない件

たとえば http://localhost:8080/example/ というURLでサーブレットを動作させようとしたら、スタイルシートを読み込んでくれなかった。

@WebServlet("/")
public class ExampleServlet extends HttpServlet {

}

開発ツールで見たら、以下のようなエラーが出てた。

MIMEタイプが "text/css" ではなく、"text/html" であるため、style.cssの読込みに失敗しました。

このエラーが、上記 URL の設定のせいだということに気づくのに時間がかかった。

解決法

以下のようなフィルターを作成して、回避した。

package filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/*")
public class PathFilter extends HttpFilter implements Filter {
	private static final long serialVersionUID = 1L;

	public void destroy() { }

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		String path = ((HttpServletRequest) request).getServletPath();
		if (path.equals("/")) {
			String url = ((HttpServletRequest)request).getContextPath() + "/list";
			((HttpServletResponse)response).sendRedirect(url);
			return;
		}

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}

	public void init(FilterConfig fConfig) throws ServletException { }
}

カテゴリー: Java, memo

タグ: /, servlet, style.css, text/css, text/html, URL, WebServletAnnotation, サーブレット

カウント: 209