我在 Google App Engine 平台上的 JSF 程序有问题。当我读到GAE 不支持FileOutputStream类时,我几乎完成了在 Java EE 中实现聊天应用程序。通过这个类对象,我创建文件,在其中写入聊天消息,并通过脚本在 index.xhtml 网站上加载和刷新该文件。
我需要帮助,因为我不知道我可以替换哪个类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>