5

Tomcat に JAX-RS Web サービスがデプロイされている場合、次のような URL を指定して、一部のファイルにブラウザから直接アクセスできるようにするにはどうすればよいhttp://site/path/fileですか?

HTML Web ページを返す Web サービス メソッドがあり、そのページ内で、Web サービス ディレクトリに保存されている CSS ファイルまたは画像ファイルを読み込む必要があるとします。例えば:

@GET
@Path("/")
@Produces(MediaType.TEXT_HTML)
public synchronized String root() {
    String head = "<head><link href=\"path/style.css\" rel=\"stylesheet\"></head>";
    String head = "<body><img src=\"path/image.jpg\"/></body>";
    return "<html>"+ head + body + "<html>";
}

WebContentWeb サービス ディレクトリ ( 、META-INF、など)内のどこにファイルを配置すれWEB-INFばよいですか? また、html ページにはどのパスを配置する必要がありますか?

4

1 に答える 1

2

基本的に、絶対リンク、相対リンク、ルートリンクの3つの選択肢があります。

ファイルを外部リソースとして使用している場合、絶対リンクが機能します。相対URLは、それらを参照する場所から解決する必要があるため、ほとんどの場合、スタイル、スクリプト、画像などの静的リソースにとって苦痛です(さまざまな形式である可能性がありますimages/image.jpg, ../image.jpg, ../images/image.jpg)。

したがって、推奨される方法は、アプリケーション内の既知の位置にスタイル、スクリプト、または画像を配置し、のようなルートリンク(スラッシュプレフィックス付きURL)を使用してアクセスすることです/Images/image.jpg

フォルダは、アプリケーションのフォルダ(WebContent質問内)にある必要があります。WEB-INFの下に何かを配置すると、リソースが非表示になり、クライアントはそのリソースにアクセスできなくなります。

これらのリンクはアプリケーションのルートに解決されるため、コンテキストパスを考慮する必要があります。基本的な例は次のようになります。

@GET
@Path("whatever_path_might_be")
@Produces(MediaType.TEXT_HTML
public String root(@Context ServletContext ctx) {
    String ctxPath = ctx.getContextPath();
    String stylesFolder = ctxPath + "/Styles";
    String imagesFolder = ctxPath + "/Images";

    String head = "<head><link href=\"" + stylesFolder + "/style.css\" rel=\"stylesheet\"></head>";
    String body = "<body><img src=\"" + imagesFolder + "/image.jpg\"/></body>";
    return "<html>"+ head + body + "<html>";
}

これは基本的な例です。あなたはそれを改善する方法を見つけることができると確信しています。これらのパスを.propertiesファイルにイベントとして含め、一般構成としてロードすることができます。これにより、後で次のようなものから切り替えることができます。

resources.cssFolder=/appcontext/styles
resources.imgFolder=/appcontext/images

次のようなものに:

resources.cssFolder=http://external.server.com/styles
resources.imgFolder=http://external.server.com/images

コード行を変更せずに。

于 2013-03-14T21:40:17.363 に答える