struts 2静的リソースマッピングコードの例


struts 2のフレームワークには、jsファイルやいくつかのcssファイルなど、共通の静的な内容があります。フレームがこれらの静的な内容を必要とする場合、FilterDidpatchは自動的に提供してくれます。FilterDidpatchはどうやって静的な内容を要求しているのか分かりますか?任意の要求は「/struts/」で始まると、FilterDidpatchは静止コンテンツを要求していると考えられます。要求が静的リソースを要求すると識別された後、FilterDidpatchはどのようにマッチングして静的リソースを探しますか?ここには二つのポイントがあります。
1.要求されるリソースパスを決定します。FilterDidpatchは、要求されるリソースとして、struts/後のコンテンツを切り取ります。例えば、現在要求されているのは/struts/xhtmlです。styss.cssでは、FilterDidpatchはxhtml/styss.cssを私たちが要求するリソースのパスとして使用します。
2.どこに行って、要求された静的な内容を探しますか?デフォルトではFilterDidpatchは任意のorg.apache.struts.staticとtemplateの二つのカバンの中を探しに行きます。他のカバンの中に静的な内容を探したいなら、web.xml構成のFilterDidpatchにパラメータ「packages」を追加して、コンマまたはスペースで区切られた一連のパケット名に設定します。

<filter>
    <filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
  <param-name>packages</param-name>
  <param-value>com.mangocity.static,hust.cm</param-value>
</init-param>
  </filter>
  <filter-mapping>
    <filter-name>Struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 説明:ウェブアプリケーションの下にディレクトリ「static」があります。今はその中の「top.html」ファイルにアクセスします。つまり「localhost:8080/static/top.」にアクセスします。サーバーはいつも404のエラーを抱えています。 
    理由:struts 2のFilter Displatch類のdoFilter方法では、要求されたのが静的リソースであれば、struts 2はこの要求が処理できるかどうかを判断します。ここのコードは以下の通りです。
Javaコード

String resourcePath = RequestUtils.getServletPath(request); 
if ("".equals(resourcePath) && null != request.getPathInfo()) { 
  resourcePath = request.getPathInfo(); 
} 
if (staticResourceLoader.canHandle(resourcePath)) { 
  staticResourceLoader.findStaticResource(resourcePath, request, response); 
} else { 
   // this is a normal request, let it pass through 
   chain.doFilter(request, response); 
} 
// The framework did its job here 
return; 
 この中で、Default Static Contect Loader類のcanHandle方法では、要求経路を判断します。
Javaコード

public boolean canHandle(String resourcePath) { 
  return serveStatic &&  
   (resourcePath.startsWith("/struts") || resourcePath.startsWith("/static")); 
} 
ここで、serveStaticの値はtrueで、また訪問する資源は「/static」で始まるので、ここでtrueに戻ります。 
    その後、Default Static Contect Loader類のfindStatic Resource方法に入ることができます。この方法の最初の行の文は:   
Javaコード

String name = cleanupPath(path); 
ここで、cleanupath方法の定義は以下の通りである。
Javaコード

/** 
 * @param path requested path 
 * @return path without leading "/struts" or "/static" 
 */ 
protected String cleanupPath(String path) { 
  //path will start with "/struts" or "/static", remove them 
  return path.substring(7); 
} 
 struts 2は「/static」を切ってしまいました。このようにして、後で解析すると、「/top.html」に対する解析の要求になりますので、404エラーを報告します。 
締め括りをつける
悲劇的なミスは自分のプログラムのバグだと思い、長い間修正しました。オープンソースプログラムの具体的な実現に対する理解を強化する必要があります。本論文で述べた皆さんのために、興味のある友達はStruts 2 ONLを使用してMapメソッドを遍歴します。詳しくはを参照してください。 、  Struts 2はognl表現により投影を実現する。 、  Struts 2アップロードファイルのサイズ制限方法の解析を修正します。など、私たちのサイトに対する友達のサポートに感謝します。