[コンテキスト]tomcat7-java 1.7
こんにちは、みなさん; 私は奇妙な仕事に直面しています。私のweb.xmlファイルでは、次のようにリクエストをマッピングしました。
web.xml
<web-app>
<filter>
<filter-name>filter</filter-name>
<filter-class>demo.DemoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>demo.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
DemoFilter.java(フィルターを実装)
@Override
public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain )
throws IOException, ServletException
{
try
{
chain.doFilter(req, res);
}
catch ( Exception e )
{
System.err.println("error");
((HttpServletResponse) res).setContentType("text/html");
((HttpServletResponse) res).setStatus(HttpServletResponse.SC_NOT_FOUND);
res.getWriter().write("foo");
}
}
DemoServlet.java(HttpServletを拡張します)
@Override
protected void doGet( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException
{
System.err.println(req.getRequestURI());
throw new RuntimeException("ERROR");
}
[1 =期待される結果]最初に、「/ foo / bar」をリクエストしようとすると、フィルターとサーブレットが呼び出されました(ページに「foo」という単語が表示されます)。コンソールの結果:
/foo/bar
error
[2 =予期しない結果]次に、「/ WEB-INF / foo / bar」を要求しようとすると、何も呼び出されず(フィルターとサーブレットがヒットしませんでした)、Tomcatエラーレポートが表示されます。
HTTP Status 404 -
type Status report
message
description The requested resource is not available.
Apache Tomcat/7.0.30
編集:ここで、私は次の結果を得ると期待していました:
/WEB-INF/foo/bar
error
フィルタを使用して例外(「/ WEB-INF」呼び出しを含む)を処理することを目指しています。
- 「/WEB-INF/」で始まるリクエストが、「/ *」パターンにマップされたフィルタ/サーブレットにヒットしないのはなぜですか?
- この問題をどのように解決できますか?
前もって感謝します!
PS:現在のweb.xml構成を保持したい( "url-pattern" = "/ *"; "error-page"を使用せずに)
編集: 私の質問は誤解されていました。「WEB-INF」ディレクトリでファイルアクセスを提供したくありません。リクエストURIが「/WEB-INF/」で始まっている場合でも、フィルタとサーブレット(url-pattern ='/ *')を使用してすべてのリクエストを処理したいと思います。ありがとう !