0

Google App Engine プラットフォーム上の JSF のプログラムに問題があります。FileOutputStreamクラスがGAEでサポートされていないことを読んだとき、Java EEでのチャットアプリケーションの実装はほぼ完了しました。このクラス オブジェクトを使用してファイルを作成し、その中にチャット メッセージを書き込みます。スクリプトを使用すると、このファイルが index.xhtml Web サイトに読み込まれ、更新されます。

このアプリケーションを完成させるためにFileOutputStreamを置き換えることができるクラスがわからないため、助けが必要です。Pythonで例を見つけたので、これが可能であることはわかっていますが、Javaで実装するにはどうすればよいですか?

どんな助けにも感謝します。

以下に、 FileOutputSream操作を含む ChatBean クラスの一部を貼り付けます。

@Stateful
@ApplicationScoped
@ManagedBean(name="Chat")
public class ChatBean {

    private List<String> users = new ArrayList<String>();
    private String newUser;
    FileOutputStream chatHtmlBufferWriter;

    public ChatBean () throws IOException {
        ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
        String chatHtmlPath = ctx.getRealPath("/") + "chat";
        try {
            this.chatHtmlBufferWriter = new FileOutputStream(chatHtmlPath);  
            this.chatHtmlBufferWriter.write("Start chatu ąęć. <br />".getBytes("UTF-8"));
        } catch (IOException ex) {
            this.chatHtmlBufferWriter.close();
            throw ex;
        }

        users.add("Admin");
    }

    @PreDestroy
    public void closeFileBuffor() throws Exception {
        this.chatHtmlBufferWriter.close();
    }

    public String addMessage(String msg) throws IOException {
        this.chatHtmlBufferWriter.write(msg.getBytes("UTF-8"));    
        FacesContext.getCurrentInstance().getExternalContext().redirect("index.xhtml");
        return "index"; 
    } 
...
}

index.xhtml ファイル内のスクリプト:

<script src="http://code.jquery.com/jquery-latest.js"></script>
            <script>
                var currPos = 0;
                var loadChat = function() {
                    $("#chatForm\\:chatbox").load('chat');
                    currPos = $(".chat")[0].scrollHeight;
                    $(".chat").scrollTop(currPos);
                }
                var scrollChat = function() {
                    $("#chatForm\\:chatbox").load('chat');
                    $(".chat").scrollTop(currPos);
                }
                var currPos;

                $(document).ready(function() {
                    $("#chatForm\\:chatbox").load('chat', function(){
                        loadChat();
                    });
                    var refreshId = setInterval(function() {
                        scrollChat();
                    }, 1000);
                    $.ajaxSetup({ cache: false });                    
                    $("#chatForm\\:chatbox").scroll(function() {
                        currPos = $(".chat").scrollTop();
                    });
                });
            </script>
4

1 に答える 1

1

基本的に、ファイル システムに直接書き込むことはできません (読み取ることはできます)。

File like APIを持つ blobstore など、既存の GAE ストレージ API のいずれかを使用する必要があります。その他のオプションについては、データの保存ページで詳しく説明しています。

ただし、これについて正しく考えているかどうかはわかりません。現在のメッセージを返し、スクリプトによって呼び出される GET メソッドを作成したいだけです。メッセージがファイルに書き込まれることはまったくありません。まず、メッセージをメモリに保存するだけです。リンク先のチュートリアルも同じだと思います。

(更新: FileOutputStream はホワイトリストにあると最初に言いましたが、見ていましたFilterOutputStream。おっと。)

于 2012-08-26T08:59:34.187 に答える