- PR -

別コンテキストパスのHTMLファイルの表示

1
投稿者投稿内容
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-03-31 09:48
現在Servletで開発を行っているのですが、プログラムと無関係のフォルダに格納してあるHTMLファイルの表示方法がわかりません。
ActionForwardで遷移出来るのはコンテキストパスの下位にあるものだけですよね?
今回の件のアプリケーションのコンテキストパスをshop_searchとし、
遷移すべきHTMLが全くの別フォルダ、例えばshop_searchと同じ階層にある
html_folderに格納されていた場合、これをServletから遷移したようにして表示させることは出来るでしょうか?
(実際に遷移である必要はありませんが、同じブラウザで開きたいと言うことです)
セキュリティ上の問題が無ければ手法は特に問いません。
階層的にはこのようになるかと。

webapps―shop_search―WEB-INF―本アプリケーション
    ―html_folder―表示させたいhtml郡

基本的な事項についての質問かもしれませんが、よろしければお知恵を拝借できないでしょうか。
自力では解法を見つけれませんでした。
(Runtime.execを使用する方法ではブラウザがもうひとつ立ち上がってしまいだめでした。)

[ メッセージ編集済み 編集者: Rasty 編集日時 2004-03-31 16:38 ]
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2004-03-31 10:58
 下記のような感じで、リダイレクトすればよいのでは?
コード:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
    doPost(request,response);
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
    response.sendRedirect("http://www.atmarkit.co.jp/");
  }

}

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-03-31 11:06
"ActionForward"ってことは Struts 使ってるということですよね?
redirect="true" って書けば forward じゃなくて redirect してくれますのでコンテキスト以下にないパスへとばすことができます。
<forward name="foo" redirect="true" path="/out/of/context"/>
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-03-31 15:05
>>taku様、インギ様
ありがとうございます。リダイレクトを使用し、目的のHTMLを表示することが出来ました。
(今回はインギ様の案を採用しました。)
しかし、ここで問題が一つ発生してしまいました。
HTMLの表示を行うとブラウザに表示されるURLが目的HTMLのパスになってしまいます。
(当然と言えば当然ですが)
*.do等でパス(URL)を隠した状態のまま表示させることは出来るでしょうか?

追記です。
html郡が置いてあるディレクトリにプログラム等を設置することは出来ません。
(最初はhtml管理用のを設置すればよいと思いましたが、開発では触れないそうです。)

[ メッセージ編集済み 編集者: Rasty 編集日時 2004-03-31 15:09 ]
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-03-31 16:17
自己レスですが、一度コンテキストパス以下のjspに飛ばし、
<bean:include>で該当のHTMLを表示させるという方法を取ろうと思います。
<bean:include>のhrefに対して飛ばすべきURLを直接記述した場合はうまく行きました。

しかし、今回のアプリケーションは飛ばすべきURLをbeanの方で動的に作成しています。
そのため<bean:define>でURLを取得する必要があり、<bean:define>で取得したURLを
<bean:include>に認識させると言う方法がうまく行きません。
beanで作成される変数の内容を<bean:include>に適用させる方法は無いでしょうか?

追記。
うまく行ったJSPを書いておきます。
<bean:include id="homepage" href="/tokyo/food_200402.html" />
<%=homepage %>
このように直接記述すると該当ファイルが*.doのアドレスのままコンテキスト外のHTMLと同等の画面が表示されました。
実際はこのようにやりたいのです。
<bean:define id ="dir" name="menuform" property="dir"/>
<bean:include id="homepage" href="<%=dir %>" />(ここが構文的に不適切なのは承知しています…)
<%=homepage %>

[ メッセージ編集済み 編集者: Rasty 編集日時 2004-03-31 16:36 ]
Rasty
会議室デビュー日: 2004/03/30
投稿数: 10
投稿日時: 2004-03-31 19:48
自己レスだらけで心苦しいですが、解決しました。
<bean:define id ="dir" name="menuform" property="dir"/>
<bean:include id="homepage" href="<%=dir %>" />
<%=homepage %>

ここの1行目(define文)を
<bean:define id ="dir" name="menuform" property="dir" type="java.lang.String"/>
とすることで要件を満たしました。
スレ汚し、失礼しました。
1

スキルアップ/キャリアアップ(JOB@IT)