サーブレットで@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